• Benvenuto in Making Videogames!
  • Dai sfogo alla tua fantasia!
  • Crea il tuo Videogioco!
Benvenuto ospite! Login Registrati




Valutazione discussione:
  • 0 voto(i) - 0 media
  • 1
  • 2
  • 3
  • 4
  • 5
Utilizzare funzioni di collisione in varie direzioni
#1
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 iSpriteint 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.
 
Rispondi
#2
Io le collisioni le gestirei in questo modo:

1° modo
Codice PHP:
bool collisionDx(int iSpriteint iTarget)
{
    if(
dbSpriteCollision(iSprite,iTarget) && (dbSpriteX(iSprite)<dbSpriteX(iTarget)))
        return 
true;
    else
        return 
false;
}

bool collisionSx(int iSpriteint iTarget)
{
    if(
dbSpriteCollision(iSprite,iTarget) && (dbSpriteX(iSprite)>dbSpriteX(iTarget)))
        return 
true;
    else
        return 
false;
}

bool collisionUp(int iSpriteint iTarget)
{
    if(
dbSpriteCollision(iSprite,iTarget) && (dbSpriteY(iSprite)>dbSpriteY(iTarget)))
        return 
true;
    else
        return 
false;
}

bool collisionDw(int iSpriteint iTarget)
{
    if(
dbSpriteCollision(iSprite,iTarget) && (dbSpriteY(iSprite)<dbSpriteY(iTarget)))
        return 
true;
    else
        return 
false;


2° modo
Codice PHP:
unsigned char collision(int iSpriteint 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();
    
dbSyncRate60 );
    
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();
    
dbSyncRate60 );
    
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.
 
Rispondi
#3
Ok funziona tutto. Grazie mille Smile
 
Rispondi
  


Discussioni simili
Discussione Autore Risposte Letto Ultimo messaggio
  Utilizzare sia la funzione main che DarkGDK ossen97 3 1,446 09-04-2011, 10:40 PM
Ultimo messaggio: steve

Vai al forum:


Browsing: 2 Ospite(i)