begin process at 2012 05 27 08:04:35
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Flash / Flash MX

 > 

Divers

 > 

Aide et documentation

 > 

Problème avec isDown - Convertion AS2 -> AS3


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Problème avec isDown - Convertion AS2 -> AS3

samedi 23 janvier 2010 à 15:37:37 | Problème avec isDown - Convertion AS2 -> AS3

Parojo

Bonjour à tous,

Je suis sur le point d'apprendre à coder des jeux en AS3. Dans le cadre de cette instruction, je dois convertir un jeu (style Guitar Hero, en beaucoup plus simple) qui a été créé en ActionScript 2, de manière à ce qu'il soit entièrement en ActionScript 3.

Voici le code du jeu en AS2 :

// randRange(40, -200); renvoie un nombre entier aléatoire compris entre 40 et -200
function randRange(min:Number, max:Number):Number {
var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;
return randomNum;
}
relache_haut = 0;
relache_bas = 0;
relache_gauche = 0;
relache_droite = 0;
decompteur_max = 9;
fleche_gauche._y = fleche_bas._y = fleche_haut._y = fleche_droite._y = 290;
fleche_gauche._x = 60;
fleche_bas._x = 120;
fleche_haut._x = 180;
fleche_droite._x = 240;
// On crée les flèches avec une coordonnées _y entre 40 et -200, soit au dessus de l'aire de jeu
fleche_gauche_move._y = randRange(40, -200);
fleche_bas_move._y = randRange(40, -200);
fleche_haut_move._y = randRange(40, -200);
fleche_droite_move._y = randRange(40, -200);
// on définit une vitesse de descente
vitesse = 3;
// on aligne les flèches qui descendent avec les flèches fixes en faisant correspondre les propriétés _x
fleche_gauche_move._x = fleche_gauche._x;
fleche_bas_move._x = fleche_bas._x;
fleche_haut_move._x = fleche_haut._x;
fleche_droite_move._x = fleche_droite._x;
score_total = 0;
grosse_marge = 30;
elimination = 0;
tape_haut = 0;
tape_bas = 0;
tape_gauche = 0;
tape_droite = 0;
onEnterFrame = function () {
/////////////////////////////////////
// ELMINATION
/////////////////////////////////////
if (elimination > 0) {
etoile_4._visible = false;
if (elimination > 1) {
etoile_3._visible = false;
if (elimination > 2) {
etoile_2._visible = false;
}
}
}
if (elimination > 3) {
trace("Fin du jeu : joueur éliminé");
gotoAndStop(2);
etoile_1._visible = false;
elimination = -100;
}
if (relache_haut > 0) {
relache_haut -= 1;
}
if (Key.isDown(Key.UP) && relache_haut == 0 && elimination >= 0) {
distance_haut = (fleche_haut_move._y) - (fleche_haut._y);
relache_haut = decompteur_max;
if (Math.abs(distance_haut) < grosse_marge) {
score_total += 100 * Math.round(grosse_marge - (Math.abs(fleche_haut_move._y - fleche_haut._y)));
} else if (elimination < 4) {
elimination += 1;
}
tape_haut = 1;
}
// Si la fleche a atteint le bas de l'ecran
// et si aucun appui sur la touche
if (fleche_haut_move._y > 350) {
fleche_haut_move._y = randRange(40, -200);
// Si pas d'appui dans la zone OK
if (tape_haut != 1) {
elimination += 1;
tape_haut = 0;
}
tape_haut = 0;
}
if (relache_droite > 0) {
relache_droite -= 1;
}
if (Key.isDown(Key.LEFT) && relache_gauche == 0 && elimination >= 0) {
distance_gauche = (fleche_gauche_move._y) - (fleche_gauche._y);
relache_gauche = decompteur_max;
if (Math.abs(distance_gauche) < grosse_marge) {
score_total += 100 * Math.round(grosse_marge - (Math.abs(fleche_gauche_move._y - fleche_gauche._y)));
} else if (elimination < 4) {
elimination += 1;
}
tape_gauche = 1;
}
// Si la fleche a atteint le bas de l'ecran
// et si aucun appui sur la touche
if (fleche_gauche_move._y > 350) {
fleche_gauche_move._y = randRange(40, -200);
// Si pas d'appui dans la zone OK
if (tape_gauche != 1) {
elimination += 1;
tape_gauche = 0;
}
tape_gauche = 0;
}
if (relache_gauche > 0) {
relache_gauche -= 1;
}
if (Key.isDown(Key.RIGHT) && relache_droite == 0 && elimination >= 0) {
distance_droite = (fleche_droite_move._y) - (fleche_droite._y);
relache_droite = decompteur_max;
if (Math.abs(distance_droite) < grosse_marge) {
score_total += 100 * Math.round(grosse_marge - (Math.abs(fleche_droite_move._y - fleche_droite._y)));
} else if (elimination < 4) {
elimination += 1;
}
tape_droite = 1;
}
// Si la fleche a atteint le bas de l'ecran
// et si aucun appui sur la touche
if (fleche_droite_move._y > 350) {
fleche_droite_move._y = randRange(40, -200);
// Si pas d'appui dans la zone OK
if (tape_droite != 1) {
elimination += 1;
tape_droite = 0;
}
tape_droite = 0;
}
if (relache_bas > 0) {
relache_bas -= 1;
}
if (Key.isDown(Key.DOWN) && relache_bas == 0 && elimination >= 0) {
distance_bas = (fleche_bas_move._y) - (fleche_bas._y);
relache_bas = decompteur_max;
if (Math.abs(distance_bas) < grosse_marge) {
score_total += 100 * Math.round(grosse_marge - (Math.abs(fleche_bas_move._y - fleche_bas._y)));
} else if (elimination < 4) {
elimination += 1;
}
tape_bas = 1;
}
// Si la fleche a atteint le bas de l'ecran
// et si aucun appui sur la touche
if (fleche_bas_move._y > 350) {
fleche_bas_move._y = randRange(40, -200);
// Si pas d'appui dans la zone OK
if (tape_bas != 1) {
elimination += 1;
tape_bas = 0;
}
tape_bas = 0;
}
// on fait bouger les flèches en incrémentant la propriété _y de chaque instance
fleche_haut_move._y += vitesse;
fleche_bas_move._y += vitesse;
fleche_droite_move._y += vitesse;
fleche_gauche_move._y += vitesse;
};



Manuellement, j'ai modifié ce que je pensais être à modifier, de manière à ce que le nouveau code soit celui-ci :

// randRange(40, -200); renvoie un nombre entier aléatoire compris entre 40 et -200
function randRange(min:Number, max:Number):Number {
var randomNum:Number = Math.floor(Math.random() * (max - min + 1)) + min;
return randomNum;
}
var relache_haut = 0;
var relache_bas = 0;
var relache_gauche = 0;
var relache_droite = 0;
var decompteur_max = 9;
var distance_haut;
var distance_gauche;
var distance_droite;
var distance_bas;
fleche_gauche.y = fleche_bas.y = fleche_haut.y = fleche_droite.y = 290;
fleche_gauche.x = 60;
fleche_bas.x = 120;
fleche_haut.x = 180;
fleche_droite.x = 240;
// On crée les flèches avec une coordonnées y entre 40 et -200, soit au dessus de l'aire de jeu
fleche_gauche_move.y = randRange(40, -200);
fleche_bas_move.y = randRange(40, -200);
fleche_haut_move.y = randRange(40, -200);
fleche_droite_move.y = randRange(40, -200);
// on définit une vitesse de descente
var vitesse = 6;
// on aligne les flèches qui descendent avec les flèches fixes en faisant correspondre les propriétés x
fleche_gauche_move.x = fleche_gauche.x;
fleche_bas_move.x = fleche_bas.x;
fleche_haut_move.x = fleche_haut.x;
fleche_droite_move.x = fleche_droite.x;
var score_total = 0;
var grosse_marge = 30;
var elimination = 0;
var tape_haut = 0;
var tape_bas = 0;
var tape_gauche = 0;
var tape_droite = 0;
addEventListener(Event.ENTER_FRAME,Elimination);
function Elimination(event:Event):void {
/////////////////////////////////////
// ELMINATION
/////////////////////////////////////
if (elimination > 0) {
etoile_4.visible = false;
if (elimination > 1) {
etoile_3.visible = false;
if (elimination > 2) {
etoile_2.visible = false;
}
}
}
if (elimination > 3) {
trace("Fin du jeu : joueur éliminé");
gotoAndStop(2);
etoile_1.visible = false;
elimination = -100;
}
if (relache_haut > 0) {
relache_haut -= 1;
}
if (Keyboard.isDown(Keyboard.UP) && relache_haut == 0 && elimination >= 0) {
distance_haut = (fleche_haut_move.y) - (fleche_haut.y);
relache_haut = decompteur_max;
if (Math.abs(distance_haut) < grosse_marge) {
score_total += 100 * Math.round(grosse_marge - (Math.abs(fleche_haut_move.y - fleche_haut.y)));
} else if (elimination < 4) {
elimination += 1;
}
tape_haut = 1;
}
// Si la fleche a atteint le bas de l'ecran
// et si aucun appui sur la touche
if (fleche_haut_move.y > 350) {
fleche_haut_move.y = randRange(40, -200);
// Si pas d'appui dans la zone OK
if (tape_haut != 1) {
elimination += 1;
tape_haut = 0;
}
tape_haut = 0;
}
if (relache_droite > 0) {
relache_droite -= 1;
}
if (Keyboard.isDown(Keyboard.LEFT) && relache_gauche == 0 && elimination >= 0) {
distance_gauche = (fleche_gauche_move.y) - (fleche_gauche.y);
relache_gauche = decompteur_max;
if (Math.abs(distance_gauche) < grosse_marge) {
score_total += 100 * Math.round(grosse_marge - (Math.abs(fleche_gauche_move.y - fleche_gauche.y)));
} else if (elimination < 4) {
elimination += 1;
}
tape_gauche = 1;
}
// Si la fleche a atteint le bas de l'ecran
// et si aucun appui sur la touche
if (fleche_gauche_move.y > 350) {
fleche_gauche_move.y = randRange(40, -200);
// Si pas d'appui dans la zone OK
if (tape_gauche != 1) {
elimination += 1;
tape_gauche = 0;
}
tape_gauche = 0;
}
if (relache_gauche > 0) {
relache_gauche -= 1;
}
if (Keyboard.isDown(Keyboard.RIGHT) && relache_droite == 0 && elimination >= 0) {
distance_droite = (fleche_droite_move.y) - (fleche_droite.y);
relache_droite = decompteur_max;
if (Math.abs(distance_droite) < grosse_marge) {
score_total += 100 * Math.round(grosse_marge - (Math.abs(fleche_droite_move.y - fleche_droite.y)));
} else if (elimination < 4) {
elimination += 1;
}
tape_droite = 1;
}
// Si la fleche a atteint le bas de l'ecran
// et si aucun appui sur la touche
if (fleche_droite_move.y > 350) {
fleche_droite_move.y = randRange(40, -200);
// Si pas d'appui dans la zone OK
if (tape_droite != 1) {
elimination += 1;
tape_droite = 0;
}
tape_droite = 0;
}
if (relache_bas > 0) {
relache_bas -= 1;
}
if (Keyboard.isDown(Keyboard.DOWN) && relache_bas == 0 && elimination >= 0) {
distance_bas = (fleche_bas_move.y) - (fleche_bas.y);
relache_bas = decompteur_max;
if (Math.abs(distance_bas) < grosse_marge) {
score_total += 100 * Math.round(grosse_marge - (Math.abs(fleche_bas_move.y - fleche_bas.y)));
} else if (elimination < 4) {
elimination += 1;
}
tape_bas = 1;
}
// Si la fleche a atteint le bas de l'ecran
// et si aucun appui sur la touche
if (fleche_bas_move.y > 350) {
fleche_bas_move.y = randRange(40, -200);
// Si pas d'appui dans la zone OK
if (tape_bas != 1) {
elimination += 1;
tape_bas = 0;
}
tape_bas = 0;
}
// on fait bouger les flèches en incrémentant la propriété y de chaque instance
fleche_haut_move.y += vitesse;
fleche_bas_move.y += vitesse;
fleche_droite_move.y += vitesse;
fleche_gauche_move.y += vitesse;
};



Hélas, un problème persiste : je n'arrive pas à utiliser la version AS3 des isDown. J'ai pourtant essayé les différentes explications du web à ce sujet (booléens etc.) et même des packages permettant de les utiliser, mais rien n'y fait.

Pouvez-vous m'éclairer sur la façon de s'y prendre ?
N'hésitez pas non plus à commenter toute autre modification que j'aie effectuée...

Merci d'avance pour toute réponse !
samedi 23 janvier 2010 à 16:38:35 | Re : Problème avec isDown - Convertion AS2 -> AS3

mzelleflash

Salut!
Je n'ai pas lu tout ton code en détail (il faut dire qu'il y en a une bonne tartine!), mais tu devrais essayer de chercher du côté des écouteurs d'événements, du genre:

Code ActionScript :
stage.addEventListener(KeyboardEvent.KEY_DOWN, mafonction);

cela détecte qu'une touche du clavier est pressée.

Ensuite, si par exemple tu veux une certaine action quand c'est la fleche droite qui est appuyée, tu fais quelque chose qui ressemble à ça:

Code ActionScript :
function mafonction (evt:KeyboardEvent){
        if(Keyboard.RIGHT){
            ton action;
        }
}


Voilà, j'espère avoir pu t'aider

M'zelle Flash.
samedi 23 janvier 2010 à 18:15:58 | Re : Problème avec isDown - Convertion AS2 -> AS3

Parojo

Merci pour ton aide. En fait, comme il s'agit d'un genre de Guitar Hero, la détection des touches up, down, left and right devient très rapidement vrai ou faux. Si j'ajoute :

var Touche_Haut = 0;

function DetectionHaut (evt:KeyboardEvent){
if(Keyboard.UP){
Touche_Haut = 1;
}
}



Je suppose que Touche_Haut vaudra 1 pour toujours à partir du moment où l'utilisateur appuie sur la touche up au moins une fois ?

samedi 23 janvier 2010 à 19:48:01 | Re : Problème avec isDown - Convertion AS2 -> AS3

Parojo

Parfait, je viens finalement de répondre à ma propre question puisqu'il suffisait de remplacer les "Keyboard.isDown(Keyboard.RIGHT)" par "Keyboard.DOWN".

Merci beaucoup Mzelle Flash !

C'était moins compliqué que ce que j'avais lu partout mais sans ton aide je ne serais arrivé à rien :) .
samedi 23 janvier 2010 à 19:57:20 | Re : Problème avec isDown - Convertion AS2 -> AS3

mzelleflash

Tu peux aussi mettre un écouteur d'événement lorsque la touche est relâchée, pour mettre Touche_Haut à 0.

Code ActionScript :
stage.addEventListener(KeyboardEvent.KEY_UP, mafonction2);

function mafonction2(evt:KeyboardEvent){
         if(Keyboard.UP){
            Touche_Haut=0;
         }


Je te donne un petit exemple que je viens de coder et qui marche très bien pour que tu visualises mieux:
Code ActionScript :
var txt:TextField= new TextField();
txt.text="AA";
txt.x=stage.stageWidth/2;
txt.y=stage.stageHeight/2;
addChild(txt);

stage.addEventListener(KeyboardEvent.KEY_DOWN, mafonction);
function mafonction (evt:KeyboardEvent){
        if(Keyboard.RIGHT){
            txt.text="BB";
        }
stage.removeEventListener(KeyboardEvent.KEY_UP, mafonction);
stage.addEventListener(KeyboardEvent.KEY_UP, mafonction2);
}


function mafonction2 (evt:KeyboardEvent){
        if(Keyboard.UP){
            txt.text="AA";
        }
stage.removeEventListener(KeyboardEvent.KEY_UP, mafonction2);
stage.addEventListener(KeyboardEvent.KEY_UP, mafonction);
}


Quand tu maintiens enfoncée la flèche directionnelle droite sur ton clavier, le texte affiché est BB, et si tu relâches la flèche, il revient à AA.

Voilà ^^
Bonne soirée,

M'zelle Flash.
samedi 23 janvier 2010 à 20:17:28 | Re : Problème avec isDown - Convertion AS2 -> AS3

Parojo

Un autre problème : Les messages suivant empêchent mon flash de s'exécuter correctement, mais je ne comprends pas tout à fait la nature du problème :

WARNING: Text field variable names are not supported in ActionScript 3.0. The variable 'score_total' used for an unnamed text field will not be exported.
WARNING: Text field variable names are not supported in ActionScript 3.0. The variable 'score_total' used for an unnamed text field will not be exported.
WARNING: Actions on button or MovieClip instances are not supported in ActionScript 3.0. All scripts on object instances will be ignored.
Fin du jeu : joueur éliminé
samedi 23 janvier 2010 à 20:39:53 | Re : Problème avec isDown - Convertion AS2 -> AS3

mzelleflash

Tu as un texte dont le nom de variable est "score_total", or l'AS3 ne gère plus cela.
Et apparemment tu as aussi un clip ou un bouton sur lequel tu as mis une "Action-Clip" ou une "Action-Bouton", ce qui n'existe plus non plus en AS3. Il faut tout mettre en "Action-Image".

Bonne chance avec ton adaptation

M'zelle Flash.
dimanche 24 janvier 2010 à 00:16:46 | Re : Problème avec isDown - Convertion AS2 -> AS3

Parojo

Merci beaucoup pour ton aide, ça m'aide vraiment à bien comprendre les différences et les types d'adaptation entre AS2 et AS3 !

J'avoue que j'ai du mal à comprendre pourquoi l'AS3 ne gère plus le nom de la variable, et surtout comment il faut adapter cela... O_o

Pour les Action Button, j'étais certain d'en avoir essayé en AS3 :s . Quelle est la différence ? Merci d'avance, encore, pour vos (et surtout tes, Mzelle Flash) réponses !!
dimanche 24 janvier 2010 à 13:42:50 | Re : Problème avec isDown - Convertion AS2 -> AS3

Parojo

J'ai posté la suite de ma conversion sur un autre sujet de manière à ce que le titre soit plus précis : ici.


Cette discussion est classée dans : gauche, droite, haut, bas, fleche


Répondre à ce message

Sujets en rapport avec ce message

Photorama !!! [ par davggy ] je travaille sous FLASH5.0 sur un photoramaJe souhaite "assembler de nombreuses photos en scrolling" mais l'espace de travail est "approximativement" scrollin d'image [ par aannick ] Bonjour je ne trouve aucun tutorialsur aucun site d'un scrolling d'image à la place du texte(une flèche pour aller vers le haut, une vers le bas, qui A TOM (et aux autres aussi) [ par makikofsky ] SalutJ'ai downloadé le moteur de jeux 2d, j'ai commencé à modifier le fla pour en faire une petite navigation interactive du genre le perso est ici ça texte qui defile de droite à gauche [ par poupouille7549 ] Bonjour, je suis debutant sous flash et nul je l'avoue,je voudrais savoir comment faire pour qu'un texte defile de droite à guche en boucle, merci d'a lire une animation a l'envers [ par vynill ] helloJ'aimerai faire un diaporama de photos, donc sur ma scene, j'ai une animation qui défile de droite a gauche quand j'appuie sur le bouton droite ( Besoin d'aide pour boutons scroll [ par evashes ] Bonjour ,Je suis nouvelle dans ce forum et débute Action script sur FlashMX et depuis quelques jours je sèche sur un truc tout bête.Je voudrais faire scrolling: le texte ne défile pas [ par jessilou ] Bonjour j'ai créé un fichier scrollbar, dans un fichier p3.swf Dans ce scrollbar j'ai un texte dynamique Dans un movie clip barre, j'ai des boutons de galerie photo [ par melkaaz ] salut à tous!!!=)=)Voila!!,...j aimerais faire une galerie photo qui defile de gauche a droite,....avec les ptit boutons en bas qui ne sont pas sur la defilement clip gauche droite avec acceleration [ par rabast ] bonjour,je dois faire defiler un bandeau de foto de gauche a droite suivant la position de la souris. tout cela en s'accelerant plus on va a droite ou défilement vignettes [ par auroremo ] bonjour,je construis une galerie photos. j'ai fait une bannière de vignettes avec des liens sur les vignettes vers la frame du haut. ça , ça marche ,


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,264 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales