Je suis en train d'essayer de coder un jeu en C.
Les maps des niveaux sont des matrices avec le n° du tile correspondant dans chaque cellule (comme pour les RPG en BASIC).
Mais je n'arrive pas trouver une routine qui me permette d'afficher les tiles à partir de la matrice sans faire des tonnes de 'IF'.
Pouvez-vous m'aider, SVP ?
PpHd Le 15/11/2001 à 12:24 La routine que tu demandes existe bel et bien. Elle est super optimisee. Mais si je le dis, je vais me faire taper dessus...
Il n'y a pas une doc en français de genlib ?
Et pour utiliser Genlib en C, y faut pas avoir genclib ?
J'y connais vraiment rien en librairies
pour utiliser un prog qui a été prog en C avec genlib, il faut effectivement GenClib sur la TI (sauf si le programmeur a pas utilisé les trucs de genclib, mais directement les macros de Genlib (ou un truc comme ça))
=> par ex, je crois que Total utilisait genlib en C sans Genclib...
PpHd Le 15/11/2001 à 18:26 Il existe une doc complete en anglais dans le zip. Et genclib est juste un interface, qui disparaitra des que tigcc suportera la convention d'appels par registres. Il ne faut rien savoir sur genclib.
PpHd Le 15/11/2001 à 18:33 Je veux pas dire, mais c'est pas du shakespeare. => Tres simple !
c ce que je disais.
Mais c qd même un peu spécialisé comme vocabulaire.
Au tt début que j'ai commencé le C, j'avais toujorus le dico ac moi !!!
oué. Maintenant, le dico que j'avais acheté, il me sert quasiment plus...
PpHd: "des que tigcc suportera la convention d'appels par registres": Ah bon, c'est prévu un passing-by-register sur TIGCC ?
Mais les fonctions de TIOS ne supportent que le passing-by-stack, donc ça ne marchera que pour des fonctions style ExtGraph, Genlib (qui ne sera d'ailleurs pas à réécrire, car elle a déjà le passing-by-register).
PpHd Le 15/11/2001 à 19:30 Disons qu'il existe un patch deja tout pret pour ca, et que sebastian n'a qu'a l'utiliser.
Je l'ai essayer et ca marche au poil
Mais pourquoi vous aimez pas genlib, elle a l'air très bien, cette lib ???
certaines personnes ne veulent pas entendre parler de Genlib, parce que Genlib ne fonctionne que si un Kernel est installé...
Je ne comprendrai jamais la guerre kernel/_nostub...
C'est pas chiant d'installer un kernel sur sa TI...
Ah si, j'oubliais, ça prend 12Ko de mémoire, c'est tellement énorme.
enfin, je veux dire que d'un point de vue de 'joueur', je m'en fous complètement qu'un jeu soit en kernel ou pas.
Mais c'est vrai que je n'ai pas assez programmé en C pour me rendre compte des différences qu'il y a entre programmer un jeu en kernel ou en _nostub.
[edit]Edité par jackiechan91 le 15-11-2001 à 21:24:38[/edit]
Vous serez probablement étonnés, mais j'ai parlé du passage par registres à Sebastian il y a quelques jours. Il ne m'avait pas du tout l'air interessé. Surtout qu'il m'a dit qu'il pense que c'est que vous utilisez GCC-AmigaOS dans le GCC de LiteOS et que c'est pour ça que le passage par registres est supporté. (Est-ce vrai? Ou votre patch fonctionne-t-il avec GCC-M68k-COFF?) Tu peux essayer de parler directement à Sebastian. Et juste pour être sûr: le support du passage par registre laisse-t-il le passage par convention C habituel inchangé? Je pense bien que c'est le cas, mais mieux vaut s'assurer. (Sinon, on ne pourra en aucun cas le mettre! Tous les ROM_CALLs utilisent la convention C!)
Et le patch est disponible sur le FTP de JM, mais ce n'est pas facile du tout de recompiler GCC.
Encore un truc: votre patch fonctionne-t-il avec GCC 3.0x? Il est hors de question de revenir à GCC 2.9x!
Pour répondre à la question d'origine: ne te fais pas avoir par la publicité de PpHd. C'est très simple d'éviter d'avoir des tonnes de ifs, il suffit d'avoir un array de tiles. Par exemple pour 10 tiles 16*16:
short tiles[10][16] /* Il n'y a pas de 3ème dimension car chaque ligne fait un seul short. */={{/*tile1*/},{/*tile2*/},{/*tile3*/},{/*tile4*/},{/*tile5*/},{/*tile6*/},{/*tile7*/},{/*tile8*/},{/*tile9*/},{/*tile10*/}};
Après, il suffit d'accèder à chaque tile par: tiles[0], tiles[1], ...
[edit]Edité par Kevin Kofler le 16-11-2001 à 00:38:55[/edit]

PpHd est doué en optimisation, mais Kevin aussi ! Je n'ai encore jamais eu à faire ceci, mais je crois que je ferai comme Kevin quand j'aurai à le faire, Genlib n'étant de toute façon pas accessible en nostub.
C'est toi qui n'a pas compris que Kevin avait bien repondu a la question.
Une fois qu'il a fait sont tableau de tiles, Il n'a qu'a appeler 'tiles[M[i][j]]'
ou M est la matrice dont JackieChan nous parlait.
ce n'est pas violent tout de meme ?
Kevin> n'est-ce pas plus efficace de faire un tableau de pointeus dsur des sprites: ce sera moins gourmant en memoire, et pas genantettant donné qu'on n'y accede qu'en lecture a ce tableau. (pas de questions a se poser, meme si on connait pas les pointeurs).
Je commence a reussir a faire bouger un sprite. Ou bah je suis content !
PpHd Le 16/11/2001 à 14:52 >naholyr: Non, ce sera meme plus lent.
Appeller tiles[M[i][j]] ? Comment ca ? Ca s'appelle un tiles ?
C'est simple: on a un tableau de numéros de tiles qui représente le niveau:
unsigned char niveau[100][100]=/*...*/;
Puis, pour afficher un écran:
unsigned char i,j;
for(i=0;i<10;i++)
for(j=0;j<6;j++)
Sprite16(i*16,j*16,16,tiles[niveau[i+xpos][j+ypos]],LCD_MEM,SPRT_OR);
[edit]Edité par Kevin Kofler le 16-11-2001 à 23:59:05[/edit]
ben oui moi j'utilise souvent des matrices en 3D pour ptits sprites
Merci beaucoup, d'avoir répondu, surtout kévin.
Je vais essayer ça...
Au fait, il y avait une erreur dans le dernier code que j'ai posté. C'est corrigé.
Kevin: pourquoi utilises-tu le Sprite16 standard de TIGCC et pas le Sprite16_OR de ExtGraph ?