Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   Delphi Allgemeine Fragen zu einem Jump and Run Spiel (https://www.delphipraxis.net/110060-allgemeine-fragen-zu-einem-jump-run-spiel.html)

Looper 12. Mär 2008 11:38


Allgemeine Fragen zu einem Jump and Run Spiel
 
Halloa!

Ich habe als Ziel ein Jump and Run Spiel zu programmieren. Das Hauptproblem bei so einem Spiel ist es ja die Grafiken zu erstellen. Um diese Motivationsbremse zu umgehen, benutze ich zuerst Grafiken von einem bereits existierenden Jump and Run Spiel (SuperTux).

Nun zur Programmierung.
Für die Ausgabe benutze ich Andorra 2D.
Meine Frage: Wie geht man bei einem Jump and Run Spiel am Besten vor?
Mein bisheriger Plan sah so aus:
1: den Leveleditor programmieren
2: das Spiel an sich (also das Programm, wenn man spätzer richtig spielt)

Ist diese Vorgehensweise ratsam, oder nicht?

mfg Looper

Nuclear-Ping 12. Mär 2008 11:51

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
Kommt drauf an, wie komplex deine Level werden sollen. Als Anfang reichts z.B. auch, wenn du nur eine Textdatei hast, die irgendwie den Level abbildet und von deinem Programm interpretiert wird, damit du wenigstens schonmal was zum Anfangen hast.
Leveleditor würde ich erst zum Schluss machen, weil vorher ist dir ja - du wirst sicher nicht mit großartiger Vorplanung rangehen - noch garnicht klar, was deine Spiel-Engine dann an Leveln umsetzen kann / soll.

Looper 12. Mär 2008 11:55

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
Also ich hatte mir gedacht das Level als typisierte Datei abzuspeichern. Und am Anfang wird das Level dann geladen.

mimi 12. Mär 2008 15:43

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
Ich habe gemerkt ein Level Editor gleich am Anfang zu machen ist Sinnvoller als erst zum Schluss
Da die Tests mit den Game Objekten doch einfacher ist.

Ich habe mich jetzt für ein Ganz einfaches Datei Format entschieden:
Zitat:

Player|id004|12|6
Room:0,0
Wand|id002|0|0
Wand|id002|1|0
Wand|id002|2|0
Wand|id002|3|0
Das sind die ersten Paar Zeilen.
Gut, bei mir ist es ein Raster Spiel, aber evlt. lässt sich das Datei Format auch ändern, für deinen Fall.

Wenn das Spiel Level Basiert sein soll ist das Level Format das A und O, bei sowas.

Und ein Level Editor ist schnell geschrieben. Ich habe bei mir einfach eine ListBox genommen, dort werden alle Objekte mit Namen und Icon Angezeigt.

Die kann ich jetzt auf meiner PaintBox Platzieren.
Das sollte eigentlich auch mit Andorra klappen.(ich kenne diese Engine jetzt nicht so genau).

Looper 12. Mär 2008 15:54

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
Okay, dann werde ich mir auf jeden Fall auch mal diese Methode ansehen. Ich glaube auch, dass es einfacher ist, den Leveleditor am Anfang zu schreiben.

mfg Looper

mimi 12. Mär 2008 16:00

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
naja leichter wohl nicht, weil dann schon ein Datei Format fest steht, und du musst wissen, welche Objekte hast du und wie werden sie verwaltet.

In mein Fall ist das ganze sehr einfach. Aber wie es bei dir aussieht weiß ich nicht.

Wenn du ein Level Editor schreibst kannst du ja auch ein Bin Datei Format nehmen. Oder ein INI Basiertes

Namenloser 12. Mär 2008 16:04

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
Bevor du anfängst, den Leveleditor zu schreiben, solltest du dir aber wirklich erst ein paar Tage lang Gedanken darüber machen, wie du die Daten speichern willst. Sonst ärgerst du dich hinterher schwarz, wenn du alles neu schreiben musst, weil du einen Gegner hinzufügen willst oder so...
Achja, wenn du irgendwelche Leute hast, die du mit deinen Plänen zulabern kannst, (die müssen nix verstehen^^) würde ich das tun. Mir sind dann manchmal noch einige Ungereimtheiten aufgefallen, die ich sonst wohl übersehen hätte. Aufschreiben geht natürlich auch.

Looper 12. Mär 2008 16:40

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
meint ihr den, dass typisierte Dateien nicht auch ziemlich praktisch dafür sind.
Man specihert einfach jedes einzelne "Bild" des Spiels ab, gibt ihm einen Typ, X-, Y- und Z- Koordinate.
Und sie sind jederzeit erweiterbar.

PS: Was genau sind BIN Dateien. Ich habe gefunden, dass es sich um CD-Images handelt

mfg Looper

Namenloser 12. Mär 2008 16:53

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
Das BIN bedeutet nix anderes als BINÄR. Die Endung wird (dummerweise :roll: ) von vielen Prigrammen benutzt. es wird auch rehct oft für Datenträgerabbilder verwendet.
In diesem Fall ist aber wohl eine binäre Datei gemeint, also keine die zum beispiel als String (X|Y|Objekttyp) oder Ini gespeichert wird.

mimi 12. Mär 2008 17:14

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
Zitat:

Man specihert einfach jedes einzelne "Bild"
Das währe unpraktisch und ist auch nicht nötig.

Bei mir habe ich das so gelöst:
Es gibt eine Goable Image Liste in der alle Bilder drin sind.
Jedes Bild ist also ein Objekt. Jedes Objekt hat z.b. eine eindeutige ID, einen namen, Left und Top und soweiter.

Beim Datei Format kannst du jetzt einfach nur die ID und die Left und Top Position speichern.
Hier ist meine Speicher Procedure:
Delphi-Quellcode:
procedure TPluto2DBaseGameA.SaveRooms(const aFileName: String);
var
  sf:TStringList;
  x,y,x2,y2,i:Integer;
  str:String;
begin
  sf:=TStringList.Create;
  str:=IntToStr(CurrPt.X) + ',' + IntToStr(CurrPt.Y);
  sf.Add('CurrRoom:' + str);
  sf.Add(player.Typ + '|' + Player.Id + '|' + IntToStr(Player.Left div 20) + '|' + IntToStr(Player.Top div 20));

  for y:=0 to 10 do begin
    for x:=0 to 10 do begin
      if Assigned(Rooms[x,y]) then begin
        str:='Room:' + IntTostr(x) + ',' + IntTostr(y);
        sf.Add(str);
        for y2:=0 to MapH do begin
          for x2:=0 to MapW do begin
            if (Assigned(Rooms[x,y].Map[x2,y2])) and (not Rooms[x,y].Map[x2,y2].isDel) then begin
              str:=Rooms[x,y].Map[x2,y2].Typ + '|' + Rooms[x,y].Map[x2,y2].Id + '|' +
                   IntTostr(Rooms[x,y].Map[x2,y2].Left div MapS) + '|' +
                   IntTostr(Rooms[x,y].Map[x2,y2].Top div MapS);
              sf.Add(str);
            end;
          end; // for x2
        end; // for y2

        for i:=0 to Rooms[x,y].ListTeleporter.Count-1 do begin
          str:=Rooms[x,y].ItemTeleporter[i].Typ + '|' + Rooms[x,y].ItemTeleporter[i].Id + '|' +
               IntTostr(Rooms[x,y].ItemTeleporter[i].Left div MapS) + '|' +
               IntTostr(Rooms[x,y].ItemTeleporter[i].Top div MapS);
          sf.Add(str);
        end;

        for i:=0 to Rooms[x,y].ListPunkte.Count-1 do begin
          str:=Rooms[x,y].ItemPunkt[i].Typ + '|' + Rooms[x,y].ItemPunkt[i].Id + '|' +
               IntTostr(Rooms[x,y].ItemPunkt[i].Left div MapS) + '|' +
               IntTostr(Rooms[x,y].ItemPunkt[i].Top div MapS);
          sf.Add(str);
        end;

        for i:=0 to Rooms[x,y].ListGegner.Count-1 do begin
          str:=Rooms[x,y].ItemGegner[i].Typ + '|' + Rooms[x,y].ItemGegner[i].Id + '|' +
               IntTostr(Rooms[x,y].ItemGegner[i].Left div MapS) + '|' +
               IntTostr(Rooms[x,y].ItemGegner[i].Top div MapS);
          sf.Add(str);
        end;

      end;
    end; // for x
  end; // y
 
  sf.SaveToFile(aFileName);
end; // TPluto2DBaseGameA.SaveRooms
Das soll nur als Beispiel dinen
Ich meinte mit bin nicht die Datei Endung sondern das Datei Format an sich. Also BINÄR ab speichern z.b. mit TFileStream oder so.

Aber ich denke das einfachste ist für dich per TStringList abzuspeichern.

Je nach dem wie komplex dein Spiel werden soll könnte ich die auch anbieten meine 2D Engine zu nutzen.
Sie basiert auf Canvas und ist im Moment leider nur für Lazarus nutzbar und unter Windows gibt es einige Probleme z.b. das irgendeine Datei nicht gefunden wird, muss ich mal genau nach schauen warum das so ist.

Ich weiß jetzt nicht genau wie einfach Andorra ist. Evlt. gibt es dort ja auch eine ImageListe oder sowas.
Weil damit währe für dich einige Problem gelöst.

Falls du hier angemeldet bist;
http://www.delphigl.com/forum/viewtopic.php?t=7319
kannst du mein 2D Engine schon runter laden. Wenn nicht kann ich sie auch nochmal hier hochladen. Kein Problem.

Ich habe meine 2D Engine eigentlich mit dem Ziel geschrieben das alles einfach ist und wiederkerne aufgaben in der Engine bereist gelöst sind. Z.B. für die Kollision Erkennung.

Oder das laden und verwalten von Bild Objekten. und soweiter.

Evlt. währe das ja was für dich.
(Damit möchte ich aber keine Werbung für meine 2D Engine machen, sondern sie nur erwähnen als altnative
ich selbst habe damit viele Projekte am laufen. Und auch noch Erweiterungen die aber noch nicht Fertig sind und wie gesagt die Engine läuft nur unter Lazarus mit der lib OpBitMap(Mit Paar änderungen könnte man auch auf OpBitmap versichten nur dann kann man nur BMP Dateien laden) zusammen

Looper 12. Mär 2008 21:11

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
Erstmal vielen Dank für den ausführlichen Beitrag :thumb:

Also ich glaube ich werde erstmal Andorra 2D versuchen weiter zu benutzen, da es auch ziemlich einfach ist. ImageList usw. gibt es dort auch.
Ich werde mir jetzt mal durch den Kopf gehen lassen, WAS ich genau abspeichern möchte und dann genau WIE. Ich denke deine (mimi) Methode reicht völlig aus.
Melde mich bald wieder,

Looper.

mimi 13. Mär 2008 12:15

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
Dann Viel erfolg bei deinem Projekt. Und lasse dich nicht sofort entmutigen wenn was auf Anhieb nicht läuft.

So ein Projekt braucht seine Zeit bis es Fertig ist. Meistens ist es doch nicht so leicht wie man sich das vorstellt. Viel Glück !

Looper 13. Mär 2008 13:37

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
Ja das stimmt. Man denkt am Anfang immer, dass es leicht ist und dann kommt hier ein Problem und dort eins^^
Aber ich denke ich schaffe das schon. Werde ich hier bestimmt auch reinschreine^^

mfg Looper

mimi 20. Mär 2008 15:41

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
Ich bin der Meinung das Spiele zu schreiben egal ob 2D oder 3D um einiges Interessanter ist als Oberflächen Programme die VLC/LCL Komponenten benutzen.

Weil du wirst gleich von ganz anderen Problemen Konfrontiert.

Mein Haupt Problem war immer die Kollision. Aber dank meine Engine habe ich auch da keine Probleme mehr*freu*.

Looper 20. Mär 2008 19:43

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hi,
also bis jetzt hatte ich noch gar keine großen Probleme. Halt nur, wie ich die Sprites in verschiedenen Ebenen auswählen kann, wenn sie wieder gelöscht werden sollen. Ich hatte dann einen Code geschrieben, um dieses Problem zu umgehen. Aber dadurch wurde der gesamte Quelltext schnell komplizierter. Daher habe ich einfach 3 SpriteEngines erstellt. Eine für den Vordergrund, Mittelgrund und Hintergrund.
Jetzt muss ich nur noch alle Bilder einladen und dann kann ich mich an das eig. Spiel setzen.
Als Anhang habe ich mal ein Bild vom jetzigen Stand (die richtig gezeichneten Bilder sind auf der momentanen Ebene, die transparenten auf einer anderen).

mfg Looper

PS: Ich glaube man darf das Spiel auch veröffentlichen, wenn ich Bilder von einem anderen 2D-Spiel benutze, dass allerdings unter der GNU publiziert ist. Stimmt das oder nicht?

mimi 20. Mär 2008 19:58

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
Sieht schon mal nicht schlecht aus.

Was deine Frage angeht da weiß ich leider keine Antwort.

Aber das mit den Hintergrund, Vordergrund was ist bei dir der Mittelgrund ?
Ist keine schlechte Idee aufjeden Fall.

Bei meiner Engine hätte ich für sowas zwei Möglichkeiten:
Mehrer "Sprite Manger" oder die einfachste:
Einfach die Eigenschaft NoCollision auf True stellen.

Allerdings hätte ich aufjedenfall Probleme mit dem Zeichnen, da die Hintergrund Objekte ja hinter dem Player gezeichnet werden soll und die Vordergrund Objekte davor.
(wenn ich dich richtig verstehe).

Ein Interessantes Problem !

Hast du die Grafiken von "Super Tux" genommen ?

Ich hatte mal eine art Loder geschrieben der die Text Datei von Super Text laden konnte.

Aber es Funktionierte nur zu 90% Nicht alle Grafiken wurden geladen.

Und selbst alle Grafiken zu beschreiben war mir zu aufwendig bei de Fülle von Grafiken.
Also habe ich es erstmal sein gelassen.

Looper 21. Mär 2008 08:38

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
Moing,
im Mittelgrund bewegt sich Tux und alle Gegner. Außerdem befinden sich dort alle Tiles auf denen Tux laufen soll, bzw. Hindernisse darstellen. Alle Tiles im Mittelgrund werden von der SpriteEngine "SEMittelgrund" verwaltet.
Alles was sich im Vordergund befinder stellt für Tux kein Hinderniss da und wird vor ihm gezeichnet.
Alles im Hintergrund halt dahinter. Auch diese beiden Ebenen werden von je einer SpriteEngine gezeichnet.
Und das mit dem Zeichnen ist ja auch kein Problem. Alle Tiles, die im Hintergrund sind, werden zuerst gezeichnet (SEHintergrund). Danach der Mittelgrund. Und zum Schluss der Vordergrund.

mfg Looper

//Achja, die Grafiken sind von Supertux.

mimi 21. Mär 2008 10:28

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
Also ist der Mittel Bereich der wo sich alles abspielt ?

Stimmt. Zeichnen müsste ich ja erst alle Hintergrund Objekte dann alle Mittelgrund Objekte und zum Schluss die Vordergrund Objekte.

Hast du schon eine Schwerkraft oder das Springen eingebaut ?

Das Springen weiß ich nämlich nicht wie ich das einbauen könnte.
Ich hätte gerne so eins wie bei Super Tux oder Super Mario(ich glaube das ist ziemlich gleich was die Sprungart angeht)

Looper 21. Mär 2008 12:55

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
Also ich habe bis jetzt nur den Leveleditor erstellt. Da brauche ich Springen usw. ja noch gar nicht.
Aber das Springen hatte ich schonmal gebaut:
- Du hast einmal die Y-Position deiner Figur (sagen wir 100).
- Die Taste für Springen wird gedrückt.
- Das Programm überprüft, ob man auf dem Boden steht.
- Wenn nein, passiert nichts - Wenn ja, dann setzt du eine Variable (z.B. Sprung auf 20).
- In einem Timer wird die Figur so nach oben verschoben:
Delphi-Quellcode:
Y := Y - Sprung
- Auch wenn Sprung 0 ist verringerst du Sprung immer weiter, bis die Figur auf dem Boden ist.
Delphi-Quellcode:
100 := 100 --5
Sieht realistisch aus und ist einfach. Sobald die Figur wieder auf dem Boden ist, wird Sprung auf 0 gesetzt.
Delphi-Quellcode:
If FigurAufDemBoden(Figur) then Sprung := 0;
Man muss nur richtig überprüfen wann die Figur auf dem Boden ist. Da liegt ein kleines Problem. Denn wenn die Figur 1 Pixel über dem Boden ist. Gibt die Funktion "IstAufDemBoden" ja false zurück.

mfg Looper

mimi 21. Mär 2008 17:42

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
Den Abstand müsste dann halt berücksichtig werden.

Genau so wollte ich es einbauen. Nur ich dachte das währe nicht gut genug...

Looper 21. Mär 2008 21:30

Re: Allgemeine Fragen zu einem Jump and Run Spiel
 
müsste man halt durch ausprobieren sehen, ob das gut oder schlecht ist. Man kann ja auch ne maximale Geschwindigkeit setzen, damit die Figur nicht zu schnell fällt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:13 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