AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Multimedia Delphi Terrain wie in Worms (2D / DelphiX)
Thema durchsuchen
Ansicht
Themen-Optionen

Terrain wie in Worms (2D / DelphiX)

Ein Thema von ISAS · begonnen am 11. Mär 2005 · letzter Beitrag vom 13. Mär 2005
Antwort Antwort
Benutzerbild von ISAS
ISAS

Registriert seit: 24. Sep 2003
Ort: Vietnam
205 Beiträge
 
Delphi 4 Standard
 
#1

Terrain wie in Worms (2D / DelphiX)

  Alt 11. Mär 2005, 18:11
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
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
angos

Registriert seit: 26. Mai 2004
Ort: Rheine
549 Beiträge
 
Delphi 11 Alexandria
 
#2

Re: Terrain wie in Worms (2D / DelphiX)

  Alt 11. Mär 2005, 18:19
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.
Ansgar
  Mit Zitat antworten Zitat
Benutzerbild von ISAS
ISAS

Registriert seit: 24. Sep 2003
Ort: Vietnam
205 Beiträge
 
Delphi 4 Standard
 
#3

Re: Terrain wie in Worms (2D / DelphiX)

  Alt 11. Mär 2005, 19:03
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
Signatur wurde auf Wunsch geändert. Deswegen einfach hier drauf klicken-> www.geggi.at.gg
  Mit Zitat antworten Zitat
Elite
(Gast)

n/a Beiträge
 
#4

Re: Terrain wie in Worms (2D / DelphiX)

  Alt 11. Mär 2005, 19:14
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.
  Mit Zitat antworten Zitat
Benutzerbild von Seniman
Seniman

Registriert seit: 15. Sep 2003
Ort: Münster
98 Beiträge
 
#5

Re: Terrain wie in Worms (2D / DelphiX)

  Alt 12. Mär 2005, 19:14
Hallo ISAS,

Zitat von ISAS:
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
Ich würde das folgendermaßen machen. Zeichne ganz am Anfang den Hintergrund, also das Terrain. Wobei du, wie Angos schrieb, für den Hintergrund "reservierst", d.h. alles ist "Boden" außer das, was z.B. schwarz ist, das ist "Luft". Wenn nun eine Explosion passiert, zeichnest du auf das Hintergrundbild einen Schwarzen Kreis drauf.
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
  Mit Zitat antworten Zitat
Benutzerbild von Khabarakh
Khabarakh

Registriert seit: 18. Aug 2004
Ort: Brackenheim VS08 Pro
2.876 Beiträge
 
#6

Re: Terrain wie in Worms (2D / DelphiX)

  Alt 13. Mär 2005, 00:58
Zitat von Seniman:
Ich weiß nicht genau, wie die Klasse dafür heißt, ich glaub TImage oder so.
Ich denke, du meinst TBitmap.
Sebastian
Moderator in der EE
  Mit Zitat antworten Zitat
Benutzerbild von MasterEvil
MasterEvil

Registriert seit: 12. Feb 2005
Ort: Hannover
234 Beiträge
 
Delphi 7 Enterprise
 
#7

Re: Terrain wie in Worms (2D / DelphiX)

  Alt 13. Mär 2005, 01:23
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
  Mit Zitat antworten Zitat
Benutzerbild von Seniman
Seniman

Registriert seit: 15. Sep 2003
Ort: Münster
98 Beiträge
 
#8

Re: Terrain wie in Worms (2D / DelphiX)

  Alt 13. Mär 2005, 19:57
Hallo,

Zitat von MasterEvil:
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.
Gerade das ist ja, was man (wie ich meine!, vielleicht irre ich ja) nicht tun sollte. Wenn man in einem Array gespeichert hat, wo Terrain ist und das zeichnen will, hat man eines der beiden folgenden Probleme: Entweder man trennt das Terrain, das gespeichert ist von dem, was gezeichnet wird. Dann kann man bei Explosionen einfache Kreise zeichnen und hat ein Loch. Aber was passiert mit dem Array? Da muss man dann in den Array den gleichen Kreis zeichnen. Das ist etwas knifflig. Oder, wenn man den gespeicherten Array als Grundlage nimmt, dann hat man das Problem das dann auch zu zeichnen. Es ist unglaublich langsam, wenn man etwas Pixelweise zeichnet und soweit ich weiß gibt es auch keinen gescheit schnellen Befehlt dafür.
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
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:15 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz