Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
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
If qualsiasioggetto1.Bounds.IntersectsWith(qualsiasioggetto2.Bounds) Then ....
Ultima modifica effettuata da Garu il 30/10/2011 alle 14:47
Ci vogliono due for, però se gli oggetti sono tanti il programma rischia di rallentare.
Prova così:
Codice sorgente - presumibilmente VB.NET
ForEach obj1 As PictureBox In List1
ForEach obj2 As PictureBox In List2
If obj1.Bounds.IntersectsWith(obj2.Bounds)Then
'c'è collisione
EndIf
Next
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
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
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