Jeg er ved at lave et website, hvor der er nogle kasser, der skal skifte størelse når man trykker på dem. Det fungere fint enkeltvis. Jeg ønsker nu at de tjekker på hinanden, for at se om nogen af de andre er udvidet. Hvis en anden kasse en den man trykker på er udvidet, skal den først tweene tilbage til udgangspunktet, hvorefter den kasse man trykkede på skal udvide sig. Der må altså ikke ske overlap. den der udvider sig, skal først starte animationen når den andens animation er færdig.
Jeg styrer anmationen vha. følgende actionscript:
on (release) { import mx.transitions.Tween; import mx.transitions.easing.*; if (_global.i == 1) { var xScaleTind:Tween = new Tween(_root.blaa, "_xscale", Elastic.easeOut, 200, 100, 1, true); var yScaleTind:Tween = new Tween(_root.blaa, "_yscale", Elastic.easeOut, 200, 100, 1, true); xScaleT.onMotionFinished = function() { }; yScaleT.onMotionFinished = function() { }; trace(i); } if (_global.i == 0) { var xScaleT:Tween = new Tween(_root.blaa, "_xscale", Elastic.easeOut, 100, 200, 1, true); var yScaleT:Tween = new Tween(_root.blaa, "_yscale", Elastic.easeOut, 100, 200, 1, true); xScaleT.onMotionFinished = function() { }; yScaleT.onMotionFinished = function() { }; trace(i); } if (_global.i == 0) { _global.i = 1; } else { _global.i = 0; } }
Virksomheder er på vej fra store sprogmodeller, der svarer på spørgsmål, til AI-agenter, der kan udføre opgaver på egen hånd. Det gør teknologien mere nyttig – og langt mere risikabel.
Det rigtig smarte ved Tween-klassen er jo de event handlers, som jeg kan se, du ikke implementerer.
Fremgangsmåden vil være, at du laver en eller anden variabel, som fortæller, hvilken kasse, der PT er aktiv (udvidet). Hvis vi så forestiller os, at dine kasser er lavet vha. en eller anden klasse, så skal der ved klik på en kasse ske det, at den kasse, der PT er den aktive, udfører sin ud-animation (som du laver til en del af klassen). Du sørger så for at fange dens onMotionFinished event (for den ene eller den anden tween, de burde køre lige hurtigt), hvorpå du sætter det nyligt klikke movieclip til at være det aktive og beder det udføre sin ind-animation.
I forhold til den kode, du har nu, vil det rigtig smarte være at lave det om til klasser, men dit navn taget i betragtning burde det være en smal sag ;)
Da jeg alligevel ikke har bedre at tage mig til, har jeg lavet et eksempel. Først koden på den .fla, der bruger klassen, dernæst koden til klassen TweenBox. Du sørger selvfølgelig for at placere din tweenboxes, som det passer dig, jeg har bare placeret dem vha. af en for-løkke.
Løsningen er egentlig ikke så elegant endda - gad godt have lavet noget lidt pænere callBack-halløj, men som det er nu, udløser onMotionFinished en function i det movieclip, der har instantieret klassen, i dette tilfælde _level0.
.fla: ----------- var tboxes:Array = new Array(); var xPlacer:Number = 20; var yPlacer:Number = 50; var thisRoot:MovieClip = this; var activeTweenBox:TweenBox; var nextTweenBox:TweenBox; var thisBox:TweenBox;
function performNextIn():Void { activeTweenBox = nextTweenBox; activeTweenBox.doInAnim(); }
public function doInAnim():Void { xTween = new Tween(this, "_xscale", Elastic.easeOut, 100, 200, 1, true); yTween = new Tween(this, "_yscale", Elastic.easeOut, 100, 200, 1, true); }
public function doOutAnim():Void { xTween = new Tween(this, "_xscale", Elastic.easeOut, 200, 100, 1, true) yTween = new Tween(this, "_yscale", Elastic.easeOut, 200, 100, 1, true) xTween.onMotionFinished = mx.utils.Delegate.create(this,handleFinish); }
public function handleFinish():Void { containerClip.performNextIn(); }
}
Synes godt om
Ny brugerNybegynder
Din løsning...
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.