[FlashMX] event bubbling of juist niet?

Pagina: 1
Acties:

  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
ps: zie 12 berichten verder voor een voorbeeld. :)

Tijdens 't maken van diverse GUI's in Flash MX loop ik telkens weer tegen 't feit aan dat onPress events nogal vreemd werken. Stel ik heb meerdere lagen in de diepte boven elkaar staan (visueel) en op 2 van die lagen hangt een onPress event. Als ik op de bovenste laag klik, dan wordt dat event genegeerd en wordt de onPress van de onderste laag uitgevoerd.

Een onMouseDown lijkt dit probleem niet echt op te lossen en komt met z'n eigen set nadelen: een onMouseDown reageert op precies dat: mouse is down - maakt niet uit waar, dus niet expliciet op het object waar je op klikt.

Valt hier op eoa. manier wat meer controle in te krijgen? Is dit een bug in Flash MX? Is dit, met 't verbeterde event-system in Flash MX 2004 opgelost?

Dus stel: ik heb een groot versleepbaar vlak (hier hangt dus een onPress en onRelease event aan). Op dat vlak staan icons die ook aanklikbaar moeten zijn. Maar als ik op een icon klik, dan klik ik dus op het versleepbare vlak. Het vlak en de icons zitten in verschillende objecten en staan alleen visueel boven elkaar.

[ Voor 5% gewijzigd door Explore op 20-04-2004 18:43 ]

[ specs ] [ Tweaker gallery ]


  • pagani
  • Registratie: Januari 2002
  • Niet online
Volgens mij kun je dit gewoon verhelpen met _this on je onPress, toch?

  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Wat zijn je Publish Settings, met name de Load Order ( Bottom up of Top Down )?

"You're only as good, as what you did last week."


  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Op beide aanklikbare clips hangt de onPress al via een this.onPress.

Load order stond op bottom up en heb 't net aangepast naar top down, maar dat haalt niet veel uit.

Wat, denk ik, van belang is, is de object structuur. Het liefst zou ik een voorbeeld laten zien, maar dat gaat even niet. Noem het 'verplaatsbare vlak', wat ik eerder noemde, even 'vlak'. De icons staan niet in mc vlak, echter stammen beide clips (vlak en icon) af van een clip waaraan de events hangen om 't vlak te verplaatsen. Je krijgt dan zo'n soort structuur:

code:
1
2
3
this.onPress = function() {
  this.vlak.startDrag();
}


Het 'this' object noem ik even 'controller'. Controller bevat 2 mc's die hier van belang zijn: vlak en icons. Icons beweegt mee met vlak, zodat het lijkt alsof het 1 ding is. In icons zitten afzonderlijke icon clips.

De icons mc staat visueel dus boven het vlak, maar zijn verder onafhankelijk van elkaar.

Echter: als ik op een icon klik (mbv. onPress), dan wordt er niet op het icon geklik, maar op het vlak: de startDrag treed in werking.

Ik heb bovenstaand stukje code al aangepast naar zoiets:

code:
1
2
3
this.onMouseDown = function() {
  this.vlak.startDrag();
}


maar dat haalt weinig uit.

Volgens mij gaat er bij mij iets simpels fout, wat ik nu over 't hoofd zie.

Als ik een ander verplaatsbaar ding boven 't vlak hang, dan kan ik die wel verplaatsen, zonder dat de startDrag van 't vlak aan de gang gaat. Dit andere ding zit echter neit in de controller mc. Het lijkt dus wel of de onMouseDown en/of onPress in de controller ahw. doorlekken naar child mc's. Ik heb dit even nagekeken, maar zie niets wat hier op wijst.

[ Voor 82% gewijzigd door Explore op 20-04-2004 15:06 ]

[ specs ] [ Tweaker gallery ]


  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

suggestie, zet het onPress event niet aan een Movieclip maar centraal op een frame. Krijg je zoiets als:

Flash ActionScript:
1
2
3
Foo.onRelease = function() {
trace( "clicked" );
}


Overigens, er zijn verschillende event-engines, te weten Flash Event Model, Callback and Listener model, ASBroadcaster, EventDispatcher, en Gdispatcher. Volgt iemand het nog? ;)

"You're only as good, as what you did last week."


  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
He Owen, nee, you lost me. Een paar van die event models ken ik wel, natuurlijk, maar die laatste 2 zeggen me niks. MX 2004 misschien?

Begrijp je m'n uitleg hierboven? Zit je in A'dam? Kom effe langs... :)

[ specs ] [ Tweaker gallery ]


  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Op verzoek nog even wat meer voorbeelden:

Flash Event Model ( Tightly coupled to instance ):
Flash ActionScript:
1
2
3
4
Foo.onRelease = function()
{
        trace("Mouse was pressed");
};


Callback and Listener Model ( Slightly coupled to instance, FUIC1 framework ):
Flash ActionScript:
1
2
3
4
5
6
function MouseClick ( reference )
{
        trace( "Je hebt geclicked op" + reference);
};

Foo.setClickHandler("MouseClick", this);


ASBroadcaster ( native implemented in Flash Player ):
Flash ActionScript:
1
2
3
4
5
AsBroadcaster.initialize( FooClass );
FooClass.addListener( classInstance );

//  broadcast events within class instances
this.broadcastMessage( "event",  param );


Eventdispatcher ( recommended way, FUIC2 ):
Flash ActionScript:
1
2
3
4
5
6
7
8
EventDispatcher.initialize( FooClass );
FooClass.addEventListener( "someEvent", listener );

//  broadcast events within class instances
var e = {};
e.type = "someEvent";
e.target = this;
dispatchEvent( e );


Eventdispatcher heeft wat flaws, met name de scope waarin een function wordt afgehandeld en welk event prioriteit heeft als er meerdere listeners zijn gedefineerd. Zijn verschillende oplossingen, je kan bijvoorbeeld een Eventproxy schrijven.

Gdispatched

HTH :)

"You're only as good, as what you did last week."


  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Ehm... Let wel dat het hier gaat om Flash MX - versie 6 dus. Al die advanced stuff heb ik nog geen kaas van gegeten, omdat ik (nog) niet bekend ben met Flash MX 2004.
Ik zal dus een oplossing moeten zoeken in Flash MX. Heb je m'n vragen boven gezien, Owen?

[ specs ] [ Tweaker gallery ]


  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

ASbroadcaster is Flash MX ( 6 dus ), en nee ik zit momenteel in het buitenland te werken. :)

"You're only as good, as what you did last week."


  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Ja, dat weet ik. ASBroadcaster gebruik ik al om eigen gedefinieerde events te laten afvangen, zodat object met elkaar kunnen 'praten'. Werkt op zich prima. In de basis.
Maar helpt dat met mijn probleem?

[ specs ] [ Tweaker gallery ]


  • oh,when?
  • Registratie: April 2000
  • Niet online

oh,when?

...

Explore schreef op 20 april 2004 @ 15:27:
Ja, dat weet ik. ASBroadcaster gebruik ik al om eigen gedefinieerde events te laten afvangen, zodat object met elkaar kunnen 'praten'. Werkt op zich prima. In de basis.
Maar helpt dat met mijn probleem?
Misschien, maar dan zal je toch echt wel met wat meer informatie moeten komen. Of je kan me misschien inhuren als consultant, url staat in me sig 8) :+

"You're only as good, as what you did last week."


  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Heb je deze post gezien: [rml]Explore in "[ FlashMX] event bubbling of juist niet?"[/rml]

Ennuh, wat moet dat kosten, mr. de consultant? :)

Maargoed, ik zie niet hoe ASBroadcaster me hier kan helpen. Ik verzin wel wat anders. Iritante omweg... Sloppy code wordt 't dan maar.

Nog effe: probleem is dus 't feit dat in de controller movie events worden gedefinieerd die dan niet meer te gebruiken zijn in de child mc's. Dus als op de controller mc een onPress event hangt, dan kan ik geen onPress gebruiken in een icon. Da's maf...

onMouseDown lost dit niet op, mijn inziens, omdat niet bekend is of op je op 't icon clickt of ergens anders. Het Mouse object heeft geen onRollOver listener (natuurlijk). En aangezien ik een onRollOver al nodig had in m'n controller, kan ik de onRollOver niet in 't icon gebruik om te detecteren waar de muis uithangt... Pfrt! Om gek van te worden! |:(

[ Voor 84% gewijzigd door Explore op 20-04-2004 15:47 ]

[ specs ] [ Tweaker gallery ]


  • Explore
  • Registratie: Maart 2001
  • Laatst online: 08-04-2011

Explore

Op zoek naar werk

Topicstarter
Oke, voorbeeldje dan maar....

Zie hier: http://webtweakers.com/onpress/

Daar is ook een .fla file te downloaden, waarin je kan zien dat de onPress op 't grote vlak de onPress op 't icon annuleert.

Hetzelfde geldt overigens ook voor onRollOver, onRollOut en onRelease. Gebruik van 1 van deze events, annuleert al die events in child-movieclips. Heel fijn... Maar wat is hier aan te doen???

[ specs ] [ Tweaker gallery ]

Pagina: 1