❤ 0 Chapitre 8 : Bob le lutin se paye un sprite
Bon, vous savez quoi on va cette fois si lancer les choses sérieuses ! On va parler de sprite. De sprite machine car c'est le co processeur de la mégadrive qui s'occupe de ça et gère cette fonction !
Ce qui est cool avec les sprites de la mégadrive, c'est que nous pouvons le poser en point près. Pas comme les tiles.
Alors, l'image d'un sprite est calqué sur les tiles. Donc Data plus loadTile pour mémoriser ça dans la mémoire vidéo est aussi fonctionnelle pour les tiles.
On va utiliser un carré de 8 point pour l'exemple.
-Nous allons aussi déclarer le nom de notre sprite en integer.
Maintenant il faut définir la taille (en tiles) du sprite dans sp1 (pour notre exemple.) La fonction AddSprite(1,1) permet de faire ça. 1,1 c''est tous simplement la taille en X et Y du sprite en question en fonction des tiles.
donc
sp1=AddSprite(1,1)
maintenant nous allons lui attacher le numéros du tiles de départ ! (256 pour notre exemple)
=> PropSprite sp1,256,0
Ne vous occupez pas du 0 pour le moment, on verra ça plus tard !
Et enfin on va l'afficher avec la commande Move
=>MoveSprite sp1,128,128
Voici le code source test !
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
|
local sp1 as integer
LoadTiles E_Tiles,1,256
sp1=AddSprite(1,1)
PropSprite sp1,256,0
MoveSprite sp1,128,128
E_Tiles:
Rem Tile A
DataLong $11111111
DataLong $10000001
DataLong $10000001
DataLong $10000001
DataLong $10000001
DataLong $10000001
DataLong $10000001
DataLong $11111111
|
Et oué, le carré est en haut à gauche. Pourtant on a demandé 128 sur 128.
Verdicte ? Ba le coin haut-gauche de l'écran à pour coordonné de base 128 points, sur 128 ! Piège à con.
Maintenant on va utiliser le gros carré du début. On ba remplacer les data E_Tiles par celui qui convient, modifier le loadtiles et le Addsprite pour avoir un carré de 4 sur 4.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
| Local sp1 As Integer
LoadTiles E_Tiles,4,256
sp1=AddSprite(2,2)
PropSprite sp1,256,0
MoveSprite sp1,128,128
E_Tiles:
Rem Tile A
DataLong $11111111
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $11111111
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $11111111
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $11111111
|
Houla, il y a un bug non ?
Non, on a bien un tile de 16 x 16 point. Ceci dit la paterne est entrelacer. Ce qui fait :
Tile 1 - Tile 3
Tile 2 - Tile 4
En gros on commence par les ligne 1, ligne 2 pour décaler sur la nouvelle colonne !
Replaçons l'ordre des tiles dans les datas ! A vous de jouer la !
Voila on a un beau carré.
Et si nous allons le faire bouger automatiquement ?
Oui
Bon on va utiliser une boucle infini while 1...wend
on va afficher le sprite par apport à une valeur X
a la fin de la boucle on augmente X de 1 et on recommence la bouzin !
Voici le code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
|
Local sp1 As Integer,X As Integer
LoadTiles E_Tiles,4,256
X=128
sp1=AddSprite(2,2)
PropSprite sp1,256,0
MoveSprite sp1,X,129
While 1
MoveSprite sp1,X,128
X=X+1
Sleep 1,TvBlank
Wend
E_Tiles:
Rem Tile A
DataLong $11111111
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $10000000
DataLong $11111111
DataLong $11111111
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $00000001
DataLong $11111111
|
Un nouveau petit truc apparait. Sleep 1,TvBlank
Retirez le pour tester et voir l'effet !
Sleep 1,TvBlank en gros permet de ralentir le "programme". Il attend le retour du balayage d'écran.
Voila le nouveau chapitre fini. Le prochain chapitre vera la gestion du PAD pour diriger notre sprite puis nous allons attaquer la couleur ! Car jusque la avoir seulement du noir et du blanc, cela ne fais pas office à cette console. (Nous sommes pas sur Game Boy !!! Nemau ?)
|