swapDepths + prevFrame = duplicateMovieClip

У нас є:

  1. .fla файл (AS2.0) з блохою (мувікліп з ім’ям flea на сцені).
  2. Код у першому кадрі:
    flea._x = 113; // щоб побачити ефект
    flea.swapDepths(1000);
    gotoAndStop(3);
  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. Ще було помічено, що віставляючи велику глибину, мувікліп насправді опинявся на іншій, коли можливо видалати - на додатній, коли не можливо - від’ємній глибині (тому і не можливо відалити :) ).

Таґи:

Залиште свій коментар