Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicità e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - [C++/SDL] Collisione con colori
Forum - C/C++ - [C++/SDL] Collisione con colori

Avatar
RiccardoG97 (Member)
Pro


Messaggi: 133
Iscritto: 03/01/2012

Segnala al moderatore
Postato alle 13:18
Sabato, 11/02/2012
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!


"Il sangue ha il sapore del ferro"
PM Quote
Avatar
subazu (Normal User)
Rookie


Messaggi: 35
Iscritto: 06/08/2011

Segnala al moderatore
Postato alle 15:34
Sabato, 11/02/2012
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 il 12/02/2012 alle 9:33


PM Quote
Avatar
RiccardoG97 (Member)
Pro


Messaggi: 133
Iscritto: 03/01/2012

Segnala al moderatore
Postato alle 18:24
Lunedì, 13/02/2012
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.


"Il sangue ha il sapore del ferro"
PM Quote
Avatar
subazu (Normal User)
Rookie


Messaggi: 35
Iscritto: 06/08/2011

Segnala al moderatore
Postato alle 19:22
Lunedì, 13/02/2012
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.
Codice sorgente - presumibilmente C/C++

  1. circle c ; //oggetto cerchio
  2. point p ; //oggetto punto
  3. int d; //distanza
  4.  
  5. d = ((c.x - p.x)^2 + (c.y - p.y)^2)^(1/2) //distanza tra i due punti
  6.  
  7. If d <= c.raggio Then
  8.   collisione = true;
  9. Else
  10.   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:
Codice sorgente - presumibilmente Plain Text

  1. Se ( la palla non sta toccando il colore nero ) allora
  2.      istruzioni
  3. altrimenti
  4.      istruzioni



Quello che invece serve a te è:
Codice sorgente - presumibilmente Plain Text

  1. Se ( la palla non collide con il rettangolo X) allora
  2.      istruzioni
  3. altrimenti
  4.      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 il 13/02/2012 alle 19:32


PM Quote
Avatar
RiccardoG97 (Member)
Pro


Messaggi: 133
Iscritto: 03/01/2012

Segnala al moderatore
Postato alle 16:23
Martedì, 14/02/2012
Ho capito perfettamente ciò che hai detto.. grazie!
Utilizzerò il metodo che mi hai proposto, che mi sembra molto semplice e funzionale. Grazie!


"Il sangue ha il sapore del ferro"
PM Quote