Déplacer un sprite à l’écran

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…