Hallo,
ich möchte ein
Point 'n' Click Adventure Spiel mit Firemonkey entwickeln. Für jede Szene wird in einem Form ein Hintergrund-Bild angezeigt (TImage). Die interaktiven Objekte wie Gegenstände, Schalter, Türen, etc. sind ebenso einfache TImages mit diversen Effekten. Alle Bilder sind hochaufgelöst. Das funktoniert auch wunderbar.
Das Problem ist, dass die (zukünftigen) Spieler verschiedene Auflösungen haben können die entweder größer oder kleiner sind. Widescreen oder Non-Widescreen.
Dafür habe ich folgende Möglichkeiten in betracht gezogen:
Möglichkeit 1:
Die Größen & Positionen der Objekte werden für die aktuelle Auflösung berechnet. Das heißt ich designe eine Szene z. B. als 800x600 Pixel. Wenn ein Objekt die Koordinate X=20 Y=40 hat rechne ich diese "Ursprungs"-Angaben einfach auf die neue Auflösung "hoch". Diese Möglichkeit ist zum einen viel Aufwand und zum anderen vermute ich das insbesondere bei Widescreen-Monitoren die Objekte seltsam wirken.
Möglichkeit 2:
Ich platziere sowohl Hintergrund als auch Objekte auf einem TLayout oder TPanel und verwende die Scale-Eigenschaft. Dann muss ich "nur" das Verhältnis von Design-Auflösung und Laufzeit-Auflösung berechnen und der Eigenschaft zuweisen. Bei meinen Versuchen mit der Scale-Eigenschaft war die Bild-Qualität ganz gut aber nicht perfekt. Hier stellt sich die Frage: Wie genau muss ich das umrechnen? Was muss ich berücksichtigen? Weiß jemand wie der Algorithmus geschrieben werden muss? Oder gibt es bereits eine Funktion oder
Unit die so eine Berechnung durchführen kann?
Möglichkeit 3:
Ich belasse alle Koordinaten & Größen "as designed" und schalte einfach die Auflösung des Montitors um. In meinen Tests geht das zwar aber Objekte sind an falschen Positionen und die hochauflösenden Grafiken werden nicht so hochwertig angezeigt wie sie sein sollten...
Welche Variante soll ich verwenden? Und was genau muss ich beachten? Kennt ihr noch andere Möglichkeiten? Oder gibt es Units/Komponenten die genau für sowas geeignet sind? Mir ist klar das es für Delphi einige Spiel-Development-Frameworks gibt aber ich hatte gehofft auf so etwas verzichten zu können weil das Spiel von der Logik her relativ einfach zu entwickeln ist. Da wäre eine Rendering-Engine etwas übertrieben? Oder nicht? Außerdem basiert Firemonkey doch sowieso auf einer 3D-Engine...