Frage von UbuLin, 28

LibGDX ganzes SpriteBatch verschieben?

Hallo zusammen,

gibt es in LibGDX eine Möglichkeit ein ganzes SpriteBatch mit allem was drauf ist zu verschieben?

Hilfreichste Antwort - ausgezeichnet vom Fragesteller
von Springrbua, 12

Zunächst mal ein kleiner Tipp:

Vergiss die "Pixel". LibGDX ist ein Cross-Platform Game Development Framework, welches es dir ermöglicht den Kern einmal zu programmieren und auf Desktop, Android, iOS und im Web (HTML5) laufen zu lassen. Das heißt, dass das Spiel viele verschiedene Geräte mit sehr unterschiedlichen Auflösungen laufen kann. Wenn das Spiel jedoch auf Pixel aufbaut, dann wird es auf jedem Gerät anders laufen und aussehen.

Verwende stattdessen die Viewports und deine eigene Längeneinheit (z.B: Meter) und lass die Viewports diese in Pixel umrechnen.

Nun zum Thema:

Der SpriteBatch ist eine Art "Renderer", welcher deine Aufrufe von "draw" an die GPU weiterleitet. Er ist nicht dafür gemacht, die Position der zu zeichnenden Objekte zu verändern, sondern leitet das Ganze Blockweise an die GPU weiter.

Zudem ist der SpriteBatch nach jedem Zeichenvorgang wieder Leer, weshalb du das nächste Bild sowieso neu zeichnen musst.

Um das was du möchtest zu erreichen hast du zwei Möglichkeiten:

  1. Verwende Scene2D und die Actions. In Scene2D verwendest du eine "Stage", also eine Bühne, auf welcher deine "Actors" (deine Knöpfe u.s.w.) platziert werden. Diesen Actors kannst du Actions zuweisen, welche sie dann ausführen. Diese Actions sind z.B: "Bewege dich innerhalb von x Sekunden von A nach B", oder "Rotiere innerhalb von x Sekunden einmal und deine eigene Achse". Ich würde dir empfehlen das LibGDX Wiki zu Scene2D und Scene2D UI durchzulesen.
  2. Verwende die Viewports und die Cameras. Deine gesamte Szene wird mithilfe einer Camera gerendert. Wenn du diese bewegst, dann bewegt sich automatisch das gesamte Bild (in die andere Richtung). Dein Menü könnte also an der gleichen Stelle bleiben und nur deine Camera bewegt sich.

LG, Springrbua

Antwort
von UbuLin, 17

Hallo da hab ich mich wahrscheinlich nicht richtig ausgedrückt.

Und zwar gibt es bei diesem Spiel ein Menübutton, wenn man auf diesen klickt soll am besten das Spritebatch auf das ich verschiedene Texturen zeichne z.B. alle 0.01 Sekunden um einen Pixel nach rechts verschoben wird(natürlich sollen die Texturen mit verschoben werden). Auf jedenfall soll am Ende so eine wisch Animation entstehen, mit der man wieder ins Menü gelangt.

Ich hoffe dieses mal hab ich es besser erklärt!

LG UbuLin :) 

Antwort
von XVirusX, 15

Addiere zu den x-Werten vom Rendern bei jeder Textur eine Variable und erhöhe sie im Loop wenn ein boolean true ist. Hier ist ein Beispie!, du musst da einfach "shouldTransition" auf true setzen.

boolean shouldTransition = false;
short move = 0;

void render(float delta){

if(Gdx.input.isTouched(){
shouldTransition = true;
}

if(shouldTransition){
move+=1;
if(move >= Gdx.graphics.getHeight()){
shouldTransition = false;
Game.setScreen(new GameScreen());
}
}

batch.begin();
batch.draw(texture, 60+move, 400, 100, 100);
batch.draw(llamatexture, 120+move, 300, 100, 100);
batch.end();

Antwort
von Springrbua, 18

Ich würde dir gerne helfen, hab aber nicht ganz verstanden, was das Problem ist bzw. was du mit verschieben meinst...

Könntest du bitte dein Problem genauer beschreiben, also was du machen möchtest und warum du das machen möchtest?

Antwort
von UbuLin, 8

Ok vielen Dank für die Antworten :D

Springrbua wie greift man auf die Camera zu, oder muss man noch eine neue erstellen? Und kann man sagen das sie nur auf ein bestimmtest Spritebatch gucken soll?

LG UbuLin :)

Kommentar von Springrbua ,

Ich würde dir Vorschlagen eine neue Frage bezüglich der Camera zu stellen. Somit haben auch andere die Möglichkeit dir darauf zu antworten.

Keine passende Antwort gefunden?

Fragen Sie die Community