Сейчас писал интерактивную обучалку к игре, и наткнулся на одну очень неприятную особенность, которая украла у меня несколько часов жизни ). Больше похожую на баг в ас3. В общем, не знаю баг это или нет, но суть в следующем. Есть некий класс TrainingStep, который в упрощенном виде выглядит примерно так (в очень упрощенном виде):

Код AS3:
package training {
public class TrainingStep {
public var targetDo:Sprite = null;
public var finished:Boolean = false;
}
}
Этих этапов может быть сколько угодно. Так вот, при их создании, если этап обучения предполагает щелчок по какомму-то спрайту, или его наследнику, то при создании этапа, переменной targetDo присваиватеся ссылка на этот объект.
Далее этап помещается в массив. И в другой функции, по энтерфрейму проверяется весь массив до первого не пройденного этапа. И вот тут то начинаются странности, которые не поддаются моей логике.
Если используется публичная переменная targetDo, то в цикле, при проверке ссылки на ней, вылетит обращение к объекту null.
Если же, изменить ее на приватную, для назначения использовать сеттер, а для получения геттер, то все нормально.

Код AS3:
package training {
public class TrainingStep {
private var _targetDo:Sprite = null;
public var finished:Boolean = false;
public function set targetDo(value:Sprite):void {
_targetDo = value;
}
public function get targetDo():Sprite {
return _targetDo;
}
}
}
Вот так будет все замечательно.
И вот отсюда вытекает вопрос, как так? Публичная переменная не может хранить ссылку на дисплей объект?
Или это действительно баг в языке?