![]() |
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 |
AW: Firemonkey Retro Spiel
Liste der Anhänge anzeigen (Anzahl: 1)
Hier der Commodore Font.
Der Font ist Freeware. |
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. ![]() |
AW: Firemonkey Retro Spiel
Zitat:
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! |
AW: Firemonkey Retro Spiel
![]() |
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 11:16 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