Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   GUI-Design mit VCL / FireMonkey / Common Controls (https://www.delphipraxis.net/18-gui-design-mit-vcl-firemonkey-common-controls/)
-   -   Firemonkey Retro Spiel (https://www.delphipraxis.net/165914-firemonkey-retro-spiel.html)

backdraft 21. Jan 2012 11:23

Firemonkey Retro Spiel
 
Hallo zusammen,

ich beschäftige mich seit ein paar Tagen mit dem neuen Produkt von Embarcadero.
Als Übung habe ich mein alten Retro C64 Spiel ausgegraben, und wollte es nach FireMonkey portieren.
Es handelt sich um eine Art Jump and Run.

Hierbei ist Step 1 die Portierung auf FM für Windows, und Step 2 MacOS kompatibel zu werden.
Dadurch fehlen mir einige Sachen, die zwar in FM für Windows nutzbar wären, aber nicht unter MacOS.

Hierbei habe ich noch diverse Probleme, die ich einfach mal auflisten wollte.
Ich denke der Thread ist für alle interessant, die vorhaben ein 2D Spiel zu programmieren.

Generell habe ich auch noch keine "große" Literatur gefunden, was man so beim Sprung von Delphi nach FM machen muss, bzw. was sich alles so geändert hat. Für Prism gibt's ja auch ein wenig Infos ... Vielleicht hab ich auch nur schlecht gegooglet.
Auch wenn ich in der Hilfe suche, findet man meistens nur Delphi Hilfen, und nicht FM Hilfen.

Problem 1: Bitmap BeginScene
Es scheint, als muss man bevor man via Canvas auf ein Bitmap zeichnet immer BeginScene und später EndScene nutzen.
Lasse ich es weg, funktioniert es nicht. Da das Projekt geschachtelt aufgebaut ist, zeichenen diverse Unterfunktionen auch auf ein Bitmap. Hierbei darf ich aber kein BeginScene erneut aufrufen, sonst macht er gar nichts mehr...
Mache ich was falsch?

Problem 2: QueryPerformaceCounter
Um das Spiel flüssig spielen zu können, führt der Application.OnIdle immer eine Funktion aus, die die nächste Position im Spiel berechnet.
Nach der Funktion kommt ein Sleep(20) um nicht 100% CPU Auslastung zu verursachen. Damit komme ich theoretisch auf 50FPS.
Um zu wissen, wie weit sich der Spieler und die Gegner bewegen müssen, nutze ich in der Win32 Version den HighPerformanceTimer.
Damit wird die Bewegung der Spieler schön flüssig.
Gibt es hierzu eine Funktion für MacOS, oder generell für FM?
Hat jemand vielleicht einen anderen Ansatz?

Problem 3: Joystick
Unter Win32 nutze ich die MMSystem Unit um mit dem Joystick zu kommunizieren. Die gibt's leider auch nicht unter MacOS.

Problem 4: Tastatur Handling
Bisher fange ich direkt die Tastaturmessages ab, und führe selbst einen Array, welche Taste derzeit gedrückt ist, und welche nicht.
Dieses benötige ich für die Steuerung des Spielers.
Aufgrund diverser Sondertasten klappt das OnKeyDown/Up Event nicht.
Wie funktioniert sowas unter FM?

Problem 5: Transparent ein Bitmap zeichnen:
Unter Win32 habe ich damals eine Funktion programmiert, die ein Bitmap (256 Farben) mit seiner Hintergrundfarbe auf das Spielfeld zeichnet.
Sowas muss es doch fertig in FM geben? Die frühere Eigenschaft Transparent beim Bitmap finde ich nicht.

Problem 6: Dynamisch Fonts laden
Bis jetzt habe ich dynamisch einen Commodore 64 Font nachgeladen (AddFontResource). Gibt's hier auch eine Funktion in FM?
Komischerweise klappt der Commodore Font unter FM aber auch nicht mehr, wenn ich ihn in die Schriften installiere.
Ich habe auch schon andere TTF Fonts probiert, aber keinen gefunden, der klappt.
Der zweite dynamische "Fairlight" Font, funktioniert problemlos, wenn ich in installiere.

Problem 7: Bitmaps in Resourcen
In Delphi kann ich via LoadFromResource ein Bitmap aus meiner EXE laden. Gibt's sowas in FM nicht?

Problem 8: MP3 Wiedergabe
Früher habe ich einfach die bass.dll genutzt um den Sound wiederzugeben. Hat FM sowas dabei?

Bin für jede Hilfe dankbar ...
Oliver

backdraft 21. Jan 2012 11:28

AW: Firemonkey Retro Spiel
 
Liste der Anhänge anzeigen (Anzahl: 1)
Hier der Commodore Font.
Der Font ist Freeware.

mkinzler 21. Jan 2012 11:46

AW: Firemonkey Retro Spiel
 
FMX funktioniert etwas anders als die VCL. Es wäre grundsätzlich zu überlegen, das Spiel nicht 1:1 umzusetzen, sondern zu versuchen die neuen Fähigkeiten des Frameworks zu verwenden.
FMX basiert auf Vektorgrafik, deshalb würde ich nicht auf direkt auf dem Canvas/Bitmaps zeichen.

Hier sind einige Artikel zu FireMonkey zusammengetragen

backdraft 21. Jan 2012 11:54

AW: Firemonkey Retro Spiel
 
Zitat:

Zitat von mkinzler (Beitrag 1146977)
FMX funktioniert etwas anders als die VCL. Es wäre grundsätzlich zu überlegen, das Spiel nicht 1:1 umzusetzen, sondern zu versuchen die neuen Fähigkeiten des Frameworks zu verwenden.
FMX basiert auf Vektorgrafik, deshalb würde ich nicht auf direkt auf dem Canvas/Bitmaps zeichen.

Hier sind einige Artikel zu FireMonkey zusammengetragen

Danke für die Info,
hatte ich auch vergessen zu schreiben.
Plan ist zuerst die 1:1 Umsetzung, um überhaupt ein Ergebnis zu haben.
Danach kommt die Optimierung auf FMX Vorteile ... Vektor, Skaling, usw...
Soll halt ein Lernprojekt werden!

mkinzler 21. Jan 2012 12:09

AW: Firemonkey Retro Spiel
 
Asphyre Sphinx 2 wäre vielleicht auch einen Blick wert

BUG 21. Jan 2012 13:35

AW: Firemonkey Retro Spiel
 
@Problem 1
Entweder du zeichnest nur zu eine Zeitpunkt und rufst dafür global die Funktionen auf oder du kapselst die Aufrufe und zählst dabei (jeweils nur den ersten und den letzten Ruf ausführen).


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