PDA

Volledige versie bekijken : EventListener op property ?


mech7
%Europe/Berlin %226 %2010, 05:25
Is het mogelijk om een eventListener alleen op een property te zetten?

bv.. this.rotationZ.addEventListener(Event.CHANGE, rotating);

Heliosjiee
%Europe/Berlin %310 %2010, 07:27
Nope, je kunt alleen event listeners aan extenties van de klasse InteractiveObject. .rotationZ is een Number property dus dat zal niet werken.

Je zult een polling mechanisme moeten maken die om de bepaalde tijd die property opvraagt, of eromheen programmeren (aangeraden).

TheDutch
%Europe/Berlin %373 %2010, 08:57
Nope, je kunt alleen event listeners aan extenties van de klasse InteractiveObject.
Je bedoelt denk ik subclasses van EventDispatcher ;).

@Mech7
Ik zou zoiets maken in jouw geval:

package
{
public class JouwClass extends Sprite
{
override public function set rotationZ(value:Number):void
{
super.rotationZ = value;
rotating(this, "rotationZ");
}

protected function rotating(host:Object, prop:String):void
{
trace("Rotating " + host + "." + prop + ": " + host[prop]);
}
}
}

var jc:JouwClass = new JouwClass();
jc.rotationZ = 35;

// Nu zou je de trace moeten zien.

Dan hoef je niet te gaan pollen steeds of een waarde is veranderd, maar weet je direct wanneer dit is gebeurd :).

mech7
%Europe/Berlin %392 %2010, 09:25
:) ah bedankt.. ik ben er ook achter gekomen dat met GTween, je een change event kan zetten op je Tween :) eigenlijk hetzelfde als onUpdate met tweener :#

jaspermuts
%Europe/Berlin %415 %2010, 09:58
Nope, je kunt alleen event listeners aan extenties van de klasse InteractiveObject. .rotationZ is een Number property dus dat zal niet werken..
Ik begrijp deze comment ook niet, wat is een Number property? rotationZ is niet een property van Number, maar een van DisplayObject die toevallig vh type Number is, maar dat wil dan nog niet veel zeggen over wat je er mee kan.

:) ah bedankt.. ik ben er ook achter gekomen dat met GTween, je een change event kan zetten op je Tween :) eigenlijk hetzelfde als onUpdate met tweener :#
Dat kan inderdaad, maar wat je originele vraag was, dat zou wel kunnen (deels zoals TheDutch deed), dmv het extenden van (een subclass van) DisplayObject, omdat dat de subclass van EventDispatcher is waar rotationZ in is gedefinieerd):


public class TestClass extends DisplayObject // of Shape, Sprite, MovieClip, Bitmap...
{
override public function set rotationZ(value:Number):void
{
if(value != this.rotationZ) // weet niet zeker of dit nodig is, maar dan krijg je zeker geen events als de waarde wordt gelijk gezet aan wat het al was.
{
super.rotationZ = value;
this.dispatchEvent(new Event('changedRotationZ'));

}
}
}

// usage
var dinges:TestClass = new TestClass();
dindes.addEventListener('changedRotationZ', onChange);
function onChange(event:Event):void
{
trace('changed rotation Z');
}
En daar zou je natuurlijk ook een uitgebreidere custom Event voor kunnen gebruiken