Große Welt bewegen?

Helgon

Bekanntes Mitglied
Hey, seit paar Tagen komm ich irgendwie nicht voran.

Ich hab mich mal mit dem Tutorial von Quaxli auseinander gesetzt und lust bekommen ein wenig rum zu probieren (hab vorher noch nix in die Richtung gemacht)

Ich weis nicht wie ich folgendes umsetzen soll.

Hat man ein Side-Scrolling Game, so kann sich die Figur auf der Welt bewegen oder die Figur bleibt immer an der genau selben Position, aber die Welt verschiebt sich.

Ich möchte von der Idee her etwas wie Terraria umsetzen (ansatzweise :)). Wems nix sagt, ist ne art Minecraft in 2D.

Also hab ich sagen wir 100.000 32x32 große BufferedImages die schon gezeichnet werden müssen.

Aufs ein 800x600 Frame passen eben also 25x19 = 475 Bilder.

Also dacht ich mir, das ist ja easy peasy möglich, also hab ich irgendwo eine Datenstruktur die die Welt beinhält und immer nur den teil reinlädt, der grad notwendig ist, aber bei bswp: 100.000 Items irgendwie 25 raus zu suchen oder immer durch zu iterieren geht ja nicht (performance).

Dann könnte man die 100.000 ja auch wieder splitten auf ka wieviele, sagen 100 á 1000 was ja schon recht schnell durchläuft, aber das erscheint mir "unsauber".

Gibts dafür irgendwie ne Lösung die bei solchen spielen meistens verwendet wird, oder habt ihr nen Denkansatz, oder ne Idee?

Grüße
 

Cola_Colin

Top Contributor
Denke ein Quadtree würde sich dafür eignen. Gerade wenn die meisten der Objekte statisch sind.
Ist ja im Prinzip eine Art Kollisionserkennung zwischen dem Sichtfeld und den Spielobjekten, die du da brauchst.
 

Helgon

Bekanntes Mitglied
Wow, das sieht sehr nach einer extrem effizienten Lösung aus, jetzt die Frage ob ich das umgesetzt kriege :)

Ich werde mir mal paar Beispiele und Implementierungen anschauen und dann nochmal posten.

Auf jeden Fall schon mal vielen Dank! :D
 

Marco13

Top Contributor
Was der Quadtree da bewirken soll ist mir nicht ganz klar. Wenn man weiß, wo der Spieler sich befindet, dann kennt man doch genau die Tiles, die angezeigt werden müssen? Da muss man doch nichts mehr "rausfinden" (im Sinne einer Kollisionserkennung...) !? ???:L
 
V

vanny

Gast
Du hast ja sowas wie nen ViewPort(); und kannst dann ganz genau bestimmen wo dieser anfängt.

quasi sowas wie: ...viewPort(x, y, width, height); ... beschreibt das Rechteck, welches du siehst und demnach auch zeichnest.

Gruß Vanny
 

Marco13

Top Contributor
Also dacht ich mir, das ist ja easy peasy möglich, also hab ich irgendwo eine Datenstruktur die die Welt beinhält und immer nur den teil reinlädt, der grad notwendig ist, aber bei bswp: 100.000 Items irgendwie 25 raus zu suchen oder immer durch zu iterieren geht ja nicht (performance).

Der Teil ist mir nicht ganz klar. Hast du irgendwo irgendwie sowas wie
Java:
interface World
{
    Tile getTile(int x, int y);
}
oder einen Viewport, wie vanny angedeutet hat? Zielt die Frage darauf ab, dass du nicht 100000 Tiles im Speicher halten willst?
 

Cola_Colin

Top Contributor
Ich würde sagen, er hat eine Liste mit 100000 Sprites(den Tiles) und will nun nur die bearbeiten/zeichnen/whatever, die sichtbar sind, also die, die sich im Sichtfeld befinden.
 

Helgon

Bekanntes Mitglied
War mein erster Ansatz Colin und so meinte ich es ursprünglich.

Je länger ich über alles nachdenke, desto mehr Kopfschmerzen krieg ich ;(

Hab mich noch nie damit auseinander gesetzt und hatte deswegen paar Brainlaags, alles mögliche probiert und jetzt eben mich drauf festgelegt (auch durch den Denkanstoß), dass ich wohl ein ViewPort haben werde, den man bewegt.

Wie genau ich das Umsetz weis ich noch nicht so genau, mal schaun. Das Problem ist eben, dass ich nicht die ganze Zeit alle Elemente angezeigt lassen kann, weils einfach zu viele sind.



P.S.: Kennt ihr das, man will was fürs Forum formulieren (eine Frage) und hat dabei ne Erleuchtung oder ne Idee, passiert mir hier sau oft :D

Edit2: Ich glaub, ich muss mich nochmal in diese ganze verschiebe/Zeichne Logik rein versetzen. Wenn ich dann konkret ne Frage hab, stell ich sie nochmal.

Weitere Anregungen sind aber auch nicht verkehrt :)
 
Zuletzt bearbeitet:

Cola_Colin

Top Contributor
Ich habe mal was ähnliches umgesetzt, was in etwa nach der Technik arbeitete, die Quaxli glaube ich auch beschreibt. Einen Viewport habe ich da ganz einfach mit dem dem translate von Graphics und setclip von graphics sowie einem simplen Test ob ein Sprite im sichtbaren Rechteck ist gemacht. Zumindest mit einigen hundert bis tausend Tiles lief das durchaus sehr zufriedenstellend. Bei 100k Tiles wäre ein Quadtree definitiv eine Möglichkeit schnell zu bestimmen, welcher Teil der statischen Spielwelt gerade im Blickfeld ist.

Kennt ihr das, man will was fürs Forum formulieren (eine Frage) und hat dabei ne Erleuchtung oder ne Idee, passiert mir hier sau oft

Ich glaube ich habe schon häufiger ein Topic eröffnen wollen und am Ende die Seite nach dem Schreiben der Problembeschreibung geschlossen, ohne das Topic zu öffnen als ich eines wirklich eröffnet habe.
 

Helgon

Bekanntes Mitglied
Ja, ich habs auch erst mit der Technik von Quaxli probiert und da gehts tatsächlich sogar bis 25k (ohne große logik) sehr gut, aber sobald da logik und vllt mehrer schichten drüber kommen wäre ende.

Graphics2D kannt ich noch gar nicht, grad in die docs geguckt und sieht nett aus. Muss es mir mal genauer anschauen.

An sowas wie den quadtree hab ich jetzt auch gedacht, zwar nicht ganz, aber etwas in die Richtung.
 
V

vanny

Gast
wenn es darum geht, nicht alle Tiles im Speicher zu halten, dann Puffern, Abarbeiten und Rausschmeissen.
Geht natürlich nur, wenn du deine Welt in eine Art Sektoren aufteilen kannst.

Wenn 25K gut laufen und du im ViewPort um die 500 Darstellst, sollte sich da doch etwas machen lassen oder !?

Gruß Vanny

[EDIT]Schlafengehn hilft aber manchmal auch xD[/EDIT]
 
Zuletzt bearbeitet von einem Moderator:

Helgon

Bekanntes Mitglied
Das Problem ist irgendwie, dass ichs nicht hinkrieg nur die 500 darzustellen die notwending sind.

Ich hab Ferien, ich geh um 6 pennen und steh um 13.00 auf, mein Rhythmus istn bisschen durcheinander, aber bei mir ist es jetzt "früher Abend" :D
 

Marco13

Top Contributor

Gossi

Bekanntes Mitglied
Nur mal so als kleiner Denkanstoß:

Du hast 100.000 Felder:

Nun nimmst du z.B. 50 Felder für die Höhe (beim Springen oder Klettern) und die Restlichen 2.000 für die Breite.


Dein Charackter hat nun die Koordinate 20:400, nun musst du die Felder von (x-(breite/2)):(y-(weite/2)) bis (x+(breite/2)):(y+(weite/2)) laden.

Wenn du nun nen Zweidimensionales Array hast ([50][2000]) kannst du so die passenden Einträge zeichnen.
 
V

vanny

Gast
Das Problem ist irgendwie, dass ichs nicht hinkrieg nur die 500 darzustellen die notwending sind....

Dann bastel dir nen ViewPort ähnlich wie bei der JScrollPane.

JScrollPane-1.gif
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
Helgon Große Map aus Pixelfarben Spiele- und Multimedia-Programmierung 7
C Java für große Spiele geeignet ? Spiele- und Multimedia-Programmierung 101
Lulumann6 große Map Spiele- und Multimedia-Programmierung 2
A Werden "große Spiele" mal in Java programmiert? Spiele- und Multimedia-Programmierung 43
H Große Spiele in welcher Sprache Spiele- und Multimedia-Programmierung 33
F Spigot 1.14 Minecraft Welt file löschen Spiele- und Multimedia-Programmierung 6
G [Game-Multiplayer] Welt vom Server zum Client senden. Spiele- und Multimedia-Programmierung 0
M Welt möglichst effizient malen... Spiele- und Multimedia-Programmierung 7
Devil0s 2D Stadt Generator/2D Welt speichern OHNE Tiles Spiele- und Multimedia-Programmierung 5
D 3ds max dateien in java einbinden, 3d welt Spiele- und Multimedia-Programmierung 9
0 2D Spiel Welt scrollen bzw Image erweitern Spiele- und Multimedia-Programmierung 2
c_sidi90 Lösungsansatz in 2D Welt über die Border hinaus Spiele- und Multimedia-Programmierung 10
G 2D Welt bewegen Spiele- und Multimedia-Programmierung 20
D 3D Welt und Eingabe Spiele- und Multimedia-Programmierung 5
T RPG-Welt Design Spiele- und Multimedia-Programmierung 4
Z Schach Figuren bewegen Spiele- und Multimedia-Programmierung 4
B Spieler auf besonderer Bahn bewegen Spiele- und Multimedia-Programmierung 1
M Minecraft Spieler move/run (bewegen) Spiele- und Multimedia-Programmierung 0
D Java Bild bewegen funktioniert nicht Spiele- und Multimedia-Programmierung 8
A Spiel Figur ansprechen und bewegen Spiele- und Multimedia-Programmierung 3
G Auf einem Stick bewegen Spiele- und Multimedia-Programmierung 5
astro151 JButtons mit Mausklicks bewegen Spiele- und Multimedia-Programmierung 2
M bewegen eines Objektes Spiele- und Multimedia-Programmierung 2
L JavaFX Objekte bewegen Spiele- und Multimedia-Programmierung 3
M Kamera "am Rande einer Kugel bewegen" Spiele- und Multimedia-Programmierung 4
O Fehler bei Programmierung lässt Figur nicht bewegen Spiele- und Multimedia-Programmierung 5
javampir Lange Hintergrundgrafik einfügen und bewegen Spiele- und Multimedia-Programmierung 3
D Problem beim bewegen einer Figur Spiele- und Multimedia-Programmierung 2
R Canvas Circle bewegen? Spiele- und Multimedia-Programmierung 14
K auf Mapraster frei bewegen Spiele- und Multimedia-Programmierung 7
T Android OpenGL Bewegen Spiele- und Multimedia-Programmierung 5
K Zum Ziel bewegen Spiele- und Multimedia-Programmierung 4
A Wie wird die Person im Game animiert, dass sie ihre Körperteile bewegen? Spiele- und Multimedia-Programmierung 3
V Jogl: Objekt trotz Rotation immer in gleiche Richtung bewegen Spiele- und Multimedia-Programmierung 5
M Figur bewegen Spiele- und Multimedia-Programmierung 7
F RPG - Spielfigur soll sich nicht frei bewegen können. Anregugen wären gerne gesehen^^ Spiele- und Multimedia-Programmierung 13
N Objekt entgegengesetzt bewegen Spiele- und Multimedia-Programmierung 8
D Sprite zur Maus bewegen Spiele- und Multimedia-Programmierung 9
S Mehrere Steine gleichzeitig setzen und bewegen Spiele- und Multimedia-Programmierung 4
V Java3D: automatisches Bewegen der Kamera Spiele- und Multimedia-Programmierung 19
2 Kugel bewegen? Spiele- und Multimedia-Programmierung 17
L Figur soll sich selbständig Bewegen Spiele- und Multimedia-Programmierung 12
G Zeichnung mit der Maus bewegen Spiele- und Multimedia-Programmierung 3
R Teilgraphen bewegen Spiele- und Multimedia-Programmierung 5
H mit Java2D Markierung über JTable zeichnen und diese bewegen Spiele- und Multimedia-Programmierung 2
A Bilder bewegen Spiele- und Multimedia-Programmierung 2
Z Obejkt drehen & vorwärts bewegen Spiele- und Multimedia-Programmierung 9
D nicht 4-eckiges bild auf Hintergrund bewegen Spiele- und Multimedia-Programmierung 2
G Bewegen von Objekten Spiele- und Multimedia-Programmierung 4
B Hilfe gesucht!! (bewegen von grafischen Objekten) Spiele- und Multimedia-Programmierung 3

Ähnliche Java Themen

Neue Themen


Oben