Visualizzazione dei risultati da 1 a 5 su 5
  1. #1
    Utente di HTML.it L'avatar di cerza
    Registrato dal
    Oct 2009
    Messaggi
    310

    [OPENGL] gestione collisioni

    Salve,
    avrei bisogno di gestire le collisioni tra una pallina ed un mattoncino in opengl, solo che riesco a gestire la collisione del bordo inferiore, superiore, sx e dx ma quando la pallina tocca il mattone dall'angolo la collisione non viene rilevata e quindi attraversa il mattone....
    qualcuno sa dirmi come fare

    grazie in anticipo e buone feste a tutti

    Maria

  2. #2
    Moderatore di Programmazione L'avatar di alka
    Registrato dal
    Oct 2001
    residenza
    Reggio Emilia
    Messaggi
    24,282

    Moderazione

    Qual è il linguaggio di riferimento?
    E' obbligatorio indicarlo, come da Regolamento.
    MARCO BREVEGLIERI
    Software and Web Developer, Teacher and Consultant

    Home | Blog | Delphi Podcast | Twitch | Altro...

  3. #3
    Utente di HTML.it L'avatar di cerza
    Registrato dal
    Oct 2009
    Messaggi
    310
    si mi scuso in effetto non ho indicato il linguaggio....stò utilizzando c++.
    grazie

    maria

  4. #4
    Secondo me è un problema di OR e AND nella funzione che utilizzi per controllare se c'è una collisione tra i due oggetti. Puoi incollare la parte del codice che gestisce la collisione?

  5. #5
    Utente di HTML.it L'avatar di cerza
    Registrato dal
    Oct 2009
    Messaggi
    310
    grazie mille per aver risposto, il codice è il seguente dove yposball e xposball sn le coordinate del centro della pallina e matrice contiene i valori di un angolo del mattone dal quale sono stati ricavati tutti gli altri.

    codice:
    		//Caso in cui la palla tocca il mattone dal basso
    			if(yposball + raggio == matrice[i][1]){
    				//printf("yposball + raggio = y blocco basso - ");
    
    				//Facendo xposball + raggio i due angoli dovebbero essere inclusi
    				if((xposball+raggio >= matrice[i][0] && xposball+raggio <= matrice[i][0]+40) ||
    						(xposball-raggio >= matrice[i][0] && xposball-raggio <= matrice[i][0]+40)){
    					//Scontro dal Basso
    					changeColor(i);
    					//dy= RangedRand(-2,-1);
    					dy = -1;
    					printf("a. Scontro dal basso su mattone %d\n", i);
    				}
    			}//fine if controllo basso 
    			
    			//Caso in cui la palla tocca il mattone dall'alto
    			if(yposball - raggio == matrice[i][1]+10){
    				if((xposball+raggio >= matrice[i][0] && xposball+raggio <= matrice[i][0]+40) ||
    						(xposball-raggio >= matrice[i][0] && xposball-raggio <= matrice[i][0]+40)){
    				changeColor(i);
    				//dy = RangedRand(1,2);
    				dy=1;
    				printf ("b. Scontro dall'alto su mattone %d\n", i);
    				}
    			}//fine if controllo dall'alto
    			
    			//Caso in cui la palla tocca il mattone dal lato sinistro 
    			if(yposball >= matrice[i][1] && yposball <= matrice[i][1]+10){
    				printf ("e. SINISTRO su mattone %d \n", i);
    				if(xposball + raggio == matrice[i][0]){
    				//changeColor(i);
    					dy = -1;
    				printf ("c. Scontro dal lato sinistro del mattone e cambio direzione %d\n", i);
    				}
    			}//fine if lato sinistro
    
    
    			//Caso in cui la palla tocca il mattone dal lato destro 
    			if(yposball >= matrice[i][1] && yposball <= matrice[i][1]+10){
    				printf ("e. DESTRO su mattone %d \n",i);
    				if(xposball - raggio == matrice[i][0]+40){				
    				//changeColor(i);
    					dy = -1;
    				printf ("d. Scontro dal lato destro del mattone e cambio direzione %d\n", i);
    				}
    			
    			}

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.