Jeu de plateforme AS3 (problème de passage de niveau)

Jeu de plateforme AS3 (problème de passage de niveau) - Flash/ActionScript - Programmation

Marsh Posté le 15-01-2015 à 19:50:08    

Bonjour à tous !
 
Déjà, merci pour l'ensemble des informations qui m'ont régulièrement aidées dans de longue soirées de perdition, dans l'océan du bug !
 
Si je post aujourd'hui, c'est pour un problème (comme le titre l'indique) sur un petit jeu de plateforme AS3, pour lequel je n'ai pas trouvé de solution dans les recherches de topic... En fait, pour résumer, je me suis basée sur un tuto bien sympathique pour découvrir l'as3, après avoir appris uniquement l'as2 cette année, à savoir : http://forums.mediabox.fr/wiki/tut [...] rcade-base
 
J'ai suivi à peu près toute la marche à suivre, sachant que je ne veux pour l'instant pas particulièrement de présence d'ennemis, d'objets et tout le tintouin, je n'ai réinvesti que ce dont j'avais besoin : les tableaux, les variables, le personnage et ses collisions, les déplacements...
Maintenant, j'ai besoin que mon personnage passe à un niveau suivant : malheureusement, je ne comprends pas la marche à suivre, le tuto que j'avais commencé à suivre m'a complètement perdue...
 
Je vous joins mon .fla, j'espère que ce n'est pas trop brouillon... (ne pas se soucier de l'objet animé à l'arrache qui est censé représenter une cascade d'eau, c'était juste un test sans utilité pour le moment) : https://mon-partage.fr/f/95W6QzkJ/
 
 
En gros, ce que j'ai tenté, c'est dans le calque "déplacement" :  
 
À la base, j'ai ça :  
 

Code :
  1. if (map[L][C]>=1) {        // si le bord renconte un bloc solide en latéral
  2.   X = perso.x = C*T+16-T*dx;     // colle le perso au bord du bloc
  3.  }


 
 
 
J'ai voulu rajouter cette ligne pour dire que mon perso, s'il est en contact avec des blocs portant un indice entre 1 et 13, entre en collision // ainsi, mon bloc porte, qui porterait l'indice 14, pourrait entrer en contact direct (ensuite j'ai voulu bricoler à partir de ça, mais je ne connais que la solution avec un hitTest qui conduit à la frame 2 en cas de contact, qui ne fonctionne pas ici...) :
 

Code :
  1. if (map[L][C]>=1) || (map[L][C]<14) {        // si le bord renconte un bloc solide en latéral
  2.   X = perso.x = C*T+16-T*dx;     // colle le perso au bord du bloc
  3.  }


 
 
J'espère pouvoir me débloquer, sinon je repasserais tout en AS2  :sweat:  
Merci !

Reply

Marsh Posté le 15-01-2015 à 19:50:08   

Reply

Marsh Posté le 15-01-2015 à 22:34:50    

C'est quoi ton L/C ? Coordonnées de l'objet sur ta grille ? Et le T ?
 
Idem pour le dx, c'est la vitesse en x ?
 
Tes IDs de map correspondent à quoi ?


---------------
Perhaps you don't deserve to breathe
Reply

Marsh Posté le 16-01-2015 à 17:02:25    

T, c'est l'élément "tuile" que j'utilise dans mon tableau :

Code :
  1. var T:int = 32       // taille d'une tuile (carré)


 
dx, c'est le déplacement de mon perso sur x :

Code :
  1. perso.x += vitesse*dx;         // déplace le perso sur X


 
 
L et C sont les données qui m'ont permis de provoquer les collisions (L pour lignes, C pour colonnes) :

Code :
  1. var L:int;           // ligne (grille) du point bas du perso
  2. var C:int = (X+16*dx)/T;       // côté (grille) du perso concerné par la collision


 
 
Les ids de map, c'est qu'est ce que j'associe au 1 ou au 14 dans mon extrait de code ? si c'est ça, ce sont de simples tuiles colorées de 32*32px, qui de 1 à 13 sont de couleurs différentes ; la tuile suivante (14) est censée être la porte qui permet de passer au niveau suivant !

Reply

Marsh Posté le 18-01-2015 à 17:18:13    

salut
tout d'abord pour aller a l'image 2 il faut quelle existe donc la créer. pour que l'on voit que tu es sur l'image 2 met un texte et il faut retirer grille et perso et

 

removeChild(grille)      // retire le décor
removeChild(perso)       // retire le perso
removeChild(fond)

 

après tu passes au niveau supérieur si ton perso est arrivé au bord droit de ta scene donc si perso.x est == 624

 

function deplacement(dx:int):void{
 
 perso.x += vitesse*dx;         // déplace le perso sur X
 
 var Y:Number = perso.y        // raccourci de programmation pour perso.y
 var X:Number = perso.x        // raccourci de programmation pour perso.x
 var L:int;           // ligne (grille) du point bas du perso
 var C:int = (X+16*dx)/T;       // côté (grille) du perso concerné par la collision
     // vérifies toutes lignes (grille) sur lesquelles se tient le perso
//////////////////////////////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////
///////////////////////////////////
  if (perso.x == 624 ) {      
   gotoAndStop(2);        // envoyer au niveau suivant (lvl 2)
  }
////////////////////////////////////////////////////////////////
////////////////////////////////////////////////
/////////////////////////////////
 // latéral      
 for (L=(Y-16)/T; L<Y/T+1; L++) {     // vérifies toutes lignes (grille) sur lesquelles se tient le perso
  if (map[L][C]>=1) {        // code OK de base : si le bord renconte un bloc solide en latéral
  //if (map[L][C]<9) {        // TEST POUR LA SORTIE : désactiver la collision avec la tuile 9 pour laisser le perso toucher la tuile déclanchant la sortie
   X = perso.x = C*T+16-T*dx;     // colle le perso au bord du bloc
  }
 }

 

je mets le fla modifier ici                            http://www.citroen-france-tours-no [...] 0H30-1.fla

 

a savoir j'ai un peu de mal avec ta façon de disposer ton code.

 

@+ gustave02


Message édité par gustave002 le 18-01-2015 à 17:21:04
Reply

Marsh Posté le 18-01-2015 à 18:31:01    

... Wouahou, en fait, c'était pas si sorcier... J'en avais fait une montagne infranchissable :pt1cable:  
 
En tout cas un énorme merci, et en plus de corriger directement mon fichier, c'est ultra cool !
 
Et qu'est-ce qui est étrange dans mon code, par curiosité ? Je sais que c'est un peu du bricolage, je suis étudiante en design donc même si on apprend un peu de code dans ce cadre, c'est pas forcément évident de comprendre toute la logique donc on agence ça comme on le sent :-p
 
Merci encore, je vais pouvoir me remettre dessus l'esprit tranquille !

Reply

Marsh Posté le 18-01-2015 à 18:40:31    

tu met du code partout.
alors que moi j'essayerais d'avoir un calque  action. calque qui centralise tout le code.
je pense plus simple a lire.
 
quand tu mets perso pour personnage OK cool simple on voit de quoi ça parle.
 
mais tu X:number si je me souviens dangereux peut amener a des confusion avec x pas cool dans la compréhension.
 
@+ Gustave02

Reply

Marsh Posté le 18-01-2015 à 19:13:11    

Ok j'essaierais de remédier à tout ça, merci encore :-)

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed