• 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
Collisioni 2D
#1
Ciao a tutti, sto facendo delle piccole prove con DarkGDK e sono riuscito a far muovere uno sprite. Volevo mettere un tavolo e fare in modo che il PG si fermasse alla collisione con esso. Il mio codice è questo, ma non va:
Codice PHP:
#include <DarkGDK.h>

void DarkGDK void )
{
    
dbSyncOn();
    
dbSyncRate60 );
    
dbLoadImage("zombie.png",1);
    
dbLoadImage("fine.png",2);
    
int x,y,speed,collisione;
    
speed=5;
    
collisione=dbSpriteCollision(2,1);
    
dbSprite(1,0,0,1);
    
dbSprite(2,200,200,2);
    while (
LoopGDK())
    {
        if (
dbRightKey() && collisione==0)
        {
            
x=dbSpriteX(1);
            
y=dbSpriteY(1);
            
dbSprite(1,x+speed,y,1);
        }
        else if (
dbLeftKey() && collisione==0)
        {
            
x=dbSpriteX(1);
            
y=dbSpriteY(1);
            
dbSprite(1,x-speed,y,1);
        }
        else if (
dbUpKey() && collisione==0)
        {
            
x=dbSpriteX(1);
            
y=dbSpriteY(1);
            
dbSprite(1,x,y-speed,1);
        }
        else if (
dbDownKey() && collisione==0)
        {
            
x=dbSpriteX(1);
            
y=dbSpriteY(1);
            
dbSprite(1,x,y+speed,1);
        }
        
dbSync();
    }
    return;


Mi potete dire cosa c'è che non va? Grazie in anticipo, ciao!
 
Rispondi
#2
Sposta collisione=dbSpriteCollision(2,1); dentro il loop principale (il ciclo while), in questo modo esegui il controllo ad ogni refresh dello schermo.
 
Rispondi
#3
(09-04-2011, 06:20 PM)steve Ha scritto: Sposta collisione=dbSpriteCollision(2,1); dentro il loop principale (il ciclo while), in questo modo esegui il controllo ad ogni refresh dello schermo.

Funziona! Grazie mille Steve! Smile
 
Rispondi
#4
[edit] Anticipato XD
 
Rispondi
#5
E rieccomi a rompere! xD Ho un altro problema, lo sprite collide, solo che si ferma e non si muove più, dato che entra di 5 pixel all'interno del tavolo. Come posso fare?? Ho provato a far tornare indietro lo sprite, solo che, ovviamente, funziona solo da un lato questo metodo. Come posso risolvere?
 
Rispondi
#6
Non è per i 5 pixel che non si muove, è perché non hai gestito correttamente le collisioni.
Nel tuo codice dici: se lo sprite collide, non fare niente; invece dovresti dire: se lo sprite collide a destra, non farlo muovere a destra (e viceversa: se collide a sinistra non farlo muovere a sinistra).

Secondo me ti conviene creare 2 funzioni (una per la collisione a destra e una per la collisione a sinistra) che ti ritornano true se avviene la collisione. Prova a pensare come potresti farle, in caso hai problemi facci sapere che ti aiutiamo.
 
Rispondi
  


Vai al forum:


Browsing: 1 Ospite(i)