2016-07-19 19 views
1

Ich habe vor kurzem mit der Arbeit an einem 2d Jump'n'Run in Java begonnen, und stelle eine Frage zur Leistung.Java Jump'n'Run Spiel Leistung

In meinem Spiel habe ich eine Welt (relativ klein für jetzt).

Aber mehr als die Hälfte der Welt ist nicht sichtbar für die Kamera des Spielers, aber ich male immer noch die ganze Welt (auch die unsichtbaren Teile).

Hier ist, was ich gerade mache.

Die Frage ist also, wäre es schneller mit einer if-Anweisung zu überprüfen, ob es auf dem Bildschirm vor dem Malen?

Antwort

1

Ja.

Eine Überprüfung, ob es auf einem Bildschirm angezeigt wird, sollte nicht mehr als 1 oder 2 Schritte dauern.

Um alles zu malen, müssen Sie jedes einzelne Pixel auf dem Bildschirm zeichnen, unabhängig davon, ob es verwendet wird oder nicht.

1

Wenn gameObject.paint(g); viele Zeichenaufrufe beinhaltet, würde wahrscheinlich die Verzweigung (Überprüfung) mehr Arbeit als es kostet sparen. Wenn es nur wie ein Zeichenaufruf ist, ein Sprite zu zeichnen, würde Ihre Bibliothek eine solche Überprüfung bereits durchführen, um Pufferüberläufe zu vermeiden, und Ihre wäre überflüssig.

Das heißt, wenn Sie anfangen, Leistungsprobleme hier zu begegnen, dann empfehle ich, eine Art von Datenstruktur zu verwenden. Ein einfacher ist ein Gitter, wie so:

enter image description here

Wenn Ihre Elemente verschieben, entfernen Sie sie aus den Gitterzellen die sie besetzen, und legen Sie sie auf die neue (n) sie belegen. Das sollte nur einige wenige Ganzzahlen manipulieren, wenn Sie dies effizient implementieren.

Wenn Sie dann Elemente auf dem Bildschirm zeichnen möchten, zeichnen Sie nur die Elemente in den Rasterzellen, die sich überlappen. Das verhindert, dass Sie jedes einzelne Element in der Spielwelt durchlaufen. Dies ist auch praktisch, wenn Sie eine beschleunigte Kollisionserkennung benötigen.

Ein Quad-Tree ist zwar eine etwas teurere Alternative, bietet aber eine bessere Suchqualität, wenn die Elemente in Ihrem Spiel nur spärlich verteilt sind.