Архів для Листопад, 2007

Загадка про switch

четвер, Листопад 22, 2007
var caseValue:uint = null;
switch (caseValue) {
	case 1:
		trace("С");
	case 2:
	case 3:
	default:
		trace("A");
	break;
	case 4:
	case 5:
	case 6:
		trace("B");
	break;
}

Як ви вважаєте, що буде в output при:

  1. caseValue = 1;
  2. caseValue = 5;
  3. caseValue = 10.

Відповіді далі.
(more…)

Блоха з parseFloat()

четвер, Листопад 22, 2007

Пишемо в першому кадрі:

var n:Number = parseFloat("1.2.3.4");
trace("n: " + n);

В output бачимо:

Для ActionScript 1.0:

n: undefined

Для ActionScript 2.0:

n: 1.234

Для ActionScript 3.0:

n: 123.4

Деякі пояснення далі
(more…)

swapDepths + prevFrame = duplicateMovieClip

понеділок, Листопад 19, 2007

У нас є:

  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. Ще було помічено, що віставляючи велику глибину, мувікліп насправді опинявся на іншій, коли можливо видалати - на додатній, коли не можливо - від’ємній глибині (тому і не можливо відалити :) ).

Нескінченність

четвер, Листопад 15, 2007

Swf може завантажувати сама себе.
А якщо не створювати укладеність, то це можна робити безкінечно. (З укладеністю 256 разів).
Діє як в ActionScript2.0 так і в 3.0.

Цей ролик потребує Flash Player 9

Завантажити приклад

Блоха перша.

четвер, Листопад 15, 2007

У нас є:

  1. Swf з ActionScript 2.0 з кнопкою. (AVM1)
  2. Swf з ActionScript 3.0. (AVM2)

Дія:

Завантажуемо перше в друге.

Маємо:

При натисканні на кнопку з AVM1 маємо спочатку onRollOut, потім onRollOver і потім onPress (ну і потім onRelease).

Чому?

Приклад:

Цей ролик потребує Flash Player 9

Завантажити приклад