LibGDX - Wie generiert man eine Welt (2D) einmalig?

3 Antworten

Na du hast Ansprüche! Erstelle die Welt doch einfach in der create() Funktion und speichere sie in eine Variable, die du dann in der render() Funktion aufrufst. Fürs sidescrolling berechnest du einfach, ob der screen gefüllt ist, oder ob neue Objekte generiert werden müssen, und wenn dem so ist, generiert du welche und speicherst ihre Positionen, ... Ohne deinen genauen Ansatz zu kennen, kann man da nicht viel mehr sagen.

Ich kann es leider schlecht anders erklären, wenn ich es nun mal so brauche und es kein Tutorial dafür gibt.

Zu meinem "Ablauf" im Code:

Beim Start wird in der create() Methode jede Textur per Assets.load() geladen und danach der Screen gesetzt.

In der Hauptklasse GameScreen passiert dann alles mit Kamera, Renderloop, usw. und es wird in der render()-Methode das batch.begin() Update gestartet, wodurch der erste Screen generiert wird. In dem Fall ist das noch nicht so wichtig, da man nicht direkt im Spiel landet.

Klickt man dann auf ein paar Buttons (irrelevant für das Problem) kommt man zum Start und dort beginnt die Generierung. Den Quellcode will ich jetzt nicht unbedingt hier reinklatschen, der steht allerdings bei meiner vorletzten Frage zu LibGDX:

https://www.gutefrage.net/frage/eclipse-libgdx---wie-kann-man-einmalig-mit-spritebatch-2d-texturen-generieren-die-im-bild-bleiben?foundIn=user-profile-question-listing


Im Endeffekt wird damit also eine zufällige Welt generiert, wo in der Mitte viel Platz ist, in dem sich der Spieler bewegen soll. Jetzt soll ja die Welt so gespeichert werden. Aber WIE speichert man denn bitte sowas in einer Variable?

Ich habe jetzt mal den Code hier in eine neue Methode gelegt und diese in create() aufgerufen. Aber das Spiel startet ja nicht direkt in der Welt, sondern im Hauptmenü. Also wüsste ich gerne, wie man die Welt dann in einer Variable speichern, wenn sie doch zufällig generiert wird.


Ich hoffe, dass das verständlich genug war. Tut mir leid, dass ich mich nicht mit jeden kleinsten Teil auskenne, ich lerne es nun mal gerade erst und es gibt nicht viele gute Tutorials zu LibGDX.
0

Wenn du für den Random generator Java.Random nimmst kannst du einen Sees benutzen. Gleicher Seed heißt dann gleicher output. demnach könntest du als Sees einfach die Uhrzeit nehmen und diese dann speichern. Jedesmal wenn du ein Spiel lädst rufst du die Uhrzeit zu der es erstellt wurde ab und initialisierst damit den Random Generator. Damit sind die random integer immer die gleichen. Andernfalls kannst du einfach die Positionen der Texturen/die Wahrscheinlichkeiten in Variablen schreiben.

0

Schau dir mal lieber den grundlegenden Aufbau eines Spiels an. 

Es ist normal das in jedem frame neu gezeichnet wird nur musst du deine Anordnung der Texturen irgendwo speichern und nicht jedes mal zufällig neu erzeugen 

Das ist mir bewusst, ich bin nicht dumm. Aber es wäre schon hilfreich, wenn hier wenigstens mal Beispiele geliefert werden würden und nicht immer nur Antworten, die mich auf Sachen hinweisen, die man bereits kennt.

Ich hätte gerne mal ein Beispiel, WIE man die Anordnung speichert. Wenn hier jeder nur schreibt, dass ich etwas falsch mache bzw. machen soll, aber nicht mal erklärt, wie, oder eine Hilfe dazu gibt, bringt mir das auch nichts.

Ich würde es also sehr schätzen, wenn ich wenigstens jetzt mal eine zweite Antwort erhalten würde, nicht so wie bei den vorherigen Antworten, wo mir danach nicht weiter geholfen wurde.

0
@xSh4kerx

Ich kann Allw1553nd3r nur zitieren: "Na du hast Ansprüche!"

Dir wurden bereits alle nötigen Hinweise gegeben und trotzdem verlangst du nach Code... willst du überhaupt etwas selbst machen? Es kommt mir eher so vor, als ob du weder Sprache noch Framework in den Grundlagen verstehst und hier ist nicht der Ort, dir all dies beizubringen.

0

Wie bereits gesagt, ich bin nicht dumm. Ich kenne mich sehr wohl mit Java aus, jedoch nicht gerade viel mit LibGDX, weshalb ich es lernen will. Ich weiß ja nicht was du unter Ansprüchen verstehst, aber ich finde es schon hilfreich, wenn zumindest an einem Beispiel erklärt wird, wie man es meint oder lösen könnte. das ist nicht zu viel verlangt. Ich mache sehr gerne alles ohne Hilfe, aber wenn ich bei etwas nicht weiterkomme, weil ich den Code schlicht und einfach nicht weiß, was bei Zusätzen wie LibGDX kein Wunder ist, darf ich ja wohl mal um Hilfe bitten. Und wenn man keine hilfreiche Lösung bringt, komme ich eben auch nicht "alleine" weiter. Wenigstens eine zweite Antwort zu erhalten, nachdem ich auf die Antwort kommentiert habe, kann man doch verlangen.

0
@xSh4kerx

Das Ganze hat wenig mit Libgdx an sich zu tun. Du generierst die Random-Welt, speicherst sie und verwendest die gespeicherten Werte um sie im Render-Loop zu zeichnen. Das würde auch in anderen Frameworks so oder so ähnlich gemacht werden.  

Das Ziel sollte hier auch nicht sein, dass dir der Code geschrieben wird, sonst lernst du sicher nichts, sondern dass dir Tipps gegeben werden, mit deren Hilfe du dir dann die Lösung selbst noch erarbeiten kannst. Das ist ja schließlich der Sinn des Programmierens.  

Also wie hier bereits gesagt wurde solltest du deinen gesamten "Random-Code" in die create-Methode des GameScreens packen und die dort errechneten Random-Werte irgendwie (empfehlenswert wäre ein int[][]) speichern. Im render-loop kannst du diese Werte dann aus dem int[][] lesen und je nach Wert die richtige Textur zeichnen.

0

Brauchst du noch ne Antwort?

Da die Frage genau ein Jahr her ist und ich schon lange mit diesem Projekt aufgehört habe, nicht wirklich.

0

Was möchtest Du wissen?