Cet article décrit l'utilisation des tableaux de sprites dans un programme Small Basic. Un sprite est une image qui se déplace dans un jeu graphique, ils peuvent représenter des aliens par exemple.
Souvent nous avons besoins de plusieurs copies de sprites qui vont et viennent lorsque le jeu s'exécute, et il est conseillé des stocker dans des tableaux. Cet article propose quelques explications et suggestions sur les moyens de contrôler dynamiquement les sprites efficacement.
L'image d'un sprite se trouve dans un fichier (par exemple. jpg ou png). Ce fichier peut un fichier local sur votre PC ou socker en ligne sous forme d'URL. Si il est local alors vous devrez partager les images avec votre jeu dans un téléchargement zip, aussi il peut être préférable d'héberger le fichier sur le Web quand c'est possible.
Il est généralement préférable de créer un sprite avec une bordure transparente et en choisissant soigneusement la largeur et la hauteur en pixels.
Une fois que le sprite est créé, il est plus efficace de le charger qu'une seule fois dans votre programme en utilisant la méthode ImageList, et habituellement on fait cela avant que le jeu ne démarre car il peut prendre du temps à télécharger. L'image chargée peut être utilisée plusieurs fois pour avoir de multiple copies du sprite. Le code suivant est un exemple de chargement de l'image d'un sprite à partir d'une URL et test qu'il s'affiche correctement.
sprite
=
ImageList
.
LoadImage
(
"http://litdev.co.uk/game_images/football.png"
)
Shapes
AddImage
Sprite d'un Ballon de Football
Maintenant nous pouvons créer un tableau avec plusieurs copies du sprite, en utilisant l'image chargée, par exemple.
spriteImage
numSprite
10
For
i
1
To
[
]
EndFor
Les sprites apparaissent tous par dessus les autres et nous ne pouvons pas encore faire grand chose avec.
Les sprites sont des images, mais dans un jeu ils peuvent avoir d'autres propriétés comme la position, le statut, la vélocité et autres. Nous avons besoin de stocker ces informations pour chaque sprites dans des tableaux. Il y a plusieurs méthodes pour faire ça, mais ici nous proposons d'enregistrer toutes les informations d'un sprite dans un tableau et d'avoir un tableau de ce tableau de sprite - pour être précis un tableau à deux dimensions.
Les tableaux dans Small Basic peuvent être lents, mais sont nous gardons le nombre d'éléments à son minimum, cette méthode des avantages. Elle permettra également d'améliorer votre programmation en maintenant les données logiquement associées ensembles et permettre plus facilement la création et la suppression d'un sprite.
Le code ci-dessous est structuré avec des sous-routines, créant plusieurs sprites, les positionnant de manière aléatoire, puis les déplaçant. Nous pouvons avoir des sprites qui pivotent ou d'autres caractéristiques enregistrées dans les tableaux spriteData.
gw
600
gh
GraphicsWindow
Width
Height
CreateSprites
' Boucle du jeu
While
"True"
start
Clock
ElapsedMilliseconds
UpdateSprites
delay
20
-
If
>
0
Then
Program
Delay
EndIf
EndWhile
Sub
'Les dimensions utilisées pour le sprite sont la moitié de la hauteur et de la largeur
spriteWidth
GetWidthOfImage
/
2
spriteHeight
GetHeightOfImage
spriteData
"image"
"Xpos"
+
Math
GetRandomNumber
*
"Ypos"
"Xvel"
11
6
"Yvel"
sprites
EndSub
' récupère le tableau du sprite en cours
'Repositionne le centre du sprite
'Rebondi contre les murs
<
ElseIf
'Déplace le centre du sprite
Move
,
'enregistre le tableaux modifié du sprite (il peut avoir été modifié)
Ce code peut sembler plus long que nécessaire, mais enregistrer toutes les données d'un sprite dans un tableau et ainsi d'avoir un tableau de sprites et une manière efficace de procéder si vous voulez créer et détruire des sprites pendant le jeu.
Nous avons souvent besoin que les sprites apparaissent et disparaissent. L'une des méthodes pour le faire est de recycler les sprites à partir d'un "pool", en les activant et les utilisant que c'est nécessaire. C'est très bien par exemple pour les tirs de balles ou de missiles, quand nous avons besoin uniquement d'un nombre limité à l'écran en même temps.
L'exemple qui suit tire des missiles lorsqu'un bouton de la souris est cliqué. Une nouvelle propriété "Status" est définie dans spriteData qui est utilisée pour indiquer si le missile est actif ou pas. Les missiles inactifs sont masqués et ils ne sont affichés à l'écran que lorsqu'ils actif.
Missile Sprite
MouseDown
OnMouseDown
'Boucle de jeu
mouseDown
FireMissile
"False"
"http://litdev.co.uk/game_images/missile.png"
50
5
"Status"
HideShape
'récupère le tableau du sprite en cours
'Ce sprite n'est plus utile ?
'enregistre le tableau modifié du sprite (il peut avoir été modifié)
'récupère le tableau du sprite courant
ShowShape
MouseX
'Fin de la boucle
Ajouter et supprimer des sprites pendant le jeu peut être nécessaire dans certains cas, par exemple lorsque nous ne savons quelle image il va avoir avant d'en avoir besoin où lorsque le nombre de sprite ne peut pas être facilement géré par un pool de taille fixe. Cependant, le pool de sprites reste la meilleure approche la plupart du temps.
Avec ces points à l'esprits, voici le code ajoutant et supprimant des sprites dans le tableau de missiles quand c'est nécessaire, pour comparer avec la méthode "pool".
""
nextSprite
spriteIndices
Array
GetAllIndices
GetItemCount
index
'index du sprite courant
'récupére le tableau du sprite courant
'Ce sprite est terminé ?
Remove
Sprites
Else
'enregistre le tableau modifié du sprite (il peut avoir changé)
Bien que cet article et plutôt orienté manipulation des tableaux de sprite, les méthodes utilisées dans le dernier exemple correspondent réellement à de bonnes techniques générales à étudier pour améliorer votre programmation. Elles vous permettrons de mieux passer à votre prochain langage après le Small Basic, où vous rencontrerez certainement des notions de classes et de collections.