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:
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
|