Deplacement d'un personnage pour un jeu

cs_mystif Messages postés 1 Date d'inscription dimanche 2 juillet 2006 Statut Membre Dernière intervention 28 juillet 2007 - 28 juil. 2007 à 13:05
cs_solf Messages postés 1 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 31 mai 2010 - 31 mai 2010 à 01:52
bonjour,

je suis débutant et essaie de faire un petit jeu.
le probleme est le suivant : je parviens a deplacer mon personnage, avec les touches directionnelles du clavier, mais lorsque je relache la touche, le personnage continue de s'animer (bras et jambes), alors que je voudrais qu'il passe a la position statique.

voici le code

function variables()
{
fee_mc.mouvement=15;
fee_mc.attack = false;
fee_mc.statique= 1;

keydown=false;

}

function Movement()
{

if (Key.isDown (Key.RIGHT) )
{

fee_mc.statique=1;
fee_mc._x+=fee_mc.mouvement;
fee_mc.gotoAndStop("marche-droite");

}

else if (Key.isDown (Key.LEFT) )
{

fee_mc.statique=1;
fee_mc._x-=fee_mc.mouvement;
fee_mc.gotoAndStop("marche-gauche");

}

else if (Key.isDown (Key.DOWN) )
{
fee_mc.statique=1;
fee_mc._y+=fee_mc.mouvement;
fee_mc.gotoAndStop("marche-face");

}

else if (Key.isDown (Key.UP))
{
fee_mc.statique=1;
fee_mc._y-=fee_mc.mouvement;
fee_mc.gotoAndStop("marche-dos");
}

else if (!Key.isDown () )
{
fee_mc.gotoAndStop("statique");

}
};

variables();

onEnterFrame = function()
{

RenderEnemy();

if(!fee_mc.attack && !fee_mc.jump)
{
Movement();
}

if(fee_mc.jump)
Jump();

if(fee_mc.attack)
{
Attack();
}

if (Key.isDown (Key.CONTROL))
{
keydown=true;
}
else keydown=false;

}

merci par avance de votre aide

2 réponses

Darkrats Messages postés 212 Date d'inscription mardi 2 novembre 2004 Statut Membre Dernière intervention 12 mai 2008 1
31 juil. 2007 à 13:37
Salut,

Je n'ai pas testé ton code pour le débugger mais voici un code que j'ai déjà maintes fois utilisés et qui fonctionne très bien (ce code n'est pas de moi à la base, je l'ai trouvé en étudiant des tutoriaux sur la conception de jeu : Tonypa) :
(j'ai supprimé les actions qui ne t'étaient pas utiles)
function detectKeys() {
var keyPressed = false;
if (Key.isDown(Key.RIGHT)) {
keyPressed= true;
} else if (Key.isDown(Key.LEFT)) {
keyPressed= true;
} else if (Key.isDown(Key.UP)) {
keyPressed= true;
} else if (Key.isDown(Key.DOWN)) {
keyPressed=true;
}
if (!keyPressed) {
ob.clip.char.gotoAndStop(1);
} else {
ob.clip.char.play();
}
}

Ce code lancé dans ta boucle du jeu te permet d'annuler l'action dés qu'on relache la touche. (grâce à la variable qui ne prend la valeur "vraie" que lorsqu'une touche est enfoncée), ça permet aussi une plus grande optimisation du code car l'animation du déplacement est géré de manière plus générique.

Pour ton code, comme je l'ai dit, je ne l'ai pas testé, mais le problème doit venir de là :
if (!Key.isDown () ){
    fee_mc.gotoAndStop("statique");
}
Je pense que !Key.isDown() ne sera jamais vrai car il faut passer un paramètre à la propriété : isDown.

Courage

--------- Darkrats ---------
la loi est dure mais c'est la loi
Si je ne réponds pas assez vite, rappelez-moi par MP (assez vite, j'ai dit :P)
0
cs_solf Messages postés 1 Date d'inscription samedi 16 juin 2007 Statut Membre Dernière intervention 31 mai 2010
31 mai 2010 à 01:52
une autre solution; tu utilise un ecouter pour savoir si la touche du clavier à bel et bien été relâchée

var keyListener:Object = new Object();

keyListener.onKeyUp = function() {

if (Key.getCode() == Key.RIGHT) {
trace("vraie"); (ici par exemple tu peux mettre l'action a jouer)
}
Key.addListener(keyListener);

SOLF
0
Rejoignez-nous