Oppure

Loading
11/02/12 12:18
RiccardoG97
Salve a tutti,
vorrei creare un gioco in C++ con SDL, una specie di Fall Down. Per fare la collisione fra la pallina e i platform vorrei fare una cosa del genere. Esempio:

Se ( la palla non sta toccando il colore nero ) allora
istruzioni
altrimenti
istruzioni

Vorrei riuscire a capire quindi quando un oggetto sta toccando un colore o meno.

Qualcuno sa aiutarmi?
Grazie in anticipo!
aaa
11/02/12 14:34
subazu
Se stai parlando di figure piane il modo più semplice per vedere se un punto è dentro ad un rettangolo è quello di controllare se la posizione in X del punto è tra le x del rettangolo e controllare se la Y del punto sia tra le y del quadrato.

Per i poligoni in generale, invece, è più complesso, perché devi vedere quante volte, un ipotetica semiretta che parte dal punto (e va verso una qualsiasi direzione, generalmente la destra) interseca i lati della figura.
Un numero pari di intersezioni (lo 0 è pari) indica che è fuori, un numero dispari indica che il punto è dentro, ovviamente questo sistema funziona per tutte le figure (anche il quadrato e il triangolo)
Ultima modifica effettuata da subazu 12/02/12 8:33
aaa
13/02/12 17:24
RiccardoG97
Si sto parlando di figure piane, quindi penso di ricorrere al primo metodo che hai detto, dato che lo conosco già. Chiedevo se esisteva il modo per capire se un certo oggetto entrava a contatto con un pixel di un certo colore.
aaa
13/02/12 18:22
subazu
Bè per sapere se un cerchio tocca un punto, basa vedere se la distanza tra il centro del cerchio e il punto è uguale al raggio del cerchio.
circle c ; //oggetto cerchio
point p ; //oggetto punto
int d; //distanza

d = ((c.x - p.x)^2 + (c.y - p.y)^2)^(1/2) //distanza tra i due punti

If d <= c.raggio Then
  collisione = true;
Else
  Collisione = false;


Ma non credo che sia questo il tuo problema...

E' secondo me è CONCETTUALMENTE sbagliato parlare di "zona colorata", questo perché la grafica non è altro che una conseguenza dei dati che hai (oggetto pallina, oggetti dei piani... ecc.), e solo su questi ultimi fai i tuoi calcoli.

Non è la pallina che si sposta ma le sue coordinate che vengono cambiate, il fatto che venga ridisegnata ogni frazione di secondo e le sia dato un effetto di movimento è un altro discorso...

Infatti dicevi:
Se ( la palla non sta toccando il colore nero ) allora 
     istruzioni 
altrimenti 
     istruzioni 


Quello che invece serve a te è:
Se ( la palla non collide con il rettangolo X) allora 
     istruzioni 
altrimenti 
     istruzioni 

Che poi il rettangolo x sia di colre nero è una opzione grafica che puoi cambiare a tua discrezione, anche durante le fasi del gioco.

Quello che sto cercando di spiegarti è che la fisica del gioco (tutti gli spostamenti e le interazioni fra gli oggetti) è completamente slegata dalla grafica, e che quindi devi fare riferimento solo alle tue variabili e non a zone di colore X o ai punti di un area di quel colore, perché nei tuoi dati (variabili) avrai un rettangolo che segnala che c'è una zona nera nella schermata che viene disegnata.

Fare riferimento (sia in modo astratto che con istruzioni di codice) alle informazioni contenute nei rendering grafici (quello che vedi a schermo, quindi a delle immagini) è oltre che sbagliato, un operazione onerosa se fattibile...

Spero di essere stato un minimo chiaro :k:
Ultima modifica effettuata da subazu 13/02/12 18:32
aaa
14/02/12 15:23
RiccardoG97
Ho capito perfettamente ciò che hai detto.. grazie!
Utilizzerò il metodo che mi hai proposto, che mi sembra molto semplice e funzionale. Grazie!
aaa