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/)
-   -   Delphi Point 'n' Click Adventure mit Firemonkey (https://www.delphipraxis.net/204085-point-n-click-adventure-mit-firemonkey.html)

Andreas L. 22. Apr 2020 09:19

Point 'n' Click Adventure mit Firemonkey
 
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...

Sinspin 22. Apr 2020 11:07

AW: Point 'n' Click Adventure mit Firemonkey
 
Hallo. Bei Widescreens sind an den Seiten oft schwarze Streifen. Es wird also nicht das ganze Bild genutzt. Ansonsten lieber mit großen Bildern arbeiten und kleiner skalieren. Mit den passenden Routinen sehen die dann auch schön aus. Die Positionen der clickbaren Elemente müssen dann die gleiche Skalierung bekommen.

Die meißten Spiele bieten eine bestimmten Satz an Auflösungen an für die sie optimiert sind. Dann wurden meißt auch eigene Bildersets pro Auflösung erstellt. In allen anderen Fällen sind dann halt Flächen nicht genutzt.
Arbeitet man mit 3D besteht das Problem ja nicht da die Szene eh komplett scalierbar ist.


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