PDA

Просмотр полной версии : removeMovieClip


vorbiz
11.12.2008, 23:32
Доброе время суток. Пишу класс:

class dec2Bin
{
private var gl_x = 50
private var gl_y = 60
private var iteration = 0
private var canvas = null
private var number = 0

function dec2Bin(num_x, num_y)
{
_root.canvas.removeMovieClip()
number = Math.round(Math.random()*10000)/10000
canvas = _root.createEmptyMovieClip('canvas', _root.getNextHighestDepth());
canvas._y = 15
canvas._x = 0

initDisplay(gl_x, gl_y)
}

private function initDisplay(num_x, num_y)
{
drawNumber(num_x, num_y, number + " = 0.", "init_number")
}

private function drawNumber(num_x, num_y, num, name)
{
var mc = canvas.createEmptyMovieClip(name, canvas.getNextHighestDepth());
mc._x = num_x
mc._y = num_y
num_x = 0
num_y = 0
for (var i = 0; i < num.length; i++) {
if (num.substr(i, 1) == " ") {
num_x += 25
} else {
var mv = mc.attachMovie("movbtn0", "num_" + i, mc.getNextHighestDepth(), {_x:num_x, _y:num_y})
mv.label.text = num.substr(i, 1)
num_x += 25
}
}
}

}

В конструкторе _root.canvas.removeMovieClip() не хочет удалять канвас.
canvas.init_number удаляется только один раз. Все depth положительные.
Профи, будьте добры, подскажите, что я не так делаю? Заранее благодарен.

Kuruki
12.12.2008, 10:19
removeMovieClip работает для клипов, созданных на сцене каким-либо программным методом, в смысле вы ручками клип клали на сцену? :)

vorbiz
12.12.2008, 12:15
Я весь код привёл. Всё делается исключительно программно.

Kuruki
12.12.2008, 12:44
У меня ваш код работает, строчки не накладываются друг на друга. Или я неправильно вас понял?

vorbiz
12.12.2008, 12:48
При каждом создании объекта _root.d2b = new dec2Bin старый объект должен удаляться со всеми мувиклипами. Вот я и пытаюсь удалить основной мувиклип canvas, в котором остальные создаются, при каждом создании экземпляра класса.

Kuruki
12.12.2008, 12:54
Ну так он удаляется.
var bb = new dec2Bin(100, 100);
but.onRelease = function(){
var ss = new dec2Bin(100, 100);
}
нажимаю на кнопку - каждый раз новая строчка. Если убрать _root.canvas.removeMovieClip()
то строчки друг на друга накладываются.

vorbiz
12.12.2008, 12:57
Странно всё это. Почему у меня не удаляется тогда? as2 под 8 флеш компилю. студия - cs4.
И кстати, проверьте в 3 раз. Просто я пытался удалять init_number и он после первого раза удалятся, а после второго уже нет.
И вот ещё. Проверьте дебаггером. Оно может накладваться, просто незаметно это. Объект не уничтожается.

Wolsh
12.12.2008, 13:58
а trace(_root.canvas) после ремува что говорит?

vorbiz
12.12.2008, 20:05
_level0.canvas - до
_level0.canvas - и после

Wolsh
12.12.2008, 20:16
а теперь также до и после romove трейс, только trace(_root.canvas.getDepth())
Есть подозрение, что у Вас там несколько канвасов получается и первый не удалился.

vorbiz
12.12.2008, 20:23
1048576
1048576
Я это уже проверял :(

chingachgoog
12.12.2008, 20:52
Можно попробывать не удалять старый канвас ремувом, а сразу создавать новый канвас на той же глубине, что и старый канвас.


canvas = _root.createEmptyMovieClip('canvas', _root.canvas.getDepth());

vorbiz
12.12.2008, 21:08
Спасибо, я попробую. Даже если это сработает. В другом месте тоже есть подобный код и там тоже не удаляется. А там нужно не просто очистить и создать заново, там нужно совсем удалить клип. Что делать, не знаю.
Да, если это важно. Во флешке имеются стандартные компоненты. Лист и батон. Звучит как погоняла братков, но это не так.

Добавлено через 16 часов 29 минут
chingachgoog, спасибо огромное, код сработал.