Hallo zusammen,
ich arbeite mich seit paar Tagen in SFML ein. Habe auch schon einige Tutorials etc. durch gearbeitet und angefangen einen kleinen Pong-Klon zu schreiben. Für das Spiel habe ich Grafiken für den Ball und den Balken erstellt und diese als Sprite eingebunden. Danach habe ich die Bewegung des Balken implementiert. Das Verhalten des Balkens habe ich so programmiert, dass man diesen nicht über den Rand hinaus bewegen kann.
Hier der Code:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
float elapsedTime = window.GetFrameTime();
//der Balken darf nur nach links und rechts bewegt werden.
if(window.GetInput().IsKeyDown(sf::Key::Left)) {
//Prüfe, ob der Balken die linke Seite des Fensters erreicht hat und stoppe
//die Bewegung.
float left_x = s_balken.GetPosition().x;
if(left_x > -0) {
s_balken.Move(-300 * elapsedTime, 0);
}
}
if(window.GetInput().IsKeyDown(sf::Key::Right)) {
//das selbe für die rechte seite.
float right = window.GetDefaultView().GetRect().Right - 150;
if(s_balken.GetPosition().x <= right) {
s_balken.Move(300 * elapsedTime, 0);
}
}
|
Das ganze funktioniert soweit auch aber der Code bzw. der Vorgang für die Rechte Seite ist etwas unschön. Für den Linken Fensterbereich reicht es, dass ich prüfe, ob der Balken bis zur Position -0 gekommen ist. Mir stellt sich jetzt nur die Frage, ob es eine bessere Möglichkeit gibt, die exakte Position des rechten Fensterbereiches zu ermitteln, anstatt auf ungefairen Werten basierend wie in dieser Zeile:
|
C-/C++-Quelltext
|
1
|
float right = window.GetDefaultView().GetRect().Right - 150;
|
Hat da jmd eine Idee?
grüße
Saik0