2013-02-20 10 views

Antwort

25

LibGDX hat ziemlich viele (meist orthogonale) APIs zum Rendern. Ich lerne immer noch viele von ihnen herum, aber ich kann einen Überblick über die verschiedenen Teile geben.

ShapeRenderer können Sie schnell und einfach einfache Polygone und Linien auf dem Bildschirm platzieren. Es ist nicht besonders effizient (es lädt viele Vertex-Daten auf jedem Render). Aber es kann sehr schnell gehen. Es orientiert sich stark an dem Bildschirm (es ist standardmäßig ein orthographisches Projekt auf dem ganzen Bildschirm und seine Einheiten sind in der Regel Pixel). Die Klasse Mesh bietet Ihnen mehr direkte Kontrolle über die Geometrie, aber Sie sind viel mehr Details ausgesetzt (z. B. das Codieren von Farben als Floats und das Speichern von Vertexdaten, Farbdaten und Texturdaten im selben Float-Array) und das Konzept der Index-Arrays).

Die SpriteBatch orientiert sich an "Sprites" (im Allgemeinen rechteckige Bereiche mit einer Textur in ihnen). Dies verbirgt etwas von der Komplexität (und Flexibilität) der Texturierung mit Gittern.

Box2D ist für Physik-Modellierung und ist nicht wie die anderen API-Teile, die Sie erwähnt haben (die hauptsächlich über Rendering sind).

Zum Schluss geht es bei Scene2D hauptsächlich um das Erstellen von animierten Benutzeroberflächenelementen wie Schaltflächen, Listen und Schiebereglern. Aber es ist mächtig genug (und hat genug saubere und flexible Unterstützung für Animationen und Interaktionsereignisse), dass Sie auch eine Menge "Spiel" darin implementieren können.

Sie können auch rohe "OpenGL" -Befehle (siehe GL20) verwenden.

Sie können völlig Mix-and-Match diese verschiedenen Primitiven (ein Nachteil ist, dass Sie in der Regel müssen „spülen“ und „Ende“, was auch immer ShapeRenderer/SpriteBatch/Mesh machen, bevor Sie einen anderen Geschmack starten). So könnten Sie beispielsweise Scene2D für Ihr "Hauptmenü" und einige Meta-Aktionen in Ihrem Spiel verwenden, eine SpriteBatch, um den Kern Ihres Spiels zu rendern, und eine ShapeRenderer verwenden, um Debug-Overlays zu generieren (denken Sie an Begrenzungsrahmen usw.).

Beachten Sie auch, dass die meisten von libGDX auf 2D ausgerichtet ist. Raw OpenGL und die Mesh APIs können auch zum Erstellen von 3D-Objekten verwendet werden.

Überprüfen Sie die gdx-invaders example, um zu sehen, wie es Mesh, OpenGL und SpriteBatch verwendet. (Ich denke, dass dieses Beispiel Scene2d vorausgeht, also gibt es nichts davon ...). Es lohnt sich auch, über die Implementierung dieser Klassen zu schauen, um zu sehen, was sie unter den Covern machen.

+0

Hmm, danke. Jetzt sehe ich die Unterschiede =). Nur eine letzte Frage: Was ist besser für die Kollisionserkennung? Box2D, Intersector oder andere, die ich nicht kenne? –

+1

'Intersector' verfügt über alle Werkzeuge, die Sie für die Kollisionserkennung selbst benötigen. Box2D wird eine Kollisionserkennung durchführen, aber es ist eine komplette 2D-Physiksimulation, also viel mehr. Wenn du Kugeln mit Gegnern (oder Spielern mit Stockwerken) überschneidest, bist du wahrscheinlich besser dran, deine eigenen zu rollen. –

+0

@ P.T.Das eigene Rollen ist vielleicht nicht so einfach, wenn man Kollisionen zwischen N-Kugeln und M-Gegnern kontinuierlich prüfen muss, wenn diese Zahlen nicht klein sind ... und Spielerbewegungen mit Böden und Wänden richtig zu blockieren, ist auch nicht so einfach. –

Verwandte Themen