zerstörbare 2D Umgebung

Design Patterns, Erklärungen zu Algorithmen, Optimierung, Softwarearchitektur
Forumsregeln
Wenn das Problem mit einer Programmiersprache direkt zusammenhängt, bitte HIER posten.
Antworten
Run
Beiträge: 6
Registriert: 27.08.2013, 10:29

zerstörbare 2D Umgebung

Beitrag von Run »

Hi, lange ist es her wo ich hier mal auf zfx gelesen hab.
Ich brauche mal paar Tipps, hab endlich zeit nebenbei was für mich zu proggen,
es wird natürlich ein kleines Spiel.

Was ich brauche sind Tipps, wie ich eine zerstörbare Umgebung baue, sowas wie worms2D nur nicht von der Seite, sondern von oben um z.B. mit panzern alles kaputtzuschiessen

später kriegt das Game evtl. eine Voxelengine, aber erste Schritte sind in 2D,
also wonach muss ich googlen? sonst nehme ich einen 2D Array für die Pixel,
ich will aber gleich das Optimum was Performance angeht
(Spiel wird in Java geschrieben)

danke
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: zerstörbare 2D Umgebung

Beitrag von Artificial Mind »

Hallo und Willkommen bei ZFX!

Also ich habe ziemlich gute Erfahrung mit Marching Squares gemacht.
Ist auch für Einsteiger leicht zu verstehen und zu implementieren.

Zur Performance: wir haben für den vorletzten Ludum Dare soetwas in Java geschrieben was auf einem 1024 x 256 Grid noch flüssig auf einem Handy lief. Und das ohne starke Optimierung.
Run
Beiträge: 6
Registriert: 27.08.2013, 10:29

Re: zerstörbare 2D Umgebung

Beitrag von Run »

danke, werds mir mal anschauen.
Hab noch was über QuadTree gefunden, wäre es auch ein möglicher Ansatz? glaub Voxel haben OctTree im Hintergrund

wäre also später leichter Umbau von 2D nach 3D, wobei es mir egal ist wieviele Zwischenschritte ich bei der Entwicklung einlegen muss ;)
Benutzeravatar
Artificial Mind
Establishment
Beiträge: 802
Registriert: 17.12.2007, 17:51
Wohnort: Aachen

Re: zerstörbare 2D Umgebung

Beitrag von Artificial Mind »

Quadtrees sind hauptsächlich die Art und Weise wie du das Gitter von Punkten speicherst. Insbesondere wenn man nachher super-große Welten hat, macht ein Quadtree/Octree Sinn, die sind allerdings nicht zu unterschätzender Mehraufwand bei der Implementierung.

Also: Selbst mit einem Quadtree musst du noch die Oberfläche extrahieren, z. B. über Marching Squares. In 3D Marching Cubes, Dual Contouring, und Derivate.

Vielleicht kann man das so ganz gut beschreiben:
1. Du suchst dir eine Darstellung der Daten aus (also einfaches Gitter, Quadtree/Octree, Chunks oder Kombinationen)
2. Du extrahierst die Geometrie aus deinen Daten (Marching Squares/Cubes, Dual Contouring, usw.)

Das Gelände zerstören kannst du, indem du die Daten veränderst und dann die Geometrie neu extrahierst.
Run
Beiträge: 6
Registriert: 27.08.2013, 10:29

Re: zerstörbare 2D Umgebung

Beitrag von Run »

nochmals danke,
bei aktuellem Tempo wird es noch paar Wochen dauern bis ich da bin.
Grosse Welt hab ich nicht vor, evtl. später. mir reicht 1 Bildschirm. lieber Keep it Small & Simple

Momentan bin ich bei der Steuerung, das blöde ist, das hatte ich schon mal irgendwo mit ActionScript2 gemacht, also die Basics
ein Rennspiel mit Beschleunigung, Rotation usw. und perPixelColision
dronus
Establishment
Beiträge: 114
Registriert: 11.01.2010, 01:53

Re: zerstörbare 2D Umgebung

Beitrag von dronus »

Wenn es nur einen Bildschirm groß ist, kannst du problemlos 'Zerstörung' für jeden Pixel speichern. Also zusätzlich zum sichtbaren Bildspeicher einfach einen zweiten, dessen 'Farben' für Eigenschaften wie 'begehbar', 'brennend', 'Säure' usw. stehen. Die aktualisierst du mit den Waffeneigenschaften wo getroffen wird, untersuchst sie für Kollisionstest zwischen Fahrzeugen und der Landschaft und aktualisierst das sichtbare Bild entsprechend den Eigenschaften, z.B. in dem du bei 'zerschossen' oder 'brennend' eine entsprechende animierte Textur an den Stellen einblendest. Wenn du in Java schriebst, kannst du für 2D die Funktionen der 'BufferedImage'-Klasse nehmen, die sind auf aktuellen PCs mehr als schnell genug. Wenn es z.B. für Android ist, solltest du lieber auf OpenGL setzen, das ist aber recht kompliziert für 2D.
Antworten