Home      Downloads             Documentation      FAQ     

Documentation>Tutoriel > Etape 7

A l'attaque!!

Essayer de viser un hélicoptère est simple. Mais qu'en est-il d'une dizaine d'hélicoptères? Vous allez maintenant découvrir comment ETP Studio permet de gérer plusieurs sprites qui ont le même comportement (ici ce sont les hélicoptères adverses). Vous verrez égalament que malgré la présence d'un nombre important de sprite, les performances ne sont pas près de baisser.

Ouvrez le map Map1 et glissez une dizaine de sprite helicopter sur le map. Ajoutez-en de manière à remplir le tableau en bas à droite jusqu'à l'index 13.

Si vous compilez déjà le programme, vous remarquerez que les hélicoptères que nous venons d'ajouter sont affichés mais qu'ils ne bougent pas.

Nous avons déjà programmé le comportement d'un adversaire, nous n'allons pas faire des copier-coller en mettant helicopter4 au lieu de helicopter3 et ainsi de suite.. En réalité, les routines d'affichage automatique qui vous épargnent d'un travail fastidieux et qui font de ETP un outil de programmation facile permettent également d'accéder aux sprites du map comme s'il s'agissait d'un tableau. Le nom de ce tableau est MapSprites [ ..] Vous n'avez pas à savoir le fonctionnement des tableaux pour continuer ce tutoriel mais si vous voulez plus d'informations sur les tableaux en ETP-Basic vous pouvez consulter la documentation sur le site officiel. Vous avez juste à savoir qu'au lieu d'utiliser le nom d'un sprite du map, on peut remplacer son nom par MapSprites[index]. Par exemple, au lieu d'écrire

fire2.visible = 0

nous aurions pu écrire

MapSprites[2].visible=0

car dans le map, fire2 a comme index 2:

Quel est l'interet? Entre les crochets, au lieu de mettre un nombre constant comme 2, nous pouvons mettre une variable i et ainsi parcourir l'ensemble des sprites du map. Déclarons la variable i en début de procédure:

Local i as Integer

Avec une boucle For.. nous allons gérer tous les sprites correspondants aux hélicoptères adverses. On remplace tous les helicopter3 par MapSprites[i] et on met le tout dans une boucle For.

For i=2 To 12
If fire2.visible = 1 Then
fire2.x = fire2.x + FireVel
If fire2.x > cam.x + 160 Or fire2.x +16 < cam.x Then
fire2.visible = 0
EndIf

If AbsInt(fire2.x - MapSprites[i].x) < 16 And AbsInt(fire2.y - MapSprites[i].y)<8 Then
MapSprites[i].action = 3
fire2.visible = 0
EndIf
EndIf

If MapSprites[i].action <> 3 Then
If MapSprites[i].x < HToGoX Then
' déplace toi vers la droite
MapSprites[i].x = MapSprites[i].x + 1
MapSprites[i].action = 1
ElseIf MapSprites[i].x > HToGoX Then
' déplace toi vers la gauche
MapSprites[i].x = MapSprites[i].x - 1
MapSprites[i].action = 2
ElseIf MapSprites[i].y < HToGoY Then
MapSprites[i].y = MapSprites[i].y + 1
ElseIf MapSprites[i].y > HToGoY Then
MapSprites[i].y = MapSprites[i].y - 1
Else
'on est arrivé à destination
HToGoX = 10+Random(160)
HToGoY = 10+Random(90)
EndIf
EndIf
Next

Regardons le résultat:

Tous les hélicoptères se déplacent mais ils semblent tous vouloir aller au même endroit.

Ceci vient du fait que nous n'avons qu'un seul couple de variable auxiliaire (HToGoX et HToGoY) pour retenir la position aléatoire intermédiaire. Tous les sprites utilisent ces deux là et par conséquent "veulent" se déplacer au même endroit. Pour les variables HToGoX et HToGoY, il faut également créer un tableau. Changeons leur déclarations comme suit:

Local HToGoX[13] as Integer
Local HToGoY[13] as Integer

et leurs initialisations:

For i=2 To 12
HToGoX[i] = 125
HToGoY[i] = 30
Next

Remarque: avec cette initialisation, tous les sprites iront au même endroit au départ, mais puisqu'ils auront une valeur aléatoire différente une fois arrivé à destination, ceci n'est pas très grave.

Il faut également changer tous les HToGoX en HToGoX[i], de même pour les HToGoY.

Tous les hélicoptères adverses se déplacent aléatoirement et de façon indépendant les uns des autres.

Télécharger le projet helico_step7

 

 

 

   

 

 

     
    About ETP Contact Us