Utilizzare funzioni di collisione in varie direzioni - ossen97 - 10-04-2011
Ciao! Volevo chiedere come usare le funzioni che ho creato per le collisioni nelle direzioni destra, sinistra, su, giu. Le funzioni sono tutte come la seguente:
Codice PHP: bool colldx(int iSprite, int iTarget)//Funzione collisioni a destra { int xSprite=dbSpriteX(iSprite); int ySprite=dbSpriteY(iSprite); int xTarget=dbSpriteX(iTarget); int yTarget=dbSpriteY(iTarget); if (dbSpriteCollision(iSprite,iTarget) && xSprite < xTarget) { return 1; } else { return 0; } }
Grazie in anticipo, ciao ciao.
RE: Utilizzare funzioni di collisione in varie direzioni - steve - 10-04-2011
Io le collisioni le gestirei in questo modo:
1° modo
Codice PHP: bool collisionDx(int iSprite, int iTarget) { if(dbSpriteCollision(iSprite,iTarget) && (dbSpriteX(iSprite)<dbSpriteX(iTarget))) return true; else return false; }
bool collisionSx(int iSprite, int iTarget) { if(dbSpriteCollision(iSprite,iTarget) && (dbSpriteX(iSprite)>dbSpriteX(iTarget))) return true; else return false; }
bool collisionUp(int iSprite, int iTarget) { if(dbSpriteCollision(iSprite,iTarget) && (dbSpriteY(iSprite)>dbSpriteY(iTarget))) return true; else return false; }
bool collisionDw(int iSprite, int iTarget) { if(dbSpriteCollision(iSprite,iTarget) && (dbSpriteY(iSprite)<dbSpriteY(iTarget))) return true; else return false; }
2° modo
Codice PHP: unsigned char collision(int iSprite, int iTarget) { if(dbSpriteCollision(iSprite,iTarget) && (dbSpriteX(iSprite)<dbSpriteX(iTarget))) return 'R'; // R = Right collision else if(dbSpriteCollision(iSprite,iTarget) && (dbSpriteX(iSprite)>dbSpriteX(iTarget))) return 'L'; // L = Left collision else if(dbSpriteCollision(iSprite,iTarget) && (dbSpriteY(iSprite)<dbSpriteY(iTarget))) return 'D'; // D = Down collision else if(dbSpriteCollision(iSprite,iTarget) && (dbSpriteY(iSprite)>dbSpriteY(iTarget))) return 'U'; // U = Up collision else return 'N'; // N = No collision // N.B. Ricorda il case sensitive! }
Che si utilizzano nei modi seguenti
1° modo
Codice PHP: #include <DarkGDK.h> #inlcude "collision.h"
void DarkGDK(void) { dbSyncOn(); dbSyncRate( 60 ); int x = 1; //posizione player int y = 1; //posizione player dbLoadImage("img.jpg",1); dbLoadImage("img2.jpg",2); dbSprite(1,0,0,1); dbSprite(2,100,100,2);
while (LoopGDK()) { if(!collisionDx(1,2) && dbRightKey()) x++; if(!collisionSx(1,2) && dbLeftKey()) x--; if(!collisionUp(1,2) && dbUpKey()) y--; if(!collisionDw(1,2) && dbDownKey()) y++; dbSprite(1,x,y,1); dbSync(); } }
2° modo
Codice PHP: #include <DarkGDK.h> #inlcude "collision.h"
void DarkGDK(void) { dbSyncOn(); dbSyncRate( 60 ); int x = 1; //posizione player int y = 1; //posizione player dbLoadImage("img.jpg",1); dbLoadImage("img2.jpg",2); dbSprite(1,0,0,1); dbSprite(2,100,100,2);
while (LoopGDK()) { switch(collision(1,2)) case 'U': if(dbUpKey()) y-- break; case 'D': if(dbDownKey()) y++; break; case 'L': if(dbLeftKey()) x--; break; case 'R': if(dbRightKey()) x++; break; dbSprite(1,x,y,1); dbSync(); } }
Visto che sono riutilizzabili indipendentemente dal progetto le ho messe in un header file: collision.h
PS. ho scritto queste funzioni senza averle provate, se non funzionano avvisate.
RE: Utilizzare funzioni di collisione in varie direzioni - ossen97 - 10-04-2011
Ok funziona tutto. Grazie mille
|