Архів для Березень, 2008

Загадка на пильність

четвер, Березень 13, 2008

Маємо код:

  1. for(var i:Number = 0; i<10; i++);
    1. if(i%2 == 0);
      1. trace(i);

Що буде в output?

Далі відповідь.

(more…)

flash.debugger.enterDebugger()

четвер, Березень 13, 2008
  1. import flash.debugger.enterDebugger;
  2. enterDebugger();

Спробуйте під час дебагу :)
Поведінка така ж сама як при breakpoint.

Дякую Ростику за інформацію!

Dictionary не підтримує QName

середа, Березень 12, 2008
  1. import flash.utils.*;
  2. var d:Dictionary = new Dictionary();
  3. var qn:QName = new QName(new Namespace(’ns’), ‘name’);
  4. d[qn] = true;

Останній рядок коду видасть помилку:
ReferenceError: Error #1056: Cannot create property ns::name on flash.utils.Dictionary.

Тобто неможливо створити змінну у Dictionary типу QName.

А Ви знаєте які ще типи  не підтримує Dictionary?

Дякую Олегові Галабурда (він же a_[w]) за інформацію!

Блохи російською

вівторок, Березень 11, 2008

Відтепер блохи будуть виходити двома мовами російською та українською.

Змінити мову можна за допомогою меню у sidebar’і.

Старі статті та інтерфейс будуть перекладатися поступово. Прогрес можна спостерігати на сторінці “Переклади”.

Як зрозуміти, що подія виконалась саме на передплатнику?

вівторок, Березень 11, 2008

Іноді нам потрібно знати чи подія виконалась на передплатнику чи прийшло внаслідок bubbling. Наприклад, нам потрібно відслідкувати натискання миші на stage, але нам потрібно знати напевно, що користувач натиснув саме на stage, а не на його child. Авжеж, ми можемо зробити

stage.mouseChildren = false;

але це частіше всього не підходить.

Можна зробити двома рівносильними способами.

В обробнику для stage виконаємо перевірку на рівність event.target з event.currentTarget:

  1. function stageClickHandler(event:MouseEvent):void
  2. {
    1. if(event.target != event.currentTarget)
      1. return;
    1. // Your code here
  3. }

Або перевіримо яка наразі фаза event flow. Якщо вона дорівнює 2 (target phase), тоді подія виконалась саме на stage. Інакше припиняємо виконання обробника:

  1. function stageClickHandler(event:MouseEvent):void
  2. {
    1. if(event.eventPhase != 2)
      1. return;
    1. // Your code here
  3. }

Докладніше про подійну модель в ActionScript 3.0 ви можете почитати у доповіді Кості Ковальова (російською).