Einzelnen Beitrag anzeigen

backdraft

Registriert seit: 19. Apr 2005
Ort: Hückeswagen
333 Beiträge
 
Delphi 11 Alexandria
 
#1

Firemonkey Retro Spiel

  Alt 21. Jan 2012, 11:23
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
Oliver
  Mit Zitat antworten Zitat