23-03-2011, 08:32 PM
Guarda, avevo già visto che c'era sia la dbSpriteCollision che la dbSpriteHit, ma ti dico la verità non avevo capito la differenza, anzi grazie per avermela fatta capire...
Il problema è che non sono convinto di come sto cercando di gestire le cose...Purtroppo si riscontrano dei grossi problemi che non so come superare...Ho anche googlato ma non sono riuscito a venirne a capo...Ora cerco di spiegarvi:
Vi posta questa immagine così riesco a farmi capire meglio
Quello che ho fatto io è stato di controllare se il mio omino è a contatto con qualcosa, se ottengo che è a contatto con le sprite dei muri del terreno non faccio nulla, altrimenti se arrivo in una buca ottengo che dbSpriteCollision non mi da risultati quindi so che l'omino sta cadendo, per fare cio ho semplicemente scritto:
Fin qui sembra che la cosa, con qualche accorgimento possa funzionare...Il problema sorge quando arriviamo in corrispondenza del blocco 6, li, attraverso questo codice:
Volevo fare in modo che si bloccasse in corrispondenza di quel blocco...Il problema è questo:
la funzione dbSpriteCollision (e anche la dbSpriteHit), restituiscono una sola collisione per volta, dando la priorità alla sprite generata per prima, quindi quando sono in collisione con il blocco 6, lo sono anche con il 5, e la funzione mi restituisce l'indice 5 non facendosi avverare le condizioni scritte nel codice sopra e quindi l'omino non si ferma ...Non so se sono riuscito a farmi capire, ma prorio non riesco a venirne fuori...Forse sono totalmente fuori strada con il metodo di gestione che ho adottato...
Sapreste dirmi qualcosa sul problema che ho esposto, o un consiglio su un'altra soluzione da adottare per gestire i terreni dove l'omino cammina??
Il problema è che non sono convinto di come sto cercando di gestire le cose...Purtroppo si riscontrano dei grossi problemi che non so come superare...Ho anche googlato ma non sono riuscito a venirne a capo...Ora cerco di spiegarvi:
Vi posta questa immagine così riesco a farmi capire meglio
Quello che ho fatto io è stato di controllare se il mio omino è a contatto con qualcosa, se ottengo che è a contatto con le sprite dei muri del terreno non faccio nulla, altrimenti se arrivo in una buca ottengo che dbSpriteCollision non mi da risultati quindi so che l'omino sta cadendo, per fare cio ho semplicemente scritto:
Codice:
int risColl = dbSpriteCollision(3, 0);
if ((risColl == 0 || risColl==1) && !jumping)
{
dbMoveSprite(3, -5);
}
Codice:
if ( dbRightKey())
{
bool collisione=false;
int risColl = dbSpriteCollision(3, 0);
if (risColl !=0)
{
int xH=dbSpriteX(3);
if (dbSpriteX(3) < dbSpriteX(risColl) && dbSpriteY(risColl) < dbSpriteY(3)+dbSpriteHeight(3))
collisione=true;
}
if (collisione==false)
{
dbRotateSprite(3,90);
dbMoveSprite(3,3);
dbRotateSprite(3,0);
}
}
la funzione dbSpriteCollision (e anche la dbSpriteHit), restituiscono una sola collisione per volta, dando la priorità alla sprite generata per prima, quindi quando sono in collisione con il blocco 6, lo sono anche con il 5, e la funzione mi restituisce l'indice 5 non facendosi avverare le condizioni scritte nel codice sopra e quindi l'omino non si ferma ...Non so se sono riuscito a farmi capire, ma prorio non riesco a venirne fuori...Forse sono totalmente fuori strada con il metodo di gestione che ho adottato...
Sapreste dirmi qualcosa sul problema che ho esposto, o un consiglio su un'altra soluzione da adottare per gestire i terreni dove l'omino cammina??