Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

1

30.11.2014, 23:47

[C++ & SFML] Unterschiedliche Fenstergrößen

Mein SFML-Spiel soll, wenn es fertig ist im Vollbildmodus laufen und das natürlich auch auf Rechnern mit unterschiedlich großen Bildschirmen. Zum Einstellen unterschiedlicher Fenstergrößen habe ich nun angefangen ein Optionsmenü zu implementieren. Wenn ich nun die Fenstergröße z.B. auf 1680x1050 umstelle (bisher hatte ich die Fenstergröße auf 1920x1080 eingestellt) wird mein Fenster verkleinert und der Inhalt korrekt skaliert, die Hitboxen bleiben jedoch bei den alten Werten, folglich funktionieren Menüs und Kollisionsabfragen nicht mehr korrekt. Doch wie muss ich nun die Hitboxen manipulieren damit sie wieder passen?

Hier ist der Code der ausgeführt wird wenn der Button zum Verändern der Fenstergröße aktiviert wird:

C-/C++-Quelltext

1
2
3
MainWindow.close ();
MainWindow.create (sf::VideoMode (1680, 1050, 32), "SFML_Game 3 - SwoermGames v.0.4 PreAlpha", sf::Style::Default);
MainWindow.setVerticalSyncEnabled (true);


Vielen Dank fürs durchlesen.

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

KeksX

Community-Fossil

Beiträge: 2 107

Beruf: Game Designer

  • Private Nachricht senden

2

30.11.2014, 23:55

Wie erzeugst du die denn? Erzeug sie halt neu.

Alternativ würd ich mit localbounds arbeiten, dann musst du da im Endeffekt gar nichts machen.
WIP Website: kevinheese.de

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

3

01.12.2014, 00:21

Bei Änderung der Größe des Fensters werden ja die Sprites verzerrt, was ja an sich richtig ist. D.h. ist muss die Hitbox genau so verzerren. Die Frage ist wie manipuliere ich die Werte der Hitbox damit sie wieder passt.
Wie würde denn deine localbounds-Methode aussehen?

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

4

01.12.2014, 01:07

Hierbei wohl mit simpler Prozentrechnung. Wenn man davon ausgeht, dass es einen "Ursprung", ein Vektor mit der Breite und Höhe, auf der alles basiert, §\overrightarrow{v}=(1600, 1050)§, und einen "Status quo", ein Vektor mit der neuen Breite und Höhe, hier §\overrightarrow{w}§, gibt, dann lässt sich ein Vektor §\overrightarrow{p}=\left(\frac{\overrightarrow{w_x}}{\overrightarrow{v_x}}, \frac{\overrightarrow{w_y}}{\overrightarrow{v_y}}\right)§ definieren, mit dem es nur noch zu multiplizieren gilt. Also jegliche Bounds müssen damit multipliziert werden und joa.

MfG
Check

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

Beruf: (Nachhilfe)Lehrer (Mathematik, C++, Java, C#)

  • Private Nachricht senden

5

01.12.2014, 02:45

Da wird doch nur die Darstellung verzerrt. Das dürfte garkeinen Einfluß auf die Logik haben.
"Der erste Trunk aus dem Becher der Erkenntnis macht einem zum Atheist, doch auf dem Grund des Bechers wartet Gott." - Werner Heisenberg
Biete Privatunterricht in Berlin und Online.
Kommt jemand mit Nach oMan?

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

6

01.12.2014, 06:39

Wie machst Du denn die Hitbox-Tests und wie machst Du die Skalierung? Eigentlich haben Elemente in SFML alle selbst LocalBound-Properties, die man abfragen kann und die werden eigentlich auch immer mitskaliert.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Lares

1x Contest-Sieger

  • Private Nachricht senden

7

01.12.2014, 11:15

Erstelle das Fenster nicht neu. Das Fenster sollte auf die Standardgröße erstellt werden und anschließend über die Methoden setTitle(), setSize(), etc angepasst werden. Dadurch übernimmt SFML die Skalierung des Spiels passend zur Fenstergröße. Das sollte auch dein Problem mit der Kollision beheben.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

8

01.12.2014, 11:18

Oder auch nicht, je nachdem, wie er die denn berechnet.
Teamleiter von Rickety Racquet (ehemals das "Foren-Projekt") und von Marble Theory

Willkommen auf SPPRO, auch dir wird man zu Unity oder zur Unreal-Engine raten, ganz bestimmt.[/Sarkasmus]

Swoerm

Alter Hase

  • »Swoerm« ist der Autor dieses Themas

Beiträge: 451

Wohnort: 127.0.0.1

  • Private Nachricht senden

9

01.12.2014, 15:09

Hierbei wohl mit simpler Prozentrechnung. Wenn man davon ausgeht, dass es einen "Ursprung", ein Vektor mit der Breite und Höhe, auf der alles basiert, , und einen "Status quo", ein Vektor mit der neuen Breite und Höhe, hier , gibt, dann lässt sich ein Vektor definieren, mit dem es nur noch zu multiplizieren gilt. Also jegliche Bounds müssen damit multipliziert werden und joa.

MfG
Check
Das multiplizieren der Breite/Höhe hatte ich bereits versucht. Mir viel jedoch gerade dank deines Beitrags auf, dass ich auch die Position multiplizieren muss. Jetzt scheint es zu funktionieren (zu mindestens bei der GUI).

Erstelle das Fenster nicht neu. Das Fenster sollte auf die Standardgröße erstellt werden und anschließend über die Methoden setTitle(), setSize(), etc angepasst werden. Dadurch übernimmt SFML die Skalierung des Spiels passend zur Fenstergröße.
Hab' ich geändert, danke.

Edit:

Ich habe jetzt alles so weit angepasst und es scheint nun wunderbar auch auf Rechnern zu laufen die andere Auflösungen besitzen. Danke für die wie immer kompetente und schnelle Hilfe. :thumbsup:

C-/C++-Quelltext

1
2
    /* Keep the compiler happy */
    return(0);

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Swoerm« (01.12.2014, 17:36)


Werbeanzeige