![]() |
Terrain wie in Worms (2D / DelphiX)
Arbeite gerade an einem Multiplayerspiel, das auf dem System von Worms basiert. Einziger Unterschied: Alles ist Echtzeit, also kein rundenbasierendes Spiel. Waffen und Steuerung sind natürlich auch anders.
Aber nun zu meiner Frage: Wie schaffe ich es, eine Spielfeld zu programmieren, wie in Worms. Ich meine jetzt nicht, dass sie so aussieht, sondern, dass sie zerstörbar und begehbar ist. Wie in Worms halt. Wenn man mit einer Rakete wo hinschiesst und die explodiert, dann soll sich auch das Terrain verändern. Oder das gehen. Man soll immer auf dem Terrain gehen können, ausser, wenn es zu steil ist. Ich weiss, dass es nicht besonders leicht ist, aber jedes einzelne Pixel zu proggen ist doch ein bisschen schwer, ausser es bleibt mir nichts andres übrig. Vielleicht weiss einer auch Lösungen, wie man das dann sehr einfach mit Pixeln proggen könnte |
Re: Terrain wie in Worms (2D / DelphiX)
Ich würde eine Hintergrundfarbe (zB schwarz) deklarieren und dann bei der entsprechenden Figur(Wurm, Panzer, wasauchimmer) immer die Pixel unten drunter abfragen (wenn alle "Bodenpixel" schwrz sind eine ebene tiefer)
Raketeeinschläge mit nem Kreis simulieren, der einfach das alte Terrain mit der Hintergrundfarbe überzeichnet. |
Re: Terrain wie in Worms (2D / DelphiX)
Jedesmal die Spielfläche neuzeichnen packt der Compi nimma.
Was ich gerade versuch zu machen, ist was mit Sprites. Aber die Kollision funktioniert noch nicht ganz bzw das gehen |
Re: Terrain wie in Worms (2D / DelphiX)
Also ich könnte jetzt hier einen Roman schreiben, weil ich genau das, was du vorhast, bereits implementiert habe, aber ich fasse mich kurz:
Pixelgenaue Kollisionen von Sprites in DelphiX werden dich zu pixelcheck:=true führen. Dann wirst du feststellen, dass DelphiX einfach zu blöd ist, um damit so etwas effizient was zu machen. Das wirst du allerdings erst merken, wenn du schon ziemlich weit mit dem Spiel bist. Dann hast du keine Lust mehr, alles auf einen anderen Wrapper oder direkt auf DirectX umzuschreiben und du hast keine Lust mehr auf das Projekt. Dann geht es dir so wie mir jetzt. Deshalb mein Tipp: Auch wenn die Begeisterung groß ist, befreie dich von DelphiX. Steig auf mathematische Kollisionskontrolle um, bzw. nutze einen OGl-Wrapper (GlScene, ...), der auch gleich 3D mit drin hat, auch wenn du es atm nicht benötigst. |
Re: Terrain wie in Worms (2D / DelphiX)
Hallo ISAS,
Zitat:
So, dieses Hintergrund/Terrain-bild soll speichern, wie die Landschaft (ohne Figuren) aussieht. Dieses Bild ist deswegen als unsichtbares Bild gespeichert. Ich weiß nicht genau, wie die Klasse dafür heißt, ich glaub TImage oder so. Zu Anfang jeden Frames kopierst du die Landschaft zuerst auf den Bildschirm und danach malst du die Figuren dadrüber. Für die Kollisionsabfrage berechnest du dann einfach die Koordinaten irgendeines Objekts und fragst dann die Farbe des Pixels auf dem Hintergrundbild am. Falls er schwarz ist, dann ist keine Kollision (zumindest nicht mit dem Terrain) und falls er eine andere Farbe hat, dann gibt es eine Kollision. Die Kollision mit anderen Objekten musst du dann seperat überprüfen. Grüße Seniman |
Re: Terrain wie in Worms (2D / DelphiX)
Zitat:
|
Re: Terrain wie in Worms (2D / DelphiX)
kA ob das nicht eventuell zu langsam ist,
aber falls du eine feste größe für die spielfläche hast könntest du auch mit einem array arbeiten. das array könnte ein record sein, der z.B. Farbe und Fest Ja/nein enthält. der array ist halt so groß wie deine spielfläche (680*420, oder wie auch immer). dann hast du eine paint methode der du sagst welchen bereich du neuzeichnen willst, so brauchste nich immer alles neuzeichnen. so kannste dann halt bei explosionen mit dem array arbeiten, mehrere arrays für mehrere ebenen benutzen und kannst halt viel eingrenzen in dem du sagst was er zeichnen soll. aber echt kein plan ob die art nicht wiederrum zu lahm ist. greetz Steffen |
Re: Terrain wie in Worms (2D / DelphiX)
Hallo,
Zitat:
Deswegen mein Vorschlag: Lass den Array weg und nimm statt dessen das Bild (das ja in gewisser Weise auch ein Array ist). Da kann man ganz einfach Löcher rein machen, indem man Kreise reinzeichnet. Außerdem kann man ziemlich einfach den Inhalt eines ganzen Bildes komplett in ein anderes Bild hineinkopieren und das ziemlich schnell. Ich hoffe ich habe das jetzt nicht zu verwirrt wiedergegeben... Grüße Seniman |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:27 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz