Guten Tag.
Ich habe folgendes Problem:
Auf
dieser Seite habe ich den Algorithmus zum Drehen eines Sprites zur Mausposition gefunden, allerdings implementiert in XNA.
Hier erstmal mein Code:
|
C-/C++-Quelltext
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
int main()
{
sf::RenderWindow window(sf::VideoMode(800, 600), "Test");
sf::Texture playerTexture;
playerTexture.loadFromFile("player.tga");
sf::Sprite playerSprite(playerTexture);
playerSprite.setOrigin(playerTexture.getSize().x / 2, playerTexture.getSize().y / 2);
playerSprite.setPosition(400, 300);
sf::Event event;
while(window.isOpen()){
// Events behandeln
playerSprite.setRotation((std::atan2f(sf::Mouse::getPosition(window).y - playerSprite.getPosition().y, sf::Mouse::getPosition(window).x - playerSprite.getPosition().x)) * (180 / 3.14159265359));
// zeichnen
}
}
|
Für diejenigen, die das auch schon versucht haben und das Sprite scheinbar vollkommen unabhängig von der Mausposition rotiert ist:
|
C-/C++-Quelltext
|
1
|
sf::Mouse::getPosition(window) // Position relativ zum Fenster
|
Übersieht man schnell
So, hier das Problem:
Die rechte Seite des Spielers wird anstatt der oberen Seite als "Gesicht" angesehen. Der Spieler dreht sich also immer mit der rechten Seite zur Maus. Liegt das vielleicht an den Unterschieden zwischen XNA und SFML?
Ich hoffe, dass jemand weiß, wo der Fehler liegt.
Und so nebenbei (ich hoffe ich darf die Frage anfügen, weil es ja auch damit zu tun hat):
Wie bekomme ich den Richtungsvektor des Spieler für Bewegungen und Schüsse.
Ich habe mich da noch nicht informiert, aber vielleicht kann mir da auch jemand helfen.
Danke schonmal