Accueil > Forum > > > > Problème avec isDown - Convertion AS2 -> AS3
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 ,
Livres en rapport
|
Derniers Blogs
IMAGINE CUP 2012, MAKE A SIGN EN FINALEIMAGINE CUP 2012, MAKE A SIGN EN FINALE par junarnoalg
Voilà qui est fait, la nouvelle est officielle ! L'équipe belge "Make a Sign" va au pays des kangourous défendre son projet dans la catégorie Software Design. http://www.imaginecup.com/CompetitionsContent/Competition/WorldwideFinalists.aspx V...
Cliquez pour lire la suite de l'article par junarnoalg KINECT 1.5 IS OUT !KINECT 1.5 IS OUT ! par Vko
La version 1.5 du Kinect For Microsoft vient tout juste de sortir ! Plein de nouveautés: Tracking de squelette en Near Mode Détection en position assise Détection faciale avec un SDK dédié Documentation et des guideline (enfin) Un out...
Cliquez pour lire la suite de l'article par Vko LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) LES ACTUALITéS DE LA SEMAINE SUR C2I.FR (14 MAI - 20 MAI) par richardc
Mise à jour des Web API du 14 Mai
Réservez dès maintenant votre journée du 20 juin pour le Windows Azure Dev Camp 2012 à Paris
Mise à jour de Team Foundation Service
MechCommander 2 sur Windows 8
Entity Framework 5 Release Candidate e...
Cliquez pour lire la suite de l'article par richardc REACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITERREACTIVE EXTENSIONS : CONSOMMER DES SERVICES AVEC RX PARTIE 3, LES PIèGES à éVITER par Groc
Une mauvaise utilisation de rx lors de l'écriture d'une couche d'accès à des services peut conduire à des cas embarassants avec des erreurs mal gérées, des appels qui ne partent lorsqu'ils le devraient, et même des résultats incorrects . le tout nuis...
Cliquez pour lire la suite de l'article par Groc SHAREPOINT BLOG SITE, PROBLèME D'ARCHIVESSHAREPOINT BLOG SITE, PROBLèME D'ARCHIVES par junarnoalg
Dernièrement, nous avons migré le site
myTIC
vers un nouveau serveur SharePoint 2010. Dans les contenus que nous vouloins récupérer, nous avions un certain nombre de blogs.
Nous avons utilisé les commandes Power...
Cliquez pour lire la suite de l'article par junarnoalg
Logiciels
sDEVIS-FACTURES vlPRO (8.1.0.3)SDEVIS-FACTURES VLPRO (8.1.0.3)sDEVIS-FACTURES vlPRO a été mis au point pour les particuliers, créateurs, entrepreneurs, artisa... Cliquez pour télécharger sDEVIS-FACTURES vlPRO 974 Application Server (12.2.4.6)974 APPLICATION SERVER (12.2.4.6)Développez de puissantes applications dans un environnement de 'cloud computing', clusterisé, séc... Cliquez pour télécharger 974 Application Server vPicture (1.4.2.1)VPICTURE (1.4.2.1)Avec vPicture, hébergez vos images facilement et rapidement.
vPicture est un utilitaire simple, ... Cliquez pour télécharger vPicture Easy-Planning (2.2.1.6)EASY-PLANNING (2.2.1.6)Easy-Planning permet de créer des plannings sous la représentation de diagrammes et est adapté au... Cliquez pour télécharger Easy-Planning COM-BACKUP (2.0)COM-BACKUP (2.0)
COM-BACKUP est un logiciel de sauvegarde qui permet de planifier les sauvegardes de vos dossiers ...
Cliquez pour télécharger COM-BACKUP
|