Hallo,
Ich programmiere gerade ein 2D Spiel.
Bisher hab ich ein 2-Dimensionales Array genommen und dort alles gespeichert:
0: frei
1: Landschaft
1000: Flugzeug 1
2000: FLugzeug 2
1xxx: Geschosse etc. von Flugzeug 1
2xxx: Geschosse etc. von Flugzeug 2
So konnte ich auch wunderbar eine Kollisionserkennung machen, einfach Pixelweise abgefragt ob an einer bestimmten Stelle etwas ist und dementsprechend was es ist reagiert.
Die Flugzeuge, Landschaft etc. existierten auch nur als Sammlung von Koordinaten, sprich jedes Pixel wurde einzeln gezeichent.
Leider wird das langsam zu rechenintensiv, vor allem das Zeichnen der einzelnen Pixel kostet viel Zeit.
Ich habe sowohl hier im Forum als auch in einigen Tutorials gelesen das in der Regel Bilder verwendet werden und dann mit getBounds() und intersects() geprüft wird ob es Überschneidungen gibt.
Bilder würde mir auch besser gefallen, jedes einzelne Pixel zu erstellen wird mit der Zeit echt nervig und sieht nicht so gut aus wie ein Bild.
Flugzeuge, Geschosse und vor allem die Landschaft sind aber nunmal nicht rechteckig, d.h. diese Art von Kollisionserkennung ist viel zu ungenau.
Ich habe schon ein paarmal gelesen das man die Pixel des Bildes einzeln vergleichen kann und nur wenn 2 nicht-transparente Pixel überlappen ist es eine Kollision. Wie das funktioniert hab ich aber noch nicht gesehen und ich denke das dürfte auch sehr rechenintensiv sein, oder?
Zumindest bräuchte ich ein Rectangle das die Fläche der Überschneidung entspricht damit ich mich auf einen Teil der Pixel beschränken kann, vielleicht könnte man auch nur 3x3 Blocks aus Pixeln vergleichen oder so?!?
Lange Rede kurzer Sinn:
Wie bekomme ich eine vernünftige Kollisionserkennung (so auf 3-5 Pixel genau sollte es schon sein) hin die nicht zu rechenintensiv ist?
mfg
Nova
Ich programmiere gerade ein 2D Spiel.
Bisher hab ich ein 2-Dimensionales Array genommen und dort alles gespeichert:
0: frei
1: Landschaft
1000: Flugzeug 1
2000: FLugzeug 2
1xxx: Geschosse etc. von Flugzeug 1
2xxx: Geschosse etc. von Flugzeug 2
So konnte ich auch wunderbar eine Kollisionserkennung machen, einfach Pixelweise abgefragt ob an einer bestimmten Stelle etwas ist und dementsprechend was es ist reagiert.
Die Flugzeuge, Landschaft etc. existierten auch nur als Sammlung von Koordinaten, sprich jedes Pixel wurde einzeln gezeichent.
Leider wird das langsam zu rechenintensiv, vor allem das Zeichnen der einzelnen Pixel kostet viel Zeit.
Ich habe sowohl hier im Forum als auch in einigen Tutorials gelesen das in der Regel Bilder verwendet werden und dann mit getBounds() und intersects() geprüft wird ob es Überschneidungen gibt.
Bilder würde mir auch besser gefallen, jedes einzelne Pixel zu erstellen wird mit der Zeit echt nervig und sieht nicht so gut aus wie ein Bild.
Flugzeuge, Geschosse und vor allem die Landschaft sind aber nunmal nicht rechteckig, d.h. diese Art von Kollisionserkennung ist viel zu ungenau.
Ich habe schon ein paarmal gelesen das man die Pixel des Bildes einzeln vergleichen kann und nur wenn 2 nicht-transparente Pixel überlappen ist es eine Kollision. Wie das funktioniert hab ich aber noch nicht gesehen und ich denke das dürfte auch sehr rechenintensiv sein, oder?
Zumindest bräuchte ich ein Rectangle das die Fläche der Überschneidung entspricht damit ich mich auf einen Teil der Pixel beschränken kann, vielleicht könnte man auch nur 3x3 Blocks aus Pixeln vergleichen oder so?!?
Lange Rede kurzer Sinn:
Wie bekomme ich eine vernünftige Kollisionserkennung (so auf 3-5 Pixel genau sollte es schon sein) hin die nicht zu rechenintensiv ist?
mfg
Nova