swapDepths + prevFrame = duplicateMovieClip
У нас є:
- .fla файл (AS2.0) з блохою (мувікліп з ім’ям flea на сцені).
- Код у першому кадрі:
flea._x = 113; // щоб побачити ефект
flea.swapDepths(1000);
gotoAndStop(3); - Код у третьому кадрі:
prevFrame();
Маємо:
Ще однин, такий самий, мувікліп.
Чому?
Перше, що приходить до мозку: при переході на попередній кадр Flash player чомусь не бачить, що кліп вже існує (бо він змінив глибину), але на таймлайні він повинен бути, і Flash player вирішує створити ще примірник.
Зауважте, що якщо в першому кадрі змінити ім’я мувікліпа (_name), то на другому кадрі отримаємо два, так якби ми створили дублікат. Але усі властивості будуть такіж самі, як на першому кадрі.
Оновлення від 22 листопада 2007 р.
Ми знаємо, що коли ми кладемо символ з бібліотеки на сцену (в Flash IDE), то у цього символа глибина буде від’ємна. Тож, якщо ми в поданому прикладі перекладемо мувікліп на від’ємну глибину, то ефекту дублювання не буде. Тобто, Flash Player “дивиться” тільки на від’ємні глибини. Спіймати блоху допоміг Ілля Панін. Велика йому дяка!
Ми також знаємо, що на мувікліп, що лежить на від’ємній глибині, не діє функція removeMovieClip(). Але теж саме має місце також і для дуже великих глибин. Але тут іще одна блоха. За словами адобовців ми маємо у своєму роспорядженні 16000 шарів. Але, навіть, при глибині 1000 000 000 (один мільярд) мувікліп відаляється (це не каже, що в інших випадках, крім видалення, все буде працювати). Більше того, я виявив, що немає чіткої числовой межі, коли мувікліп відаляється, а коли ні. Наприклад, на глибині 2 130 690 031 - видаляється, на одиницу вище вже не видаляється, а приблизно з 6-ти мільярдів знову видаляеться. Найвища глибина, що я знайшов, на якій відаляються - 199 699 185 647. Ще було помічено, що віставляючи велику глибину, мувікліп насправді опинявся на іншій, коли можливо видалати - на додатній, коли не можливо - від’ємній глибині (тому і не можливо відалити
).
Таґи: ActionScript 2.0