[Flash AS3] Afbeelding rotatie op en afbouwen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • Silasje
  • Registratie: April 2008
  • Laatst online: 21-08 16:54

Silasje

www.Entjes.eu

Topicstarter
Hallow medetweakers..

Ik ben bezig met een projectje waarbij ik een rad wil laten draaien zoals in "ik hou van holland"

Nu wil ik dit rad in stapjes harder laten draaien. en later weer zachter laten draaien. Hiervoor heb ik de volgende dingen al in mijn Flash bestand zitten:
var rad:MovieClip = radMc;
var speed:Number = 5;
var randomRotation:Number = Math.random() * 360;
var startBtn:MovieClip = startBtnMc;
var radTimer:Timer = new Timer(100,0);

radTimer.addEventListener(TimerEvent.TIMER,radTimerPassed);
rad.addEventListener(Event.ENTER_FRAME,radRotate);
Dit is het idee wat het uiteindelijk moet worden:
rad timer (100ms) --> rad timer passed --> rotation speed + 0.1
if radTimer passed math.random (van 15 tot 30) times
rad timer passed --> rotation speed - 0.1
Ik ben er zelf al uren mee aan het bakkeleien, maar kom er niet verder mee..
Het zou ook nog mooi zijn, dat als er aan het einde van het process, het aantal graden dat er in totaal gedraaid is, eruit kan komen als variabele.

Ik hoop dat iemand mij verder kan helpen

Canon 7D MII, 550D, Tokina 11-16mm F2.8, Sigma 17-70mm F2.8/4, Sigma 30MM F1.4, Canon 50mm 1.8 STM, Sigma 70-200 F2.8, En de bende eromheen


Acties:
  • 0 Henk 'm!

  • R4gnax
  • Registratie: Maart 2009
  • Laatst online: 06-09 17:51
Je pakt het ook eigenlijk verkeerd aan. Probeer niet om de animatie met de hand te sturen, maar probeer om de parameters te vinden die de animatie definiëren en geef deze daarna mee aan een daarvoor bestemde tween.

Pak een willekeurg getal, bijvoorbeeld tussen de 15 en 30, en neem dit als het aantal omwentelingen dat het rad gaat maken. Vermenigvuldig dit aantal omwenteligen met 2 π om tot een totaal aantal radialen R te komen dat het rad zal moeten gaan draaien. Pak een willekeurige nominale draaitijd voor één rondje, bijv. 200ms, en vermenigvuldig dit ook met je aantal omwentelinge om tot de totale draaitijd T van het rad te komen.

Pak nu een tweening library en stel een transitie in van 0 tot R over T milliseconden. Als easing functie gebruik je daarna iets met een sterke ease-in en ease-out, bijvoorbeeld een vijfde macht (quintic).

Verbindt de lopende waarde van deze tween aan de hoek van het rad dat je wil laten draaien en het zal vanzelf snelheid oppikken tijdens de eerste omwentelingen en wanneer de laatste omwentelingen in zicht komen weer afremmen. Ben je nog geinteresseerd in wanneer het rad compleet gestopt is, dan heb je in alle degelijke libraries nog een event wat afgevuurd wordt wanneer de tween compleet is.

[ Voor 8% gewijzigd door R4gnax op 21-03-2012 20:20 ]


Acties:
  • 0 Henk 'm!

  • Tsjilp
  • Registratie: November 2002
  • Niet online

Tsjilp

RS[I]ds

Pak een tween library als bijv tweenlite en gebruik een easeIn & easeOut?

In jouw geval wil je wellicht 3 tweens:

1e: easeIn
2e: linear, aantal keren herhalen
3e: easeOut

Raar... Is zo gek nog niet


Acties:
  • 0 Henk 'm!

  • Silasje
  • Registratie: April 2008
  • Laatst online: 21-08 16:54

Silasje

www.Entjes.eu

Topicstarter
Ik heb het rad ondertussen aan het roteren, dit heb ik toch doormiddel van een movieclip gedaan, tijdens het harde draai verspringt het rad een random aantal graden. en daarna stopt deze langzaam. Echter wil ik nu dat het rad bij elke 36 graden draaien een functie aanroept om een geluidje af te spelen. Dit heb ik tot nu toe:
//var
var radContainer:MovieClip = radContainer;
var radRotation:int;
var req:URLRequest = new URLRequest("sound/tick.mp3");
var geluid:Sound = new Sound();

//Events
stage.addEventListener( KeyboardEvent.KEY_DOWN, keyDownHandler );
geluid.addEventListener(Event.COMPLETE, onSoundLoaded);

//init
radContainer.stop();
geluid.load(req);

//function
function keyDownHandler(e:KeyboardEvent){
radRotation = Math.random() * 360;
radContainer.play();
trace(radRotation);
radContainer.addEventListener(Event.ENTER_FRAME,radRotate);
}

function radRotate(e:Event){
if(radContainer.currentFrame == 19){
radContainer.rotation = radRotation;
}
if(radRotate.rotation > 36){
onSoundLoaded();

}
if(radContainer.currentFrame == 91){
radContainer.stop();
radContainer.removeEventListener(Event.ENTER_FRAME,radRotate);
if(radRotation > 0 && radRotation < 36){
bierDrinken();
}
}
}
Echter kom ik er niet verder mee, ik ben nog niet zo ervaren 8)7
Dus bij elke 36 graden rotatie een functie aanroepen.. Iemand?

[ Voor 15% gewijzigd door Silasje op 02-04-2012 18:52 ]

Canon 7D MII, 550D, Tokina 11-16mm F2.8, Sigma 17-70mm F2.8/4, Sigma 30MM F1.4, Canon 50mm 1.8 STM, Sigma 70-200 F2.8, En de bende eromheen


Acties:
  • 0 Henk 'm!

  • Tsjilp
  • Registratie: November 2002
  • Niet online

Tsjilp

RS[I]ds

Kijk eens naar modulo....

spoiler:
rotation % 36 == 0

Raar... Is zo gek nog niet