Не експортовані шари все рівно створюють кадри

Tuesday, February 5, 2008
  1. Створіть 2 шари.
  2. Один з них зробіть довжиною в 20 кадрів, та позначте його як Guide.
  3. На іншому напишіть код:
    trace(totalFrames);
    або
    trace(_totalFrames);
    для ActionScript 2.0

В output ви будете отримувати “20″ кожні 20 кадрів :)

Теж саме діється, якщо перший шар позначити як невидимий і в налаштуваннях паблішингу зняти галочку “Export hidden layers” (ця опція з’явилась у Flash CS3).

TextField, що створений у Flash IDE

Saturday, February 2, 2008

Маємо:

  1. Створений руцями TextField, з ім’ям fleaT, та синього кольору (#0000FF);
  2. Код у першому кадрі:
    /*
    removeChildAt(0); // deleting the texfield created by hands
    fleaT = new TextField();
    addChild(fleaT);
    */
    
    var tf:TextFormat = new TextFormat();
    tf.color = 0xFF0000;
    fleaT.setTextFormat(tf);
    fleaT.defaultTextFormat = tf;
    
    fleaT.textColor = 0xFF0000;
    
    fleaT.htmlText = "TextField<font color='#00FF00'> flea</font>";

Якби це було загадкою, і треба було відповісти яким кольором будуть слова у текстовому полі, то я б відповів, що слово “TextField” буде червоним (#FF0000), а “flea” – зеленим (#00FF00). Але ця відповідь буде вірною, якщо перші три рядки не будуть закоментовані (якщо TextField буде створено за допомогою ActionScript). А без перших рядків слово “TextField” буде синього кольору (#0000FF), тобто тим кольором який ми призначили руцями.

Graphics.beginBitmapFill()

Wednesday, January 23, 2008

При фарбуванні Bitmap-ою, фарбування відбувається починаючи з координат x:0, y:0, а тоді наша фігура (наприклад, при drawRect() це буде прямокутник) “нібито” стає маскою для щойно зафарбованої прощини. У прикладі при тяганні повзунка я наново перефарбовую Shape.graphics змінюючи тільки x та y для drawRect():

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

Оновлення: Як виявилось, ця блоха тільки для мене і тільки в одному з проектів :) Насправді, якщо Вам потрібна така дія, яку очікував я, то Вам потрібно використовувати матрицю зі зміщенням як другий параметр до функції Graphics.beginBitmapFill(). Наведу приклад:

var m:Matrix = new Matrix();
m.translate(posX, posY); // posX та posY - це бажана позиція кінцевого прямокутника (чи будь-якої іншої фігури)
someShape.graphics.lineStyle();
someShape.graphics.beginBitmapFill(someBitmap, m);
someShape.graphics.drawRect(posX, posY, someBitmap.width, someBitmap.height); // ті ж самі posX та posY
someShape.graphics.endFill();

Блоха з DisplayObject.alpha

Thursday, January 17, 2008

Ми всі знаємо, що DisplayObject.alpha в ActionScript 3.0 працює з числами від 0 до 1. Але:

  1. DisplayObject.alpha приймає числа з рухомою комою від -128 до 127.
  2. DisplayObject.alpha має тип Number, але в нього така-ж поведінка при переповненні як і в int. Тобто якщо Ви подасте значення 128, то alpha буде дорівнювати -128.
  3. Якщо alpha більше ніж 1, то по краях усіх Bitmap-ів будуть помітні неприємні артефакти.

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

  4. Оновлення: Якщо для контейнеру виставляти alpha, наприклад, 0.5, а для його дитини 127/2, то дитина не буде прозора. Добто тут має місце компенсація прозорості. Але вона перестає діяти, якщо у контейнера alpha дорівнює 0. На прикладі зрозуміліше (потягайте повзунок):

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

    Дякую за підказку Іллю Паніна.

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

Thursday, January 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;
}