Hallo Zusammen,
ich habe einen kleinen Sidescroller mit pixelgenauer Kollisionserkennung. Funktioniert tadellos.
Nun stellt sich mir aber die Frage ob das auch auf Dauer die richtige Lösung ist. Ich habe das mal mit 100 Objekten getestet, die von einander abprallen, sah soweit auch gut aus. Allerdings bin ich mir nicht sicher ob meine Methode das gelbe vom Ei ist.
Pseudocode:
|
C#-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
|
//Einlesen der Texturdaten für die Texturen (nach Namen)
Dictionary<String, Color[]> textureData = new Dictionary<string, Color[]>();
private Color[] LoadColorInfo(String imageName, Texture2D image)
{
Color[] imageData = new Color[image.Width * image.Height];
image.GetData(imageData);
textureData.Add(imageName, imageData);
return imageData;
}
//Kollisionsprüfung
bool PixelsCollide(BaseTexture otherTex, out Vector2 collidePoint)
{
bool texturesCollide = TextureCollide(otherTex); //Check ob sich die Texturen berühren (Rectangle Collision)
if(texturesCollide)
if(NichtTransparenter Pixel trifft auf NichtTransparentenPixel) //Verwendung von textureData
return true;
//...
return false;
}
|
Irgendwie gefällt mir das nicht, hier für etliche Texturen die Pixel in einer Schleife zu prüfen ob denn nicht etwas im Weg ist. Wenn ich nach Pixel Kollision suche, kommt meist ein zumindest sehr ähnlicher Ansatz.
Ich wüsste zwar nicht wie, aber gibt es keine bessere Methode? Oder sind meine Bedenken ohnehin unbegründet (weil auch Hobbyprojekt und so).
Wie lösen das andere Spiele? Wenn ich da zB. an Diablo denke wo gefühlte 1000 Geschosse durch die Luft fliegen?