Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Cross-Platform-Entwicklung (https://www.delphipraxis.net/91-cross-platform-entwicklung/)
-   -   Flappy Firemonkey - Spiele mit Delphi XE5 (https://www.delphipraxis.net/179322-flappy-firemonkey-spiele-mit-delphi-xe5.html)

Crocotronic 26. Feb 2014 20:40

Flappy Firemonkey - Spiele mit Delphi XE5
 
Guten Abend,
nachdem ich heute auf Flappy Firemonkey gestoßen bin, war ich erstaunt, was mit einem recht primitiven 500 Zeiler möglich ist.
Das Spiel hat zwar noch ein paar Verbesserungsmöglichkeiten, aber unterm Strich muss man sagen, dass es wirklich nett aussieht und die Performance auch akzeptabel ist.
Jetzt würde mich interessieren, wie man das Ganze in Professionell umsetzt. Ein Timer, der alle 33 ms ein paar Bitmaps rumschiebt, genügt für dieses Spiel vielleicht, ist aber nicht gerade die feine englische Art.
Ich hätte spontan an OpenGL gedacht, doch kenne mich mit der Spieleentwicklung noch kein Stück aus, deshalb die Frage an Euch: Wie würde man hier vorgehen?

Viele Grüße
Croco

Aphton 27. Feb 2014 00:14

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
Das hier bezieht sich nicht wirklich direkt an deine Frage aber eher an - warum alle denken, dass Spieleprogrammierung in Delphi nicht geht oder etwas spezielles ist?!

[Edit]Das hier ist nicht nur an dich gerichtet. Ich habe das Gefühl, dass das ein allgemeine Konsens ist![/Edit]
Delphi, C++, Java, ... sind "Sprachen".. Eine Sprache ist ein Mittel zum Zweck.
Genauso wie ich momentan das Schreiben auf Deutsch ausnutze um dir meine Gedankengänge klarzumachen, benutzt man Programmiersprachen um Spiele (und vieles mehr) darin zu programmieren.
Ich könnte genauso gut eine vollständige Erörterung nach Schema machen. Nichts hält mich auf. Der springende Punkt ist, dass das ganze auch auf Englisch, Japanisch, Koreanisch usw. usf. geht!
Die Sprache an sich ist nicht der entscheidende Punkt!

So, zurück zu deiner ursprünglichen Frage..
Die Mechanik in Flappy Bird/Monkey ist im Grunde ganz einfach:
- man hat mehrere Objekte die von rechts nach links wandern
- der Protagonist bewegt sich rauf oder runter (wobei runter automatisch geschieht)

Technisch ganz billig:
- Ein Hintergrund Bitmap für die Szene
- Ein Flappy Bird Sprite für den Protagonisten
- und jeweils ein Bild für die Hindernisse

Hindernisse werden dann einfach zur Laufzeit berechnet (generiert) und zu der Spiellogik passend bewegt!
Kollisionsüberprüfung... kannst du hier nach suchen. Sollte auch ganz einfach realisierbar sein! Inputhandling ist auch ganz banal - für jeden Tap auf den Velocity-Vektor einen bestimmten Upvektor drauf addieren!

Wenn man dann mal das Grundgerüst fertig hat und es bereits spielbar ist, kann mit dem Aufpolieren begonnen werden.. Hierzu kannste dir ja mal das hier ansehen!

[Edit]
Zum Timer - in der Praxis macht man das so, dass man so oft es geht die Hauptlogik ausführt (Mainloop) und die visuell-logischen Updates in bestimmten Intervallen machen UND diese delte-Zeit auch mit berücksichtigt!
Am einfachsten bemüht man sich um den OnIdle Eventhandler in Application.
Dort drinnen führ man allmögliche updates dann aus!
Zeitmessung usw. muss auch stattfinden!
[/Edit]

Puke 27. Feb 2014 10:04

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
Das Spiel ist ziemlich banal...
Ich hab's vor kurzem auch geproggt (ohne dieses Projekt zu kennen und aufgrund der Idee von ein paar Kumpels, die mir erklärt haben dass das Spiel aus irgendeinem Grund aus den Stores genommen wurden (man merkt: ich besitze kein Smartphones))
Nimm dir ne firemonkey Anwendung und hau einfach ein Image rein. Baust ein paar Klassen zusammen. Und bewegst das Zeug, Lücken per random und gezeichnet wird auf eine bufferbitmap per canvas.

Opengl ist nicht zu empfehlen, weil es nicht so einfach konverteirbar ist. Außerdem soll fmx schon eine 3D hardwarebeschleunigung sein :cyclops:

Das Spiel hat mich eigentlich nur wegen des highscores und mehrspieler-Modus und den dazugehörigen Servern so viel zeit gekostet (2 Wochen), womit ich 12tage länger gebraucht habe als der progger von Flappy Bird.

MfG
Puke

mkinzler 27. Feb 2014 10:16

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
Zitat:

Nimm dir ne firemonkey Anwendung und hau einfach ein Image rein. ... wird auf eine bufferbitmap per canvas.
Geht es hier, darum die schlechteste aller Möglichkeiten zu finden? :mrgreen:
Zitat:

Opengl ist nicht zu empfehlen, weil es nicht so einfach konverteirbar ist.
OpenGL(ES) ist eigentlich auf allen Plattformen verfügbar, DirectX nur auf Windows
Zitat:

Außerdem soll fmx schon eine 3D hardwarebeschleunigung sein
Ob das hier etwas bringt?

Btw. der Code hat auch sonst gewisse Mängel ( z.B. ständige Abprüfung auf True und False, Verwendung von TImages als Speichermedium für Bildframes, anstatt in Imagelist...)

BUG 27. Feb 2014 11:18

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
Zitat:

Zitat von Puke (Beitrag 1249804)
das Spiel aus irgendeinem Grund aus den Stores genommen wurden

Der Entwickler hat seine plötzlich gewonnene Bekanntheit und den dazu gehörigen (Internet-)Hass nicht verkraftet.

Peter666 27. Feb 2014 19:46

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
Davon abgesehen gibt es jede Menge geniale Minispiele die man auch nach FMX portieren kann. Geht doch mal auf java4k.com und schaut euch die angebotenen Games mal an. Wenn ich etwas kurzweil (im Urlaub, oder weil die bessere Hälfte grade aus dem Haus ist und nix im Fernsehen läuft) brauche, habe ich seit geraumer Zeit diverse Spiele nach Delphi portiert und berücksichtigt man bestimmte Eigenheiten von Delphi bzw. von Java kriegt man die meisten der dort angebotenen Spiele an einem Abend (also pro Spiel) portiert. Ist vielleicht eine Macke von mir, aber ich persönlich finde so etwas äußerst entspannend und wenn das Kompilat dann auf allen Plattformen funktioniert auch sehr befriedigend. Angefangen hab ich damit mit XE2 und irgendwie bin ich von dem Trip nicht mehr losgekommen. Da sind so viele coole Projekte dabei, derzeit finde ich das hier sehr nett: http://www.java4k.com/index.php?acti...d=view&gid=486
Natürlich auch das von Gef: http://www.java4k.com/index.php?acti...d=view&gid=483
Wobei den Quellcode dann in Delphi umzusetzen wohl mehr als einen Abend braucht. Das Ergebnis ist atemberaubend im Vergleich zum Quellcode, der zwar leserlich, aber dennoch aufwändiger umzusetzen ist. Leider hab ich keinen Urlaub...

arnof 28. Feb 2014 07:31

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
Gibt es deine Umsetzungen irgendwo ? Stores ?

Leider bin ich nicht begabt genug für Spiele....

arnof 28. Feb 2014 07:33

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
Zitat:

Zitat von BUG (Beitrag 1249814)
Zitat:

Zitat von Puke (Beitrag 1249804)
das Spiel aus irgendeinem Grund aus den Stores genommen wurden

Der Entwickler hat seine plötzlich gewonnene Bekanntheit und den dazu gehörigen (Internet-)Hass nicht verkraftet.

Also wenn die Angaben von dem Stimmten (50.000 $ pro Tag an Werbeeinnahmen) dann währe mir das Facebookgemeker egal ....

milos 1. Mär 2014 09:43

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
Mir wäre dies bei so einer hohen Einnahme auch relativ egal, aber wenn man sich das Spiel mal genauer ansieht, sieht man dass die Grafiken für den Boden und den Hintergrund von Sonic (glaube ich jedenfalls) und die Röhren von Mario fast 1 zu 1 "nachgemacht" wurden.

Ob das Nintendo und Sega gefallen hat das man mit ihren "Ideen" so viel Geld gemacht hat?
Ich glaube der Typ hatte massive Copyright Probleme.

Puke 1. Mär 2014 11:07

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
Zwei 3D Engines passen imho nicht so gut zusammen?
Außerdem verschnellert fmx angeblich den Zugriff per canvas! Und eine bessere Methode wird es dann wahrscheinlich auch nicht in der Zeit geben!

mkinzler 1. Mär 2014 12:11

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
Zitat:

Zitat von Puke (Beitrag 1250093)
Zwei 3D Engines passen imho nicht so gut zusammen?

Was für 2 3D Engines? Weder D3D noch OpenGL(ES) sind eine 3D-Engines. Und FMX schon 3 Mal nicht
Zitat:

Außerdem verschnellert fmx angeblich den Zugriff per canvas! Und eine bessere Methode wird es dann wahrscheinlich auch nicht in der Zeit geben!
Ein Fahrrad ist auch schneller wie ein Dreirad kann aber trotzdem nicht mit einem Motorrad mithalten.

BUG 1. Mär 2014 12:25

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
Zitat:

Zitat von milos (Beitrag 1250091)
Ich glaube der Typ hatte massive Copyright Probleme.

Allen Berichten zufolge stimmt das nicht. Der arme Kerl konnte sich entscheiden zwischem dem Geld und seiner geistigen Gesundheit.

Facebook-Gemecker ist stark untertrieben; Online-Mobbing auf Stereoiden trifft es vermutlich besser. Selbst erfahrene Online-Persönlichkeiten lassen es gelegentlich zu sich durch und haben einen kleinen Zusammenbruch ... siehe den aktuellen Fall von TotalBiscuit.

Stell dir vor, du bist als Einzelperson schlagartig eine Berühmtheit ohne PR-Manager. Viele in deinem Land kennen dich plötzlich und das gesamte Internet (Facebook, Twitter, Blogs, Kommentare zu Artikeln und Videos) ist voll mit Hasstiraden, wie schlecht und geklaut dein Arbeit sei ... und was für ein schlechter Mensch du bist.

Crocotronic 1. Mär 2014 19:20

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
Ich bin grad dabei den Code noch ein bisschen zu optimieren. Dazu gehört die Positionen von den Pipes in Abhängigkeit der Bildschirmhöhe zu berechnen (bis jetzt liegen die Werte hardgecoded vor). Obwohl die mathematische Aufgabe dahinter nicht wirklich komplex ist, bekomm ich das grad nicht auf die Reihe :stupid:

Wir haben ein Rohr, das ein bisschen kürzer ist als die "Spielfläche". Das Rohr soll oben und unten so platziert werden, dass in der Mitte ein zufällig großer Raum ist, wo man durchfliegen muss (FlappyBird eben). Die Röhren müssen immer im Sichtbereich sein.
Folgenden Code habe ich mir ausgedacht, macht aber falsche Berechnungen, da die Röhren nicht immer im Sichtbereich sind:
Delphi-Quellcode:
var PipeRange,GapSize: Integer;
    YOff,YMinOff,YMaxOff: Integer;
begin

   PipeRange:= (GamePanelHeight mod PIPE_HEIGHT); // Wie Viel Platz ist verfügbar, um nach oben oder unten zu verschieben
   GapSize:= RandomRange(120,170); // die Lücke zum durchfliegen

   YMinOff:= -PipeRange+Round(GapSize/2);
   YMaxOff:= GamePanelHeight-Round(GapSize/2);
   YOff:= RandomRange(YMinOff,YMaxOff);

   FPipeAPos:= (YOff-PIPE_HEIGHT)-Round(GapSize/2)+PipeRange;
   FPipeBPos:= (YOff-PipeRange)+Round(GapSize/2);
   {...}

Puke 2. Mär 2014 11:12

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
@ mkinzler
Fmx baut auf d3d auf!
Also nutzt man dann d3d und opengl zur selben Zeit. Wenn ich opengl benutzen wollte, dann ohne fmx, also auch ohne delphi!

mkinzler 2. Mär 2014 12:04

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
Nur die Windowsversion, die Versionen für MacOSX und Linux( wenn sie mal kommt) basieren auf OpenGL und die für iOS und Android auf OpenGLES.
Ursprünglich basierte es aber auf GL ( VGScene enthielt sogar Code aus GLScene)

http://escargot.la.coocan.jp/SimpleS...OpenGL_FMX.pas
http://francois-piette.blogspot.de/2...iremonkey.html
http://blogs.embarcadero.com/tlabord...udi-episode-7/

http://members.adug.org.au/2012/01/0...in-firemonkey/
http://www.fmxexpress.com/wp-content...elEditor3D.zip

http://www.afterwarp.net/products/asphyresphinx3
http://sourceforge.net/projects/glscene/

http://www.micrel.cz/Dx/

Puke 2. Mär 2014 14:55

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
I Know! (Auch ich kann F1 drücken)
Wird langsam OT.

Gruß Puke

Peter666 2. Mär 2014 18:34

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
Liste der Anhänge anzeigen (Anzahl: 1)
Full Ack,

bevor das gänzlich in eine andere Richtung geht, anbei der portierte Code von Griefer4k (http://www.java-gaming.org/index.php?topic=25113.0). Leider ist der lahm wie Hölle unter Android, aber ich denke mal das kann man optimieren - auch sehen die Häuser in meinem Port nicht ganz wie Häuser aus. Liegt wohl auch daran das der Code nicht vorhanden war und ich den Bytecode übersetzt habe.
Das ganze ist kein richtiges Spiel, macht aber saumäßig Spaß die Häuser in die Luft zu jagen :) Unter Windows und OSX geht der Code anständig, iOS hab ich nicht probiert.

arnof 4. Mär 2014 16:29

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
Zitat:

Zitat von Crocotronic (Beitrag 1250123)
Ich bin grad dabei den Code noch ein bisschen zu optimieren. Dazu gehört die Positionen von den Pipes in Abhängigkeit der Bildschirmhöhe zu berechnen (bis jetzt liegen die Werte hardgecoded vor). Obwohl die mathematische Aufgabe dahinter nicht wirklich komplex ist, bekomm ich das grad nicht auf die Reihe :stupid:

Wir haben ein Rohr, das ein bisschen kürzer ist als die "Spielfläche". Das Rohr soll oben und unten so platziert werden, dass in der Mitte ein zufällig großer Raum ist, wo man durchfliegen muss (FlappyBird eben). Die Röhren müssen immer im Sichtbereich sein.
Folgenden Code habe ich mir ausgedacht, macht aber falsche Berechnungen, da die Röhren nicht immer im Sichtbereich sind:
Delphi-Quellcode:
var PipeRange,GapSize: Integer;
    YOff,YMinOff,YMaxOff: Integer;
begin

   PipeRange:= (GamePanelHeight mod PIPE_HEIGHT); // Wie Viel Platz ist verfügbar, um nach oben oder unten zu verschieben
   GapSize:= RandomRange(120,170); // die Lücke zum durchfliegen

   YMinOff:= -PipeRange+Round(GapSize/2);
   YMaxOff:= GamePanelHeight-Round(GapSize/2);
   YOff:= RandomRange(YMinOff,YMaxOff);

   FPipeAPos:= (YOff-PIPE_HEIGHT)-Round(GapSize/2)+PipeRange;
   FPipeBPos:= (YOff-PipeRange)+Round(GapSize/2);
   {...}

Deine Änderungen hat es ja bis in die höchsten blogs geschafft :thumb:

himitsu 16. Mär 2014 22:02

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
War Flappy Bird nicht kostenlos?

Grade die Werbung gesehn "Sende BIRD an die 12345 ..." (für nur 1,99 im Monatsabo)


Jetzt machen selbst die da noch mit, wobei die Grafik irgendwie etwas anders aussah.

arnof 17. Mär 2014 10:52

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
jamba: gibt es das noch :roll:

mkinzler 17. Mär 2014 10:55

AW: Flappy Firemonkey - Spiele mit Delphi XE5
 
Zitat:

Zitat von arnof (Beitrag 1252216)
jamba: gibt es das noch :roll:

Abkassierergeschäftsmodelle sterben nie aus. :(


Alle Zeitangaben in WEZ +1. Es ist jetzt 21:35 Uhr.

Powered by vBulletin® Copyright ©2000 - 2021, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2021 by Daniel R. Wolf