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

1

30.07.2013, 01:05

SFML - Sprite zur Mausposition bewegen

Hallo alle zusammen, ich bin neu hier im Forum und habe eine Frage bezüglich meines Projektes. Ich versuche mich gerade an einem Top Down Shooter und versuche im Moment ein Sprite beim Mausklick zu der Mausposition zu bewegen. Ich habe es schon geschafft, das Spieler Sprite in die Richtung der Maus zu rotieren aber ich habe keine Ahnung wie ich das Sprite dahin bewegen soll. Ich denke mal mir fehlen die Kenntnisse in Mathe um das machen, deshalb bräuchte ich eure Hilfe bzw eure Vorschläge.

LG Abcd00186

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

2

30.07.2013, 01:17

Mach mal diese Übung: https://nachoman.de/index.php/tutorialsl…-kapitel-2.html (oder zumindest durchlesen und den letzten Teil der Übung machen)
Du kannst natürlich auch sf::Vector2f benutzen.
Am Ende der Übung hast du einen Bewegungsvektor und seine Länge. Teilst du den Bewegungsvektor durch seine Länge erhältst du einen Richtungsvektor(der fast genau die Länge von einem Pixel hat). Diesen mulitplizierst du mit der Frametime und der Geschwindigkeit in Pixel/s. Dann erhältst du einen neuen Bewegungsvektor, den du einfach der move-Methode des Sprites übergibst.

Edit: achja, endschuldige bitte den dunklen Hindergrund. Ein neues Design ist bereits in Arbeit!
"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?

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »NachoMan« (30.07.2013, 01:25)


3

30.07.2013, 01:31

Das ging ja schnell :) Vielen Dank, ich werde die Übung später ausprobieren.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

4

30.07.2013, 01:39

Die Rechnung für den Nachtdienst kommt per PM :thumbsup:
"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?

H5::

Treue Seele

Beiträge: 368

Wohnort: Kiel

  • Private Nachricht senden

5

30.07.2013, 07:05

RE: SFML - Sprite zur Mausposition bewegen

Ich denke mal mir fehlen die Kenntnisse in Mathe um das machen...
Dann dürfte auch [The Nature of Code] für dich interessant sein, sofern Englisch keine Hürde ist.
:love: := Go;

6

30.07.2013, 12:00

Wow die Seite ist echt gut, genau sowas habe ich gesucht :)

7

04.08.2013, 19:11

So, ich konnte mich erst jetzt mit deinem Tutorial beschäftigen da ich die letzten Tage wenig Zeit hatte. Ich bin deinem Tutorial gefolgt und nun habe ich wieder ein Problem: Das Sprite soll sich ja zur Maus bewegen, aber bei mir ist es jetzt so das das Sprite so wie bei setPosition sofort bei der Maus ist(Auch nicht direkt an der Maus sondern ca 100 pixel weiter links).

Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
void Game::shoot(float frametime)
{
    if(sf::Mouse::isButtonPressed(sf::Mouse::Left))
    {
    sf::Vector2f playerPos;
      sf::Vector2i mousePos;

      playerPos = player.getPosition();
      mousePos  = sf::Mouse::getPosition();

      int positionX = 0;
      int positionY = 0;

      positionX = playerPos.x;
      positionY = playerPos.y;

      int destinationX = 0;
      int destinationY = 0;

      destinationX = mousePos.x;
      destinationY = mousePos.y;

    int moveVectorX = destinationX - positionX;
      int moveVectorY = destinationY - positionY;

      int squareX = moveVectorX*moveVectorX;
      int squareY = moveVectorY*moveVectorY;

      float distance = std::sqrt(static_cast<float>(squareX + squareY));

      moveVectorX / distance;
      moveVectorY / distance;

      sf::Vector2f move(moveVectorX,moveVectorY);
      move * frametime;

      bullet.move(move);
    }   
}


Wahrscheinlich hab ich was falsch verstanden oder den Code falsch umgesetzt, ich bin noch nicht so erfahren im Umgang mit Vectoren.

patrick246

Treue Seele

Beiträge: 328

Wohnort: nahe Heilbronn/BW

Beruf: TG Profil Informatik-Schüler

  • Private Nachricht senden

8

04.08.2013, 19:14

was bringt dir diese Zeile hier?

C-/C++-Quelltext

1
move * frametime;

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

9

04.08.2013, 19:26

Ein typischer Fall von "zu wenig in Konsole geübt".
"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?

10

04.08.2013, 19:27

NachoMan hat geschrieben das ich das machen soll. Die Frametime verhindert ja das die Bewegung auf langsameren Pcs anders läuft als auf meinem.

Werbeanzeige