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