Pour déplacer un sprite il suffit de modifier la valeur de ses coordonées, c’est à dire la valeur de son X et la valeur de son Y.
Dans notre exemple précédent, notre héros a les coordonnées suivantes :
X= 399 , Y=500
Notre ennemi a les coordonnées suivantes :
X= 500 , Y = 500
Étape 1/
Dorénavant, nous placerons ces valeurs dans des variables.
Pourquoi encore des variables ? Car notre ennemi et notre héros doivent pouvoir se déplacer, leur position à l’écran ne sera jamais la même, elle va toujours changer.
Changer veut dire varier donc on utilise des variables.
Ce qui donne, par exemple :
DIM xHeros AS INTEGER
DIM yHeros AS INTEGER
DIM xMonstre AS INTEGER
DIM yMonstre AS INTEGER
On attribue leurs valeurs, par exemple :
xHeros = 99
yHeros = 500
xMonstre = 500
yMonstre = 500
Pour placer les sprites à l’écran, cela donne :
SPRITEPUT xHeros, yHeros, heros
SPRITEPUT xMonstre, yMonstre, monstre
Voici le programme complet :
‘$INCLUDE:’Ressources\SpriteLib\spritetop.bi’
DIM plancheHeros AS INTEGER
DIM heros AS INTEGER
DIM xHeros AS INTEGER
DIM yHeros AS INTEGER
DIM plancheMonstre AS INTEGER
DIM monstre AS INTEGER
DIM xMonstre AS INTEGER
DIM yMonstre AS INTEGER
DIM arPlan AS INTEGER
SCREEN _NEWIMAGE(800, 600, 32)
CLS
xHeros = 99
yHeros = 500
xMonstre = 500
yMonstre = 500
arPlan = _LOADIMAGE(« Ressources\Graphiques\chateau.jpg », 32)
plancheHeros = SPRITESHEETLOAD(« Ressources\Graphiques\heros1.png », 32, 32, AUTOTRANSPARENCY)
heros = SPRITENEW(plancheHeros, 1, SAVE)
plancheMonstre = SPRITESHEETLOAD(« Ressources\Graphiques\monstre.png », 64, 64, AUTOTRANSPARENCY)
monstre = SPRITENEW(plancheMonstre, 1, SAVE)
_PUTIMAGE (0, 0), arPlan
SPRITEPUT xHeros, yHeros, heros
SPRITEPUT xMonstre, yMonstre, monstre
‘$INCLUDE:’Ressources\SpriteLib\sprite.bi’
Maintenant, nous allons faire bouger le sprite ennemi. Il se déplacera de haut en bas pour nous empêcher de passer.
Étape 2/
Pour que l’ennemi se déplace, nous allons devoir utiliser une boucle.
Une boucle permet de répéter des lignes de codes un certain nombre de fois, ou même indéfiniment, c’est nous qui choisissons.
Ici, la boucle tournera et répétera donc le code qu’elle contient, indéfiniment.
Pour cela, nous utiliserons :
DO
[code à exécuter ]
LOOP
Il existe d’autres façons de faire des boucles que nous verrons plus tard.
Etape 3/
Nous allons faire descendre notre ennemi. Pour cela, nous allons modifier la valeur de son Y à chaque boucle. Pour qu’il descende, nous allons devoir rajouter 1 à la variable yEnnemi, à chaque boucle.
Voilà comment il faut faire :
yMonstre=yMonstre+1
Pour vérifier que la valeur de Y de notre ennemi change à chaque boucle, nous allons dire au programme de l’afficher en haut à gauche:
LOCATE 1,1:PRINT yMonstre
Avec cette ligne, nous affichons la valeur contenue dans la variable yEnnemi.
Voici une dernière fois, le code complet jusqu’à présent :
Pour la suite, comme nous ne modifierons que l’intérieur de la boucle, je ne placerai que le code contenu dans la boucle.
‘$INCLUDE:’Ressources\SpriteLib\spritetop.bi’
DIM plancheHeros AS INTEGER
DIM heros AS INTEGER
DIM xHeros AS INTEGER
DIM yHeros AS INTEGER
DIM plancheMonstre AS INTEGER
DIM monstre AS INTEGER
DIM xMonstre AS INTEGER
DIM yMonstre AS INTEGER
DIM arPlan AS INTEGER
SCREEN _NEWIMAGE(800, 600, 32)
CLS
xHeros = 99
yHeros = 500
xMonstre = 500
yMonstre = 500
arPlan = _LOADIMAGE(« Ressources\Graphiques\chateau.jpg », 32)
plancheHeros = SPRITESHEETLOAD(« Ressources\Graphiques\heros1.png », 32, 32, AUTOTRANSPARENCY)
heros = SPRITENEW(plancheHeros, 1, SAVE)
plancheMonstre = SPRITESHEETLOAD(« Ressources\Graphiques\monstre.png », 64, 64, AUTOTRANSPARENCY)
monstre = SPRITENEW(plancheMonstre, 1, SAVE)
_PUTIMAGE (0, 0), arPlan
SPRITEPUT xHeros, yHeros, heros
SPRITEPUT xMonstre, yMonstre, monstre
DO
yMonstre = yMonstre + 1
LOCATE 1,1: PRINT yMonstre
LOOP
‘$INCLUDE:’Ressources\SpriteLib\sprite.bi’
Si on vérifie le code avec F5, on peut constater que le sprite ne bouge pas. Pourtant, sa variable change comme prévu, très rapidement, mais elle change.
Comment faire ?
A chaque fois que 1 a été rajouter à yEnnemi, il faut dire au programme d’afficher la nouvelle position du sprite, avec une ligne que nous connaissons déjà :
SPRITEPUT xMonstre, yMonstre, monstre
Ce qui donne, à l’intérieur de la boucle :
DO
yMonstre = yMonstre+ 1
LOCATE 1, 1: PRINT yMonstre
SPRITEPUT xMonstre, yMonstre, monstre
LOOP
Si on appuie sur F5, le monstre n’apparait plus à l’écran et nous pouvons le voir très furtivement à l’écran à certain moment. C’est normal car comme constaté ci-dessus, la valeur de Y change rapidement et donc l’ennemi se déplace très rapidement. Tellement rapidement, que nous ne le voyons pas bouger.
Nous allons améliorer son déplacement.
Étape 4/
Nous allons déjà rajouter, en début de boucle :
_LIMIT 60
qui signifie 60 images par seconde.
puis, en fin de boucle :
_DIPLAY
DO
_LIMIT 60
yMonstre = yMonstre + 1
LOCATE 1, 1: PRINT yMonstre
SPRITEPUT xMonstre, yMonstre, monstre
_DISPLAY
LOOP
Avec F5, nous constatons que l’ennemi se déplace vers le bas. Mais le problème, c’est qu’il sort de l’écran. A l’étape suivante, nous verrons comment l’empêcher de sortir et même comment le faire remonter.
A suivre…