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

wluc-16

Treue Seele

  • »wluc-16« ist der Autor dieses Themas

Beiträge: 212

Wohnort: in der Nähe von Bielefeld :D

Beruf: Schüler

  • Private Nachricht senden

1

14.10.2013, 18:02

Probem bei Rotation des Spielers zur Mausposition

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. :D

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 :thumbsup:

ERROR

Alter Hase

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

2

14.10.2013, 18:07

Also ich denke mal dass dein Sprite um ein Vielfaches von 90° gedreht ist. Dann musst du einfach die Gradzahl draufrechnen/abziehen.

Aber du kannst dein Bild, das du als Textur benutzt auch direkt anders drehen, einfach in der Windows Fotoanzeige öffnen(Standardmässig doppelklick) und drehen.

wluc-16

Treue Seele

  • »wluc-16« ist der Autor dieses Themas

Beiträge: 212

Wohnort: in der Nähe von Bielefeld :D

Beruf: Schüler

  • Private Nachricht senden

3

14.10.2013, 18:23

Endlich auch mal jemand aus Ostwestfalen ;)

Wow, so schnell hätte ich keine Antowrt erwartet, danke!
Das stimmt natürlich, das ist schön einfach (klappt natürlich auch), aber irgendwie kann das ja nicht sein, dass die rechte Seite das Gesicht ist, oder? :D

ERROR

Alter Hase

Beiträge: 417

Wohnort: Paderborn

Beruf: Informatik Student

  • Private Nachricht senden

4

14.10.2013, 18:29

Ich habe so etwas selber erst kürzlich gemacht und ich erkläre es mir so, dass die Textur eingelesen wird und dann eine Rotation von 0 hat und SFML kann ja nicht erkennen welche Seite du gerne als Gesicht haben möchtest, deswegen wird davon ausgegangen, dass in einer bestimmten Richtung (anscheinend rechts) das Gesicht ist und dann muss man es eben anpassen.

Ja Ostwestfalen ist ein schöner Fleck ;)

wluc-16

Treue Seele

  • »wluc-16« ist der Autor dieses Themas

Beiträge: 212

Wohnort: in der Nähe von Bielefeld :D

Beruf: Schüler

  • Private Nachricht senden

5

14.10.2013, 18:32

EDIT: Nehm' ich. :D Danke.
Zum Richtungsvektor ist mir folgendes eingefallen:
Ich nehme einfach den Kosinus des Winkels und die normalisierte Ausgangsrichtung (also den Nach-oben-Vektor) und forme dann das Punktprodukt auf den anderen Vektor um.
Nur: Wie forme ich das um? Da wir Vektoren in der Schule noch nicht hatten, habe ich mich damit noch nicht außerhalb der Spieleprogrammierung beschäftigt.

6

14.10.2013, 18:47

Es ist so wie beim geodreieck. 0° ist rechts (also ist das gesicht rechts) 90° oben usw. :)

Zitat

Die wichtigste Eigenschaft eines Programmierers ist vorausschauende Faulheit.


Werbeanzeige