Prenons, au hasard, le code d'une animation Mario en développement:
- Code: Select all
Ligne(17,40,28,40
Ligne(15,39,16,39
Ligne(29,39,30,39
Ligne(13,38,14,38
Ligne(31,38,33,36
Ligne(8,33,12,37
Ligne(34,35,34,34
Ligne(35,33,35,30
Ligne(7,32,7,31
Ligne(6,30,6,29
Ligne(36,29,38,27
Ligne(5,28,5,26
Ligne(27,26,38,26
Ligne(28,25,31,25
Ligne(30,24,31,24
Ligne(4,25,4,24
Ligne(3,23,3,20
Ligne(31,23,31,20
Pt-On(2,19
Ligne(32,19,32,18
Ligne(1,18,1,14
Ligne(2,13,3,12
Ligne(33,17,33,13
Ligne(4,11,7,11
Ligne(7,10,8,9
Ligne(8,8,11,5
Ligne(34,15,34,8
Ligne(33,7,32,6
Ligne(33,8,31,6
Ligne(12,5,13,4
Ligne(14,4,15,3
Ligne(16,3,17,2
Ligne(18,2,24,2
Ligne(31,6,28,6
Ligne(29,5,27,5
Ligne(27,4,25,4
Ligne(25,3,21,3
Ligne(19,4,21,4
Ligne(17,6,18,5
Ligne(17,10,17,7
Ligne(27,7,29,7
Ligne(18,10,19,9
Ligne(18,11,21,8
Ligne(21,9,22,8
Ligne(23,8,28,8
Ligne(28,9,30,11
Ligne(28,10,30,12
Ligne(31,11,32,12
Ligne(30,13,30,15
Ligne(29,16,27,18
Ligne(27,19,25,21
Ligne(27,18,24,18
Ligne(25,19,25,21
Ligne(26,22,28,23
Ligne(19,18,19,19
Pt-On(18,17
Ligne(17,17,17,20
Ligne(18,20,17,21
Ligne(17,21,19,23
Pt-On(20,23
Ligne(9,11,11,11
Ligne(8,12,9,12
Ligne(11,12,12,12
Ligne(8,13,8,16
Ligne(12,13,13,13
Ligne(13,14,13,16
Ligne(12,16,12,17
Ligne(11,17,11,19
Ligne(7,17,7,19
Ligne(6,19,10,19
Ligne(4,20,5,20
Ligne(5,14,5,16
Ligne(4,16,4,17
Pt-On(3,17
Ligne(8,20,10,20
Ligne(9,21,10,21
Ligne(11,22,12,22
Ligne(13,23,15,23
Ligne(15,22,17,22
Ligne(16,24,17,24
Ligne(18,25,20,25
Ligne(21,25,26,26
Pt-On(21,24
Ligne(12,26,15,29
Ligne(16,29,17,30
Ligne(18,30,19,31
Ligne(20,31,21,31
Ligne(22,32,32,32
Ligne(33,31,34,31
Ligne(22,31,22,34
Ligne(23,35,23,36
Ligne(24,37,27,37
Ligne(28,36,30,34
Pt-On(30,33
Pt-On(26,36
Ligne(25,33,27,33
Pt-On(25,34
Pt-On(27,34
C'est beau, hein ?
Certes, mais un peu lourd.
Il existe un moyen d'économiser un octet par ligne. (un peu moins)
La base de données.
Comment ça marche ? Voici le principe
- Créer une base de données qui contient tous les coordonées de points nécessaires au dessin des lignes
- Créer un algorithme qui va extraire de cette base de données les coordonées nécessaires au traçage d'une ligne, puis passer à la suivante
Alors, étape 1, créer la base de données.
Je vais donc rentrer tout ça dans une liste.
Quelques remarques tout de même:
- Vous ne pouvez utiliser qu'un seul type d'insctruction à la fois (ici j'ai viré les Pt-On )
- ATTENTION: plus votre liste est grande, plus ça va être lent. Ne pas hésiter à la couper en plusieurs petites listes et à recommencer plusieurs fois l'algorithme de traçage.
- Au maximum, vous pouvez stocker 249 lignes dans une liste (250*4>999). Mais je vous le déconseille, c'est très lent et ça demande beaucoup de RAM libre.
- Vous n'êtes pas obligés d'utiliser L1, L2, ou une liste perso. Ans, (ou Rép en français), c'est sympa aussi.
Dans cet exemple, je vais prendre une liste hyper-grosse pour que vous compreniez bien le principe. Mais je vous le déconseille IRL.
- Code: Select all
:{17,40,28,40,15,39,16,39,29,39,30,39,13,38,14,38,31,38,33,36,8,33,12,37,34,35,34,34,35,33,35,30,7,32,7,31,6,30,6,29,36,29,38,27,5,28,5,26,27,26,38,26,28,25,31,25,30,24,31,24,4,25,4,24,3,23,3,20,31,23,31,20,32,19,32,18,1,18,1,14,2,13,3,12,33,17,33,13,4,11,7,11,7,10,8,9,8,8,11,5,34,15,34,8,33,7,32,6,33,8,31,6,12,5,13,4,14,4,15,3,16,3,17,2,18,2,24,2,31,6,28,6,29,5,27,5,27,4,25,4,25,3,21,3,19,4,21,4,17,6,18,5,17,10,17,7,27,7,29,7,18,10,19,9,18,11,21,8,21,9,22,8,23,8,28,8,28,9,30,11,28,10,30,12,31,11,32,12,30,13,30,15,29,16,27,18,27,19,25,21,27,18,24,18,25,19,25,21,26,22,28,23,19,18,19,19,17,17,17,20,18,20,17,21,17,21,19,23,9,11,11,11,8,12,9,12,11,12,12,12,8,13,8,16,12,13,13,13,13,14,13,16,12,16,12,17,11,17,11,19,7,17,7,19,6,19,10,19,4,20,5,20,5,14,5,16,4,16,4,17,8,20,10,20,9,21,10,21,11,22,12,22,13,23,15,23,15,22,17,22,16,24,17,24,18,25,20,25,21,25,26,26,12,26,15,29,16,29,17,30,18,30,19,31,20,31,21,31,22,32,32,32,33,31,34,31,22,31,22,34,23,35,23,36,24,37,27,37,28,36,30,34,25,33,27,33
Donc ensuite, je crée un algo qui chope les bonnes valeurs, et qui trace...
- Code: Select all
:{17,40,28,40,15,39,16,39,29,39,30,39,13,38,14,38,31,38,33,36,8,33,12,37,34,35,34,34,35,33,35,30,7,32,7,31,6,30,6,29,36,29,38,27,5,28,5,26,27,26,38,26,28,25,31,25,30,24,31,24,4,25,4,24,3,23,3,20,31,23,31,20,32,19,32,18,1,18,1,14,2,13,3,12,33,17,33,13,4,11,7,11,7,10,8,9,8,8,11,5,34,15,34,8,33,7,32,6,33,8,31,6,12,5,13,4,14,4,15,3,16,3,17,2,18,2,24,2,31,6,28,6,29,5,27,5,27,4,25,4,25,3,21,3,19,4,21,4,17,6,18,5,17,10,17,7,27,7,29,7,18,10,19,9,18,11,21,8,21,9,22,8,23,8,28,8,28,9,30,11,28,10,30,12,31,11,32,12,30,13,30,15,29,16,27,18,27,19,25,21,27,18,24,18,25,19,25,21,26,22,28,23,19,18,19,19,17,17,17,20,18,20,17,21,17,21,19,23,9,11,11,11,8,12,9,12,11,12,12,12,8,13,8,16,12,13,13,13,13,14,13,16,12,16,12,17,11,17,11,19,7,17,7,19,6,19,10,19,4,20,5,20,5,14,5,16,4,16,4,17,8,20,10,20,9,21,10,21,11,22,12,22,13,23,15,23,15,22,17,22,16,24,17,24,18,25,20,25,21,25,26,26,12,26,15,29,16,29,17,30,18,30,19,31,20,31,21,31,22,32,32,32,33,31,34,31,22,31,22,34,23,35,23,36,24,37,27,37,28,36,30,34,25,33,27,33
:For(A,1,dim(Rép)-3,4
:Ligne(Rép(A),Rép(A+1),Rép(A+2),Rép(A+3
:End
Il faut bien comprendre:
- Rép (ou Ans) est une liste. Donc je peux très bien écrire Rép(A) comme j'écrirais L1(A). :cheers:
- Dans une boucle For allant de 1 à la dimension de la liste moins 3 (c'est à dire du début de la première ligne au début de la dernière ligne), je vais demander à la fonction Ligne de dessiner selon les coordonées A, A+1, A+2 et +3.
Des questions ? Vous êtes pas trop fatigués ? :sleep:
Il vous reste ensuite à rajouter les quelques Pt-On nécessaires à la complétion de votre dessin !
Optimisation plus poussée: si tous les points se relient
Dans le précédent exemple, on a finalement pas gagné grand chose en poids, et on a perdu en vitesse.
Quand tous les points se relient, il y a moyen d'exploser le gain de poids.
Il suffit de décaler A de 2 et pas de 4, pour utiliser deux fois de suite les mêmes coordonnées !
Considérons ce nouvel exemple.
- Code: Select all
:{10,10,30,30,21,45,10,30,30,10,30,30,10,30,10,10,30,10
:For(A,1,dim(Rép)-3,2
:Ligne(Rép(A),Rép(A+1),Rép(A+2),Rép(A+3
:End
Puis, A ne va se décaler que de 2:
La seconde fois, il utilisera 30,30,21,45.
Cette technique nous permet d'économiser non plus 1, mais une moyenne de 5 octets par ligne !!!
Et on utilise très souvent des dessins avec des points reliés, quand on y fait attention.
C'est surtout dans ce cas là que la base de données devient un avantage... :study:
Allez, faites en bon usage !!