10-04-2011, 01:44 AM
(Questo messaggio è stato modificato l'ultima volta il: 10-04-2011, 01:17 PM da steve.)
Io le collisioni le gestirei in questo modo:
1° modo
2° modo
Che si utilizzano nei modi seguenti
1° modo
2° modo
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.
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.