PDA

Volledige versie bekijken : knop reageert anders in een movieclip


Sneaker
%Europe/Berlin %082 %2009, 02:59
Ik zit met een beetje een raar probleem. Simpel gezegd heb ik op frame één een knop en een movieclip. De movieclip bestaat uit een simpele tween waarbij de graphic van links naar rechts beweegt. Op het tweede frame geldt hetzelfde. Wanneer ik op de knop in frame 1 drukt, ga je naar frame 2, maar belangrijker, je stopt de movieclip op frame 25, dus halverwege de tween.

Dit werkt allemaal prima met een normale knop. Nu echter het probleem. De knop moet in een movieclip komen. En dan reageert die ineens heel erg anders. Hij negeert dan de tweede regel code die de movie clip aanspeekt.

Onder de knop heb ik de volgende code hangen:
on(press){
_root.gotoAndStop(2);
_root.berg.gotoAndStop(25);
}

Ik heb even een fla toegevoegd die dit illustreert. De movieclip met daarin de knop in frame 1 werkt niet goed. De knop die alleen staat in frame 2 werkt perfect. De fla is hieronder te downloaden:
http://student.gmt.hro.nl/0758036/2/test2.fla

Hoe kan dit en hoe kan ik dit omzeilen. De knoppen moeten namelijk in movieclips komen.

digitalecartoons
%Europe/Berlin %394 %2009, 10:27
//Frame 1
//'pano1' staat op frame 1
on(press){
_root.gotoAndStop(2);
_root.berg.gotoAndStop(25);
}


//Frame 2
//'berg' staat op frame 2
on(press){
_root.gotoAndStop(1);
_root.pano1.gotoAndStop(25);
}

Als je in frame 1 op de button klikt, bestaat 'berg' nog niet op de stage. Je zegt dus dat hij tijdens het klikken 'berg' naar diens frame 25 moet gaan, maar die zal hij op frame 1 niet vinden. Voor frame 2 hetzelfde: 'pano1' bestaat niet op frame 2. Die staat op frame 1, dus tijdens het klikken op de button in frame 2 zal hij 'pano1' niet kunnen vinden.

Je zou het op kunnen lossen door tijdens het klikken op een button een variabele in te stellen. Bijvoorbeeld op frame 1 button1clicked = true. Op frame 2 wordt dan eerst gekeken of button1clicked true is. Is dat zo dan wordt _root.pano1.gotoAndStop(25) uitgevoerd. Dat regeltje zet je dus op frame 2 waar 'pano1' zich ook bevind. En op frame 2 zet je als button actie dan b.v. button2clicked = true. Waar je op frame 1 dan weer op laat checken.

Sneaker
%Europe/Berlin %808 %2009, 20:23
Als je in frame 1 op de button klikt, bestaat 'berg' nog niet op de stage. Je zegt dus dat hij tijdens het klikken 'berg' naar diens frame 25 moet gaan, maar die zal hij op frame 1 niet vinden. Voor frame 2 hetzelfde: 'pano1' bestaat niet op frame 2. Die staat op frame 1, dus tijdens het klikken op de button in frame 2 zal hij 'pano1' niet kunnen vinden.
Dit zou moeten kloppen, het klinkt ook logisch. Maar wanneer ik de knop direct op de tijdlijn zet in plaats van in een movieclip, dan werkt de code wel. Terwijl er dan verder niets veranderd is.

digitalecartoons
%Europe/Berlin %859 %2009, 21:37
on(press){
_root.gotoAndStop(2);
trace(1);
_root.berg.gotoAndStop(25);
}

In het geval van de button inside de movieclip lijkt hij inderdaad alles onder de _root.gotoAndStop(2); over te slaan want de trace wordt nooit uitgevoerd.

Heb het bestandje even naar AS2 omgezet. Code aan clips hangen is wat ouderwets. Movieclips in plaats van buttons is meer aan te raden. Code staat op de bovenste laag van waaruit je alle movieclip-buttons aanspreekt. De 'buttons' zelf hebben dus geen code meer aan zich hangen.

De button binnen de clip op frame 1 wordt zo aangesproken:
stop();
knop1.insidebutton.onPress = function() {
gotoAndStop(2);
berg.gotoAndStop(25);
};

De button op de timeline op frame 2 gewoon met:
stop();
knop2.onPress = function() {
gotoAndStop(1);
pano1.gotoAndStop(25);
};

Denk dat dit het effect is wat je in gedachten had?

Sneaker
%Europe/Berlin %911 %2009, 22:53
Ja, dit is echt exact wat ik voor ogen had. Super bedankt digitalecartoons. En ik zal voortaan proberen om het AS in een frame te plaatsen. Had het geleerd om het aan clips te hangen, maar dit is een stuk makkelijker en praktischer.