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# / VB.NET - [Vb.net] Controllo collisioni lista oggetti
Forum - C# / VB.NET - [Vb.net] Controllo collisioni lista oggetti

Avatar
Garu (Normal User)
Newbie


Messaggi: 13
Iscritto: 02/08/2011

Segnala al moderatore
Postato alle 14:38
Domenica, 30/10/2011
Questo topic è stato chiuso dal moderatore

Salve a tutti, sto creando un piccolo sparatutto, per far muovere gli oggetti e i proiettili (ambedue creati dinamicamente) ho creato due liste (dim xxx as list of ...). Il problema è il seguente: Come posso confrontare velocemente se un elemento della prima tocca un elemento della seconda ?

Codice sorgente - presumibilmente C# / VB.NET

  1. If qualsiasioggetto1.Bounds.IntersectsWith(qualsiasioggetto2.Bounds) Then ....


Ultima modifica effettuata da Garu il 30/10/2011 alle 14:47
PM
Avatar
GN (Member)
Guru


Messaggi: 770
Iscritto: 30/04/2011

Up
1
Down
V
Segnala al moderatore
Postato alle 19:34
Lunedì, 31/10/2011
Ci vogliono due for, però se gli oggetti sono tanti il programma rischia di rallentare.
Prova così:
Codice sorgente - presumibilmente VB.NET

  1. For Each obj1 As PictureBox In List1
  2.   For Each obj2 As PictureBox In List2
  3.     If obj1.Bounds.IntersectsWith(obj2.Bounds) Then
  4.       'c'è collisione
  5.     End If
  6.   Next
  7. Next


Grazie mille, ora sembra funzionare, però sorge un altro problema: una volta che X va in contatto con un altro oggetto viene cancellato, quindi l'insieme degli oggetti viene modificato e genera un eccezione nel for. - Garu - 01/11/11 10:46
Nulla, già risolto ;) grazie ancora - Garu - 01/11/11 11:00


PM
Avatar
walker93 (Member)
Expert


Messaggi: 460
Iscritto: 31/01/2010

Up
1
Down
V
Segnala al moderatore
Postato alle 18:29
Domenica, 30/10/2011
Ti rimando a questa guida in cui è spiegato tutto...Presenta diversi metodi semplici e avanzati.

http://vincedx.altervista.org/Lessons.php?id=149&from=0

Grazie ma non uso le directX ma delle semplici picturebox, il problema non era controllare se due oggetti collidevano ma era leggere tutti gli oggetti da due liste e controllare un eventuale collisione in maniera veloce. - Garu - 30/10/11 19:49


Il software è come il sesso, è meglio quando è libero.
Linus Torvalds, Conferenza della Free Software Foundation, 1996 (attribuito)

Non provare mai a spiegare il computer a un profano. È più facile spiegare il sesso a una vergine.
Robert Anson Heinle
PM
Avatar
Il Totem (Admin)
Guru^2


Messaggi: 3635
Iscritto: 24/01/2006

Up
1
Down
V
Segnala al moderatore
Postato alle 11:27
Lunedì, 31/10/2011
Esegui il test per ogni elemento della prima e per ogni elemento della seconda...

Ho provato con un for, ma ovviamente non funzionava poichè controllava il primo con il primo, il secondo e via così, non c'è un metodo più veloce per provare tutte le possibilità ? - Garu - 31/10/11 15:19
Semplicemente hai sbagliato a scrivere il for. Ti consiglio di pensarci su almeno qualche secondo prima di partire a scrivere. La soluzione è banale e richiede solo qualche considerazione come quella che hai appena fatto... - Il Totem - 01/11/11 16:53


"Infelici sono quelli che hanno tanto cervello da vedere la loro stupidità."
(Fligende Blatter)

"Dubitare di se stessi è il primo segno d'intelligenza."
(Ugo Ojetti)
PM