Aujourd’hui voici un exemple de code pour créer un effet d’accélération et d’inertie en Flash ActionScript 3.0.
Le personnage va commencer à accélérer si on appuie sur une flèche. Il atteindra sa vitesse maximale puis il ralentira si on relâche la touche.
[swf:/wp-content/uploads/2013/09/Flash_acceleration_benoifreslon.com_.swf 550 400]
Vous pouvez télécharger le code source ici : Flash_acceleration_benoifreslon.com
// Copyrights // Benoît Freslon // https://www.benoitfreslon.com import flash.events.KeyboardEvent; import flash.events.MouseEvent; // Constantes (Vous pouvez modifier ces valeurs) const acceleration:Number = 0.1; const decceleration:Number = 0.9; const speedMax:Number = 5; // Variables var speedX:Number = 0; var speedY:Number = 0; // Etats des touches var leftPressed:Boolean = false; var rightPressed:Boolean = false; var upPressed:Boolean = false; var downPressed:Boolean = false; // Evénements clavier stage.addEventListener(KeyboardEvent.KEY_DOWN, keyDown); stage.addEventListener(KeyboardEvent.KEY_UP, keyUp); function keyDown(e:KeyboardEvent):void { switch (e.keyCode) { case 37 : leftPressed = true; break; case 38 : upPressed = true; break; case 39 : rightPressed = true; break; case 40 : downPressed = true; break; } } function keyUp(e:KeyboardEvent):void { switch (e.keyCode) { case 37 : leftPressed = false; break; case 38 : upPressed = false; break; case 39 : rightPressed = false; break; case 40 : downPressed = false; break; } } // Evénement répété toutes les images pig.addEventListener(Event.ENTER_FRAME, enterFrame); function enterFrame(e:Event):void { // Si un touche est enfoncée on augmente la valeur de la vitesse avec la valeur d'accélération if (upPressed) { speedY -= acceleration; } else if (downPressed) { speedY += acceleration; } else { // Si la touche haut et bas sont relâchées alors on diminue la vitesse avec la valeur de decceleration speedY *= decceleration; } if (leftPressed) { speedX -= acceleration; } else if (rightPressed) { speedX += acceleration; } else { speedX *= decceleration; } // Ne pas oublier de limiter les vitesses if (speedX > speedMax) { speedX = speedMax; } if (speedX <-speedMax) { speedX = - speedMax; } if (speedY > speedMax) { speedY = speedMax; } if (speedY <-speedMax) { speedY = - speedMax; } // Déplacer le cochon constamment pig.x += speedX; pig.y += speedY; // Affiche les valeurs sur l'interface tValues.text = "speedX: " + speedX + "\nspeedY: " + speedY; } // RAZ du cochon stage.addEventListener(MouseEvent.CLICK , click); function click(e:MouseEvent):void { pig.x = stage.stageWidth / 2; pig.y = stage.stageHeight / 2; }