Статті, які підпадають під теґ ‘ActionScript 3.0’

Оператор if керує поведінкою компілятора :)

четвер, Січень 17, 2008

Якщо в тілі умовного оператора є не серьозна помилка, а умова така, що тіло ніколи не виконається, то компілятор нічого не скаже про помилку.

Приклад:

var t:Number;
if (false){
	t = "hello";
}

Якщо Ви змінете false на true, то отримаєте помилку “1067: Implicit coercion of a value of type String to an unrelated type Number.”.

Це стосується тільки ActionScript 3.0, тобто така поведінка має місце в Flash CS3 та Flex Builder 2. В ActionScript 2.0 такої блохи немає.

Також це не стосується умовного оператора ?:.

Оновлення: 

Деякі не серьозні помилки можуть призвести до такої-ж поведінки як в попередній блосі.

var t:Number;
if (false){
	1 == null;
}

Умовний оператор ?: та оператор віднімання не товаришують

четвер, Січень 17, 2008

Маємо наступний код:

  1. trace(”begin”);
  2. var bool:Boolean = true;
  3. var flea:Number = -(bool ? 10 : 20);
  4. trace(”flea: “+flea.toString());

При спробі компіляції у Flex 2 ви отримаєте

“An internal build error has occurred. Please check the Error Log.” або

“1131: Classes must not be nested.”. Тобто, нічого працюючого Ви не отримаєте.

А Flash Вам взагалі нічого не скаже, але в output Ви не побачите навіть “begin”.

Це стосується тільки ActionScript 3.0. В ActionScript 2.0 наведений код скомпілюється як треба.

P.S. Про наведену помилку у Flex 2 Ви можете почитати тут (англійською). Вона трапляється іще в декількох випадках.

Корисна блоха з літералом Array в ActionScript 3.0

неділя, Грудень 16, 2007

В ActionScript 3.0 при створенні Array за допомогою літералу, можна залишати кому після останнього елементу і це не видасть помилки:

var myList:Array = [
"The",
"quick",
"brown",
"fox",
];

Блоху спіймав senocular, російською можете почитати на Flasher.ru.

Блоха з DisplayObjectContainer.getObjectsUnderPoint()

середа, Грудень 5, 2007

Функція getObjectsUnderPoint() працює тільки для stage, або для контейнера, який знаходиться на stage (тобто його parent == stage). Для контейнерів з більшою вкладеністю getObjectsUnderPoint() повертає порожній масив.

Блоха з 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…)