![]() |
DelphiX Frage für Spiel
Hi, bei der Entwicklung eines Spiels
siehe: ![]() bin ich auf ein Problem gestoßen: In Typ deklerations Bereich habe ich einen typ bauen deklariert:
Delphi-Quellcode:
...dann habe ich vor dem Implementations- Bereich Variablen dieses Types deklariert:
Type
Bauen = record Feld:Array[1..999] of byte; x:integer; y:integer; test:byte; arraylaufer:integer; end;
Delphi-Quellcode:
...dann habe ich einen DxTimer und ein DxDraw Object, sowie eine DxImageList stationiert
var
Lager:Bauen; Bau:Bauen; implementation ...die Bilder für die ImageList habe ich im Bereich OnCreate (des Forms) zugewiesen um Ladezeit zu sparen:
Delphi-Quellcode:
...so, nun beinhaltet meine ImageList als erstes Objekt Lager.bmp
DXImageList1.Items[1].Picture.Bitmap.LoadFromFile('.\Bilder\Bauen\Lager.bmp');
...In der OnTimer Przedur---> procedure TSpielfenster.DXTimer1Timer(Sender: TObject; LagCount: Integer); begin DxDraw1.surface.fill(0); DXImageList.Items[1].Draw(DXDraw1.Surface,0,0,0); DxDraw1.flip; //Das Bild 1 an Position 0,0,[patternIndex] auf DXDraw1.surface zeichnen! end; Problem: Ich möchte nun ein PopupMenü Machen, indem man z.B. Kollonisationsschiff anklicken kann und das dann ein -meinetwegen schon oben (onCreate) vorgeladenes- Bild genau wie Lager.bmp auf dem Surface angezeigt wird. Problem ist dass ich es ja nicht einfach in die Timer Routine einbinden kann, da es ja dann immer da währe! Wenn ich das versuche mit Variablen zu Umgehen (if a=1 then zeichne; a:=0; end;) da es dann nur Blinken würde weil der Videospeicher ja immerwieder geleert wird (oben). Ich brauche also dringend Rat!! Ps. --> Bitte nicht an kleinigkeiten (wenn mal DxDraw1 oder DxDraw dasteht) hochziehen, ich denke ihr wisst was ich meine! Tmode00 |
Re: DelphiX Frage für Spiel
Antwort wäre gut!
|
Re: DelphiX Frage für Spiel
hi,
ich habe keine antwort auf dein problem, aber ich möchte dir einen guten tipp geben: nutze möglichst wenig records und arrays und möglichst keine globalen variablen! dein bauen-typ ist an sich schon unglücklich gewählt. ich habe vor einiger zeit mal angefangen, eine kleine echtzeitstrategiespiel-engine zu programmieren (wegen zeitmangel arbeite ich grad nicht dran). ich schlage dir vor, dass du dir eine klassenstruktur aufbaust. dazu musst du erst einmal überlegen, aus welchen teilen dein spiel bestehen soll. standardmäßig wären das:
für jedes dieser teile entwickelst du am besten eine eigene klasse. das ganze sollte hierarchisch aufgebaut sein, d.h., die objekte-klasse enthält eine TList, welche referenzen zu den bislang gebauten gebäuden des spielers enthält. eine weitere liste enthält die einheiten, eine liste enthält alle forschungsobjekte usw. die forschungsobjekte enthalten dann zB noch einen status, ob der spielers sie bereits erforscht hat. in die einheiten und gebäuden wird gespeichert, wie viele hitpoints sie noch haben und wieviele sie maximal haben können... wenn du eine klare struktur hast, kannst du zB von den parent-klassen der gebäude neue klassen ableiten, die die einzelnen gebäude repräsentieren (also von TChurch über THouse bis THuntingLodge - das ist ja vollkommen dir überlassen). du musst den neuen klassen dann nur noch spezielle eigenschaften geben, da sie allgemeine informationen wie bauzeit oder hitpoints ja von der parent-klasse geerbt haben. ach, und Zitat:
viel erfolg, aenogym |
Re: DelphiX Frage für Spiel
Entschuldigung für meinen Streng gewählten ton! Aber erstmal vielen vielen Dank, das bringt mich (denke ich) schon viel weiter. Wenn man solche anstöße bekommt, dann weis man auch wie man ambesten eine Lösung für solche Probleme bekommt.
Ich denke ich sollte alles nochmal streng überarbeiten, so von Grund auf eben alles etwas in Richtung Klassen umstrukturieren. Mein Problem ist nämlich, das ich am Anfang eigendlich immer recht gut voran komme und dann durch meinen ,,Spaghetticode" durcheinander komme! Fürweitere Hilfen und Konzepte, Anregungen....bin ich trotzdem sehr verbunden! Ps.: Danke nochmal! |
Re: DelphiX Frage für Spiel
Zitat:
|
Re: DelphiX Frage für Spiel
Was heir Aenogym schon vorgeschlagen hat, ist zu unterstützen. Denn je weiter du dein Projekt entwickelst, desto schwirieger es sein wird, mit Records klar zu kommen. Also Objekten + Hierarchie = Erfolg ;).
Ich kann nur von glück reden, dass ich in meinem Projekt( ![]() |
Re: DelphiX Frage für Spiel
hi leutz!
ich stehe zur zeit auf dem gleichen problem und habe auch diese antwort schon x mal bekommen, nur... wie geht das mit den klassen? kann mir da mal jemand ein biespiel geben? also z.b. wenn man ein Grunditem hat und dann eben eine unterklasse, die meinetwegen die option "extraoption" bekommt, etc. und wie frage ich dann ab, ob das *ding* dann auch diese eigenschaft hat, etc... bitte euch um hilfe :cry: |
Re: DelphiX Frage für Spiel
Hi Master_RC
wenn ich dich richtig verstanden hab willst du halt wissen ob das *ding* (ich denk mal das soll wohl irgendwie ne Variable darstellen ja? :-D ) die Option besitzt. Mit dem Schlüsselwort is kannst Du abchecken ob eine Variable von einem bestimmten Typ ist. Funktioniert aber nur mit Objekten.
Delphi-Quellcode:
Die Funktion Test gibt jetzt true zurück wenn der übergebene Parameter vom Typ TExtraOption (oder einem Nachfahrtyp) ist.type TGrundoption = class ... end; TExtraOption = class(TGrundoption) ... end; function Test(Option: TGrundoption): boolean; begin Result := (Option is TExtraoption); end; Keep it up |
Re: DelphiX Frage für Spiel
und der operator as macht dann dein TGrundobjekt zum Textraobjekt:
Delphi-Quellcode:
die Variante
if (test(grundobjekt)) then
(grundobjekt as Textraobjekt).extraoption := 'Extrawurst';
Delphi-Quellcode:
existiert auch, arbeitet jedoch ohne Fehlerüberprüfung und wird deswegen nicht empfohlen.
TExtraObkejt(Grundobjekt).extraoption
Terminologisch heisst das Verfahren Typecast, das zweite wäre der "harte Typecast". |
Re: DelphiX Frage für Spiel
Hi,
wenn du aber schon das schreibst
Delphi-Quellcode:
dann kannst du auch das drunter schreiben:
if (test(grundobjekt)) then
Delphi-Quellcode:
da du ja schon den Test gemacht hast.
TExtraObkejt(Grundobjekt).extraoption
|
Re: DelphiX Frage für Spiel
das würde ich auch gerne wissen: wie entwickelne ich eine gute klassen strucktur für ein z.b. Aufbauspiel ?
ich dachte mir das so: es gibt einmal eine klasse - Map - minimap - Player - Objekte(Häuser, Bäume, Pflanzen, Tiere, Menschen und soweiter) problem ist halt nur, wie sieht die klasse aus die das alles verwahlten soll ?? |
Re: DelphiX Frage für Spiel
Also die vier Sachen wirst du vermutlich nicht mit einer gemeinsamen Vorfahrklasse abbacken können (höchstens vielleicht Map und Minimap). Frag dich immer, welche deiner Sachen gemeinsame Eigenschaften und Verhaltensweisen haben. Im allgemeinen merkst du das auch spätestens beim Coden: Wenn du den gleichen Code in drei verschiedenen Klassen schreiben musst, spätestens dann solltest du dir mal Gedanken über Vererbung machen... :gruebel:
Wo du schon eher auf einen Nenner kommst sind deine "Objekte" (Bäume etc.). Ich spinntisiere jetzt einfach mal ein bisschen:
Delphi-Quellcode:
So ist natürlich ein bisschen Overkill so wie es da jetzt steht. Aber hat ja auch keinen Anspruch auf Vollständigkeit. Das lässt sich sehr einfach warten und handhaben und außerdem problemlos erweitern. Zum Beispiel eine von TSpielobjekt abgeleitete Klasse TGebaeude.
type TSpielobjekt = class
private FPosition: TPoint; public constructor Create; virtual; destructor Destroy; virtual; property Position: TPoint read FPosition write FPosition; ... // Was halt ALLE Spielobjekte sonst noch gemeinsam haben sollen end; TVegetation = class(TSpielobjekt) // Hier alles was speziell Bäume und Pflanzen betrifft. Was weiß ich, ob die gerade blühen oder so halt end; TBewegliches = class(TSpielobjekt) private public procedure Move(Richtung: TPoint; Staerke: integer); virtual; end; // So und jetzt die Endklassen ableiten: TBaum = class(TVegetation) // Alles was ganz speziell NUR den Baum betrifft end; TTier = class(TBewegliches) // Alles was ganz speziell NUR die Tiere betrifft, z.B. Raubtier: boolean end; Hoffe das hilft. |
Re: DelphiX Frage für Spiel
ich möcht jetzt nicht nochmal reinplatzen, aber...
gibt es hier irgendwo ein tuto für solche klassen? hab schon längere zeit gegoogelt und so, aber natürlich nur solche tutos, die die klassen voraussetzen... :( |
Re: DelphiX Frage für Spiel
In der Delphi-Hilfe müsste eigentlich ein Kapitel über Klassen, Vererbung und objekt-orientiertes Programmieren allgemein stehen. Ist ein bisschen viel um das jetzt hier zu erklären. :)
|
Re: DelphiX Frage für Spiel
Wie klassen defniert werden weiß ich ja, nur wie die aufgabaut werden sollten.
@tigerman33 soweit bin ich mal bei mein ShipGame gekommen, das Problem ist ja auch: ich möchte mehre obj von diesen Obj Typen haben mehr als 1 Baum... das beste währe natürlich: eine klasse die sich nur um ein Obj kümmert und eine zweite die alle obj. verwahlten kann in einer Obj List, aber wie ? In der Delphi hilfe wird zwar beschrieben wie Klassen denfiert werden eigenschafnte vererbungen und soweiter aber nicht wie eine klasse am besten aufgebaut sein sollte. |
Re: DelphiX Frage für Spiel
Zitat:
(Soll heißen: Stell deine Frage ein bisschen genauer... :) ) |
Re: DelphiX Frage für Spiel
ok: also die frage ist:
Wie könnte so eine Verwaltungsklasse mit hilfer der TobjList aussehen ? hatte schon mehrmals angefangen und bin gescheitert. Oder bei einer MenuKlasse. z.z. schreibe ich ein Mainmenu(eigenes nicht abgeleitet) mit hilfe PowerDraw und dort habe ich das problm mit untermenus.... aber ich glaube die Frage war eine andre.... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:00 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-2025 by Thomas Breitkreuz