Code ActionScript AS3 pour déplacer un sprite avec l'aide des touches claviers
Nous allons continuer dans le même PROJET FLASH AS3 « pile », projet utilisant le principe des, LISTE PRINCIPALE et des LISTE AFFICHAGES CONTENEURS. afin de déplacer l'occurrence de sprite « cont1 » grâce aux touches clavier.Code AS3 associé aux touches clavier :
- flèche gauche = 37
- flèche haut = 38
- flèche droite = 39
- flèche bas = 40
Principe du code AS 3 :
- On initialise des variables booléennes à « false » pour chaque touche clavier.
- On définit 3 écouteurs d'événements pour « touche enfoncée (KEY_DOWN) », « touche relachée (KEY_UP) », et l'événement ENTER_FRAME (exécuté dès que le lecteur entre dans une nouvelle image, soit à la cadence de l'animation).
- On positionne à true la variable des touches enfoncées.
- On positionne à false la variable des touches relâchées.
- On teste la valeur de la variable de chaque touche, si elle est égale à true on déplace le sprite.
Code complet ActionScript 3 pour une touche clavier (flèche gauche) :
// initialisation d'une variable variable de touche flèchée
var flecheGauche:Boolean = false;
//pour vérifier : trace(flecheGauche);
// création des écouteurs KEY_DOW, KEY_UP et ENTER_FRAME
stage.addEventListener(KeyboardEvent.KEY_DOWN, toucheEnfonce);
stage.addEventListener(KeyboardEvent.KEY_UP, toucheRelache);
stage.addEventListener(Event.ENTER_FRAME, deplaceSprite);
// positionnement à true de la variable de touche
function toucheEnfonce(evt:KeyboardEvent) {
var flecheGauche:Boolean = false;
//pour vérifier : trace(flecheGauche);
// création des écouteurs KEY_DOW, KEY_UP et ENTER_FRAME
stage.addEventListener(KeyboardEvent.KEY_DOWN, toucheEnfonce);
stage.addEventListener(KeyboardEvent.KEY_UP, toucheRelache);
stage.addEventListener(Event.ENTER_FRAME, deplaceSprite);
// positionnement à true de la variable de touche
function toucheEnfonce(evt:KeyboardEvent) {
if (evt.keyCode == 37) {
flecheGauche = true;
//pour vérifier : trace(flecheGauche);
}
//pour vérifier : trace(flecheGauche);
}
}
// positionnement à false de la variable de touche
function toucheRelache(evt:KeyboardEvent) {
function toucheRelache(evt:KeyboardEvent) {
if (evt.keyCode == 37) {
flecheGauche = false;
//pour vérifier : trace(flecheGauche);
}
//pour vérifier : trace(flecheGauche);
}
}
// déplacement du sprite
function deplaceSprite(evt:Event) {
function deplaceSprite(evt:Event) {
// déclaration de la variable
var vitesse:int = 5;
if (flecheGauche) {
cont1.x -= vitesse;
}
cont1.x -= vitesse;
}
}
Suite de l'exercice :
Compléter le code pour les 3 autres touches.
Il faut :
- créer et initialiser une variable par touche supplémentaire,
- ajouter une condition par touche dans les 3 fonctions déjà existantes (ne pas créer de nouvelle fonction).
Modification des conditions pour ajouter les valeurs de butées : exemple : flèche gauche.
Avec l'opérateur « && » = AND, on va ajouter une condition de valeur de la coordonnées x ou y de l'occurrence « cont1 », et cela pour chaque flèche de déplacement :
if ((flecheGauche)&&(cont1.x > 50) ) {
cont1.x -= vitesse;
}
if ((flecheDroite)&&(cont1.x <500)) {
cont1.x += vitesse;
}
if ((flecheHaut)&&(cont1.y > 50)) {
cont1.y -= vitesse;
}
if ((flecheBas)&&(cont1.y <350)) {
cont1.y += vitesse;
}
Code complet scripte AS3
package {
import flash.display.Sprite;
import flash.display.Shape;
import flash.events.*;
public class pile extends Sprite {
import flash.display.Shape;
import flash.events.*;
public class pile extends Sprite {
public function pile():void {
var cont1:Sprite = new Sprite();
// tracé carré bleu
var carre:Shape = new Shape ();
carre.graphics.beginFill(0x0000FF, .8);
carre.graphics.drawRect(-30,-30,60,60);
// tracé rond bleu clair
var rond:Shape = new Shape ();
rond.graphics.beginFill(0x81C0FE, .8);
rond.graphics.drawCircle(0,0,50);
// placement du rond à l'index 0 du conteneur
cont1.addChildAt(rond, 0);
//placement du carré à l'index 1 du conteneur
cont1.addChildAt(carre, 1);
//placement du conteneur sur la scène
cont1.x = 100;
cont1.y = 100;
addChild(cont1);
cont1.swapChildren(rond,carre);
// initialisation des variables de touches
var flecheGauche:Boolean = false;
var flecheDroite:Boolean = false;
var flecheHaut:Boolean = false;
var flecheBas:Boolean = false;
// ajouts des écouteurs de touches
stage.addEventListener(KeyboardEvent.KEY_DOWN, toucheEnfonce);
stage.addEventListener(KeyboardEvent.KEY_UP, toucheRelache);
// écouteur du rafraichissement de la scène
stage.addEventListener(Event.ENTER_FRAME, deplaceSprite);
// toucheEnfonce positionne à true la variable de la touche
function toucheEnfonce(evt:KeyboardEvent) {
var carre:Shape = new Shape ();
carre.graphics.beginFill(0x0000FF, .8);
carre.graphics.drawRect(-30,-30,60,60);
// tracé rond bleu clair
var rond:Shape = new Shape ();
rond.graphics.beginFill(0x81C0FE, .8);
rond.graphics.drawCircle(0,0,50);
// placement du rond à l'index 0 du conteneur
cont1.addChildAt(rond, 0);
//placement du carré à l'index 1 du conteneur
cont1.addChildAt(carre, 1);
//placement du conteneur sur la scène
cont1.x = 100;
cont1.y = 100;
addChild(cont1);
cont1.swapChildren(rond,carre);
// initialisation des variables de touches
var flecheGauche:Boolean = false;
var flecheDroite:Boolean = false;
var flecheHaut:Boolean = false;
var flecheBas:Boolean = false;
// ajouts des écouteurs de touches
stage.addEventListener(KeyboardEvent.KEY_DOWN, toucheEnfonce);
stage.addEventListener(KeyboardEvent.KEY_UP, toucheRelache);
// écouteur du rafraichissement de la scène
stage.addEventListener(Event.ENTER_FRAME, deplaceSprite);
// toucheEnfonce positionne à true la variable de la touche
function toucheEnfonce(evt:KeyboardEvent) {
if (evt.keyCode == 37) {
flecheGauche = true;
}
if (evt.keyCode == 39) {
flecheDroite = true;
}
if (evt.keyCode == 38) {
flecheHaut = true;
}
if (evt.keyCode == 40) {
flecheBas = true;
}
}
//toucheRelache positionne à false la variable de touche
function toucheRelache(evt:KeyboardEvent) {
function toucheRelache(evt:KeyboardEvent) {
if (evt.keyCode == 37) {
flecheGauche = false;
}
if (evt.keyCode == 39) {
flecheDroite = false;
}
if (evt.keyCode == 38) {
flecheHaut = false;
}
if (evt.keyCode == 40) {
}
}
// déplacement du sprite
function deplaceSprite(evt:Event) {
// déclaration de la variable
var vitesse:int = 5;
//pour vérifier : trace("cont1.x = "+cont1.x);
//pour vérifier : trace("cont1.y = "+cont1.y);
//pour vérifier : trace("cont1.x = "+cont1.x);
//pour vérifier : trace("cont1.y = "+cont1.y);
if ((flecheGauche)&&(cont1.x > 50) ) {
cont1.x -= vitesse;
}
if ((flecheDroite)&&(cont1.x <500)) {
cont1.x += vitesse;
}
if ((flecheHaut)&&(cont1.y > 50)) {
cont1.y -= vitesse;
}
if ((flecheBas)&&(cont1.y <350)) {
cont1.y += vitesse;
}
}
}
}
}
Aucun commentaire:
Enregistrer un commentaire