PDA

Просмотр полной версии : Удалить все клипы


Captain Power
07.01.2006, 23:35
Мужики .. помогите ...

гружу клипы в корень на след. свободный уровень ...
клипы имеют имена g001, g002, g003 и т.д. (клипов ОЧЕНЬ МНОГО)

так вот ... каждый из клипов грузица и несёт в себе кнопку со скриптом ... так вот вопрос:

как мне написать чтобы при нажатии на кнопку внутри клипа с именем скажем g004 он удалял из рута все клипы с именам старше своего ...

ещё раз ...

на сцене есть g001 g002 g003 g004 g005 g006
надо из g003 убить все кроме него самого и тех что младше ...

спасибо ... очень жду ...

Antares
07.01.2006, 23:43
Узнать, является ли объект мувиклипом, можно воспользовавшись instanceof. Глубину получить -- с помощью MovieClip.getDepth();


function removeMovieClipHigher( offset:Number ) : Void
{
for(var k in _root)
{
var isMovieClip:Boolean = _root[k] instanceof MovieClip;
if( isMovieClip )
{
if( _root[k].getDepth() > offset )
_root[k].removeMovieClip();
}
}
}

Captain Power
08.01.2006, 06:16
СПАСИБО ...

а как снести все переменные начиная с текущей?

поясняю ... загрузился очередной мувик и принёс с собой переменную (скажем переменную с именем q005) ...

так вот надо чтобы он автоматически при этом удалил все переменней с номерами q006,q007,q008 и т.д. (их очень много но они все пронумерованы таким образом)

спасибо

Antares
08.01.2006, 06:37
Самый простой способ удалить переменную -- присвоить ей null. Почти такой же простой -- вспомнить про delete.

Похоже, сам ты не догадаешься...

for ( var i = 0; i < 100; i++ )
{
if ( i < 10 ) i = String("0" + i);
if ( i < 100 ) i = String ("0" + i);
delete this["q" + i];
}

Captain Power
08.01.2006, 06:50
СПАСИБО ещ

Captain Power
08.01.2006, 06:52
СПАСИБО ещё раз .. ты так быстро отвечаешь и ... уже ночь ... но этот код подвешивает программу ... чтото гдето нетак :(

я его вставил в функцию кнопки ... чтобы эта операция проходила при нажатии

ja.onRelease = function() {
attachMovie("q006", "q006", 0, {_y:y+30});
_root.q006=1;

for ( var i = 0; i < 100; i++ )
{
if ( i < 10 ) i = String("0" + i);
if ( i < 100 ) i = String ("0" + i);
delete _root["q" + i];
}
};

вот так ... что не так? :) надо убить всё начиная с q007

K.A.T.A.F.A.L.K.E.R
08.01.2006, 15:43
if ( i < 10 ) i = String("0" + i);

Туплю или надо все же "00" + i? :rolleyes:

K.A.T.A.F.A.L.K.E.R
08.01.2006, 15:45
attachMovie("q006", "q006", 0, {_y:y+30});
_root.q006=1;

Ого... Сильно... :D

Antares
08.01.2006, 15:54
Не надо 00 + i, тогда на шаге 27 ты получишь не 027, а 0027. Надо просто не пользоваться одной и той же переменной.


for ( var i = 0; i < 100; i++ )
{
if ( i < 10 ) var j = String("0" + i);
if ( i < 100 ) j = String ("0" + i);
delete this["q" + j];
}

K.A.T.A.F.A.L.K.E.R
08.01.2006, 16:12
Не надо 00 + i, тогда на шаге 27 ты получишь не 027, а 0027. Надо просто не пользоваться одной и той же переменной.


for ( var i = 0; i < 100; i++ )
{
if ( i < 10 ) var j = String("0" + i);
if ( i < 100 ) j = String ("0" + i);
delete this["q" + j];
}

протупил :) Но ты тоже :) В твоем коде, к примеру, i=5. Тогда j=05... Или я опять туплю? :rolleyes: :D
Да и вообще:

for ( var i = 0; i < 100; i++ )
{
if (i>=10 )
j = String ("0" + i)
else
j = String("00" + i);
delete this["q" + j];
}

Captain Power
08.01.2006, 17:09
спасибо ...

K.A.T.A.F.A.L.K.E.R
не смейся надо мной ... я новичок ... :)) лучше скажи что я не так написал ... почему ты меня высмеял? как прально?

K.A.T.A.F.A.L.K.E.R
08.01.2006, 18:30
спасибо ...

K.A.T.A.F.A.L.K.E.R
не смейся надо мной ... я новичок ... :)) лучше скажи что я не так написал ... почему ты меня высмеял? как прально?
да я тебя не высмеял :D Просто ты создаешь мув (через attachMovie), а потом присваиваешь ему какую-то единицу... В чем смысл? :confused:

Antares
08.01.2006, 18:30
Катафалкер, ты попробуй сначала, а потом заявляй, что человек тупит. По-твоему при выполнении первого условия второе не выполнится?

K.A.T.A.F.A.L.K.E.R
08.01.2006, 19:36
Катафалкер, ты попробуй сначала, а потом заявляй, что человек тупит. По-твоему при выполнении первого условия второе не выполнится?
if ( i < 10 ) var j = String("0" + i);
if ( i < 100 ) j = String ("0" + i);
i=5. Первое условие выполняется? Да, выполняется. После выполнения имеем j=05.
Второе условие выполняется? Да, выполняется. После его выполнения имеем значение j=05. А должны иметь 005.
P.S. Зачем так нервничать? Я ж сразу же оговорил возможность того что я туплю... Хотя вроде все правильно написал... :rolleyes:
P.P.S. И зачем вообще условие i<100?

Antares
08.01.2006, 19:47
Аха, надо второй раз к j цеплять, верно.
Условие для того, что после 100 уже не надо цеплять нули. А всего цикл может и не 100, как у меня, а 300, 400 и 900 итераций проработать.

K.A.T.A.F.A.L.K.E.R
08.01.2006, 19:51
Условие для того, что после 100 уже не надо цеплять нули. А всего цикл может и не 100, как у меня, а 300, 400 и 900 итераций проработать.
Тогда да...

Captain Power
09.01.2006, 03:29
проверьте пожалуйста ...

ja.onRelease = function() {
for ( var i = 0; i < 100; i++ )
{
if ( i < 10 ) var j = String("0" + i);
if ( i < 900 ) j = String ("9" + i);
delete [_root + "." + "q" + j];
}
attachMovie("q007", "q007", 0, {_y:y+30});
_root.q005=1;
};

вот в чём дело ... этот скрипт странно срабатывает ... надо чтоб он стирал все перемнные начиная с q006 (следущий номер после того откуда происходит вызов ... у меня каждый клип имеет одноимённую переменную) до q999; всё что меньше q006 то есть q005 и ниже трогать низя ...

соответсвенно кога я нажму на кнопку в q007 клипе надо стереть всё что выше q007 и т.п.

Antares
09.01.2006, 03:48
1. Тэгом [ code ] пользуемся, сколько тебе еще раз повторить?
2. Объясни назначение строки

if ( i < 900 ) j = String ("9" + i);


Выше же написали работающий вариант, да, с одним недочетом, но мне на него указали и я его поправил, даже объяснив, что зачем делал.

Captain Power
09.01.2006, 04:56
всё ... УРА ... работает ...

ja.onRelease = function() {
for ( var i = 1; i < 100; i++ )
{
if (i>=10 )
j = String ("0" + i)
else
j = String("00" + i);
delete [_root + "." + "q" + j];
}

attachMovie("q001", "q001", 0, {_y:y+30});
_root.q000=1;
};

спасибо большое ... единственно при таком раскладе он стирает всё до q099 а надо до q999

но главное что зарпаботало ... сорри за тупизм :)

K.A.T.A.F.A.L.K.E.R
09.01.2006, 16:21
спасибо большое ... единственно при таком раскладе он стирает всё до q099 а надо до q999

но главное что зарпаботало ... сорри за тупизм :)
Делай так как Антарес написал - и будет удалять все что надо... И границы цикла расширь - сам до 100 делаешь, а удивляешься почему до 900 не удаляет... :)

Antares
09.01.2006, 16:42
Тэгом code пользуйся, последнее устное предупреждение

JudgeFog
10.01.2006, 00:01
ищем академическое решение надуманой проблемы.
у меня была такая ситуация с длинным списком еще на пятерке;

худо было именно из-за наличия цикла

грузить надо не в корень, а во вспомогательный мув (контейнер)
когда надо убить все и оставить текущий,
1. запоминаем числовую часть имени клипа (004)
2. убиваем контейнер
3. создаем контейнер снова
4. берем сохраненный индекс и грузим клип с этим индексом в пустой контейнер