1

Oui, ne me gueulez pas trop dessus, je me suis mis au C depuis 4 jours, donc j'apprend encore ...

En fait une sorte de mini jeu où on controle un bonhomme (sprite) sur l'écran ect, mais le prob c'est que je trouve pas la technique pour qu'il ne se collisionne pas avec d'autre sprite présent et fixe (ex : une petite maison dans un coin).

Avec des condition x<130 ect, le problème c'est que le bonhomme ne franchit plus jamais cette distance ensuite, au lieu de pouvoir la franchir sauf quand C sur le sprite de la maison.

Bref, comment faire pour qu'un sprite qu'on controle ne puisse pas entrer en collision avec un autre sprite fixe ???

Voilà mon code (de nioubi, je sais ... grin) :

#define USE_TI89

#define OPTIMIZE_ROM_CALLS

#define SAVE_SCREEN

#include <tigcclib.h>

void _main(void)
{
  static unsigned long sprt[]={ 0xE00000, 0xFFE0000, 0x30018000, 0x40004000, 0xBF1FA000, 0xA110A000, 0xEDF6E000, 0xA110A000, 0xBF1FA000, 0x80002000, 0x80E02000, 0x40404000, 0x38038000, 0xFFE0000, 0xE00000, 0x7BC0000, 0x8020000, 0x10010000, 0x2C068000, 0x52094000, 0x22088000, 0x3F80000, 0x2480000, 0x4440000, 0xAB60000, 0x1FBF0000, 0x1FBF0000, 0x0, 0x0, 0x0, 0x0, 0x0};
  //sprite bonhommme
  static unsigned long sprt2[]={ 0xE000, 0x11000, 0x20800, 0x404F0, 0x80260, 0x100160, 0x2700E0, 0x450060, 0x870020, 0x1000010, 0x2000008, 0x4000004, 0xFFFFFFE, 0x1004710, 0x1004510, 0x1004710, 0x1FFFFF0, 0x1000010, 0x1000010, 0x1000010, 0x17C0310, 0x1440310, 0x1440010, 0x14407D0, 0x17C0450, 0x1000450, 0x1000450, 0x1154450, 0x11FC450, 0x1104450, 0x1FFFFF0, 0x0};
  //sprite maisonnette.
  static unsigned long sprt3[]={ 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0};
  //dernier sprite est le sprite d'effacement pour le mouvement.
  short x=0,y=0,tt=0;
  INT_HANDLER save_int_1;
  clrscr();
  save_int_1 = GetIntVec(AUTO_INT_1);
  SetIntVec(AUTO_INT_1, DUMMY_HANDLER);
  do
  {
    if(_rowread(0x7E)&0x8 && x+20<160) //touche droite
    {
    	Sprite32(x,y,32,sprt3,LCD_MEM,A_XOR);
    	x=x+1;
    }
    if(_rowread(0x7E)&0x2 && x>0) //touche gauche
    {
    	Sprite32(x,y,32,sprt3,LCD_MEM,A_XOR);
    	x=x-1;
    }
    if(_rowread(0x7E)&0x4 && y+28<100) //touche bas
    {
    	Sprite32(x,y,32,sprt3,LCD_MEM,A_XOR);
    	y=y+1;
    }
    if(_rowread(0x7E)&0x1 && y>0) //touche haut
    {
    	Sprite32(x,y,32,sprt3,LCD_MEM,A_XOR);
    	y=y-1;
    } 
    if(_rowread(0x23F)&0x1)
    tt = 1;
    Sprite32(x, y, 32, sprt, LCD_MEM, A_OR); //affichage du bonhomme et de la maison.
    Sprite32(130,0,32,sprt2,LCD_MEM,A_OR);
  }
  while(tt !=1);
  clrscr();
  SetIntVec(AUTO_INT_1, save_int_1);
  
}



Dites moi donc svp qu'est ce qu'il y a à modifier pour empecher les collisions (vous pouvez tester vous VTI pour mieux voir).

Merci bcp !!!!!! smile


PS : merci à squale92 pour son tuto où j'ai pu voir comment faire des petits trucs pour débuter comme ce bout de code là ..
[edit]Edité par Pim89 le 06-02-2002 à 19:15:34[/edit]
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^

2

tu pex faire des tests de pixels tout aurtour du sprite en déplacement...
ou alors gérer une matrice dans laquelle tu met à 1 les positions où le sprite en déplacement ne peut pas aller, et à 0 les autres...
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

3

La dernière technique est de loin la plus rapide.
avatar
Un site complet sur lequel vous trouverez des programmes et des jeux pour votre calculatrice TI 89 / Titanium / 92+ / Voyage 200 : www.ti-fr.com.
Quelques idées personnelles ici.

4

c clair !
mais je n'ai pas l'impression qu'il soit parti d'une matrice de sprites ici
avatar
Tutorial C (TI-89/92+/v200) - Articles Développement Web (PHP, Javascript, ...)
« What is the sound of Perl? Is it not the sound of a wall that people have stopped banging their heads against? » - Larry Wall

5

en effet non ... mon petit prog est juste pour m'entrainer et pas pour faire un RPG.

En passant par une matrice, comment faire (pour le système de stockage, j'imagine qu'il doit falloir stocker dans la mat ensuite la position de mon sprite mobile, puis faire des tests ensuite sur sa position) ????

Y'a un tuto sur ça en français svp ???

Sinon sans les matrices, comment on peut faire par la 1ère méthode de squale92 (test de pixel ?? comme avec Pxltest() en BASIC ??)


PS : squale92 >> dans Krypton, tu utilises des matrices pour les collision ect ????
Non-Webmaster et non-programmeur du site. .Pour tout probleme ou question ,débrouillez vous avec les Webmasters .

«- Pas Moo ! ^^