Let’s say you need to animate some custom property of object. And you choose to use Actuate as tweening library:
Actuate.tween(someObject, 1.0, { myOffsetX: 100 });
Moreover, you need to do some work when property updated, so you decide to create a setter:
public var myOffsetX(default, set):Int;
private function set_myOffsetX(value:Int):Int {
if (value != myOffsetX) {
myOffsetX = value;
doSomeWork();
}
return value;
}
It works fine while you building it to flash, but stop working on html5 or native.
Solution is very simple – define getter:
private var _myOffsetX:Int;
public var myOffsetX(get, set):Int;
private function get_myOffsetX():Int {
return _myOffsetX;
}
private function set_myOffsetX(value:Int):Int {
if (value != _myOffsetX) {
_myOffsetX = value;
doSomeWork();
}
return value;
}
You must do it because of these lines of code inside GenericActuator:
if (#if flash false && #end Reflect.hasField (target, i)) {
Reflect.setField (target, i, Reflect.field (properties, i));
} else {
Reflect.setProperty (target, i, Reflect.field (properties, i));
}
Because when you have default getter Haxe generates real field (and it work fine on flash just because of #if flash false && #end).
I’m not try to say that it is a big problem, but it is confusing.
