Zeichnen gekrümmte benutzerdefinierte Objekt in LIBGDX?

8

Ich habe LibGDX in letzter Zeit angeschaut und habe eine Wand getroffen, wie auf dem Bild zu sehen ist. Der blaue Punkt repräsentiert den Finger des Benutzers, die Kartengenerierung selbst ist wo ich zu stecken scheint, bietet LibGDX eine Methode dynamisch gebogene Objekte zeichnen? Ich könnte sie einfach selbst als Bilder erzeugen, aber dann ist das Bild bis zum Punkt der Lücke riesig gestreckt, damit der Finger 3 passt! Aber auch 1000er PX müssten groß sein, um das ganze Leveldesign unterzubringen.

Ist es so, dass ich Hunderte von Polygonen nahe beieinander zeichnen sollte, um eine gekrümmte Linie zu erhalten? Auf einer Seite nicht, ich brauche eine Möglichkeit zu bestimmen, wann das Objekt von unten nach oben hat, so kann ich einen anderen "Chunk" der Karte generieren.

    
Broak 26.02.2014, 09:59
quelle

2 Antworten

1

Sie brauchen nicht Hunderte von Polygonen, um eine Kurve zu erstellen, wie Sie gezeichnet haben. Sie könnten mit 40 Quads auf der linken und 40 auf der rechten Seite kommen, und es würde ziemlich glatt aussehen. Erhöhe das auf 100 auf jeder Seite und es wird fast perfekt glatt aussehen, und kein modernes Gerät wird Probleme haben, das mit 60 fps auszuführen.

Sie können die Mesh-Klasse verwenden, um für jede Seite ein prozedurales Mesh zu generieren. Sie können das Netz an einer Stelle halten, an der Kamera festhalten und seine Scheitelpunkte und UVs so ändern, dass es so aussieht, als würden Sie einen unendlich langen Korridor schwenken. Dies wird eine Menge Mathe im Voraus erfordern, aber sollte glatt segeln, sobald Sie das haben.

Grundsätzlich kann Ihr Leveldesign auf einer Art von Gleichung basieren, die Y-Offset als Eingabe verwendet. Oder es könnte eine lange Reihe von Offsets sein, und Sie könnten eine Spline-Gleichung oder eine lineare Gleichung verwenden, um zwischen ihnen zu interpolieren. Die Ausgabe würde die UV- und X-Koordinaten sein, die verwendet werden können, um jeden der Eckpunkte Ihrer zwei Netze zu aktualisieren.

Sie können den Vertex-Shader verwenden, um die UV-Koordinaten effizient zu aktualisieren, indem Sie einen konstanten Offset-Uniform-Parameter verwenden, den Sie für jeden Frame aktualisieren. Auf diese Weise müssen Sie die UV-Daten nicht für jeden Frame auf die GPU übertragen.

Für die Eckpunktpositionen verwenden Sie den zugrundeliegenden float[] des Mesh und den% code%% jedes Rahmens, um ihn zu aktualisieren. Info hier .

Eigentlich könnte es besser aussehen, wenn Sie die UV- und die X-Position alleine lassen und nur die Y-Positionen nach oben scrollen. Halten Sie ein paar Quads Padding oben und unten auf dem Bildschirm, und verschieben Sie einfach das oberste Quad nach unten, nachdem es vom Bildschirm scrollt.

    
Tenfour04 27.02.2014 18:42
quelle
0

Wie wäre es mit einer Reihe von gekrümmten Formen, die variabel zusammengestellt werden können? Wie die Lücke in der Mitte wird am oberen und unteren Ende jedes Bildes in der Mitte sein (mit der gleichen Krümmung am Ende und Anfangspunkte) ... Und zwischen den Start- und Endpunkten kann man auf die Form verrückt werden.

Und schließlich können Sie diese Bilder beliebig zusammensetzen und eine endlose Welt erschaffen.

Wenn Sie nicht jedes Mal in der Mitte anhalten möchten, können Sie auch drei Ein- und Ausstiegspunkte haben (links, Mitte, rechts) ... und nach einem Bild, das links endet, müssen Sie natürlich auch füge ein Bild hinzu, das links beginnt, aber möglicherweise an einer anderen Stelle endet ...

    
evident 26.02.2014 21:15
quelle

Tags und Links