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

10.05.2015, 15:11

Schießen in allen Richtungen

Guten Tag Community,

Ich habe jetzt seit mehreren Tagen das Problem das sich meine Munition welche ich aus einer Waffe schießen möchte um mehrere 100px verschiebt ich weiß jedoch nicht wieso.
Was soll passieren? Nach dem links klick soll die Waffe Munition abfeuern in Richtung der Maus Position.

Ich habe auch schon das Forum durchsucht und ein paar nützliche Informationen gefunden aber keine davon funktioniert...

Mein bisheriger Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
sf::Vector2f weaponPos = weaponSprite->getPosition();
        sf::Vector2i mousePos = sf::Mouse::getPosition();

        float positionX = weaponPos.x;
        float positionY = weaponPos.y;

        float destinationX = (float)mousePos.x;
        float destinationY = (float)mousePos.y;

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

        float squareX = moveVectorX*moveVectorX;
        float squareY = moveVectorY*moveVectorY;

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

        float moveX = moveVectorX / distance;
        float moveY = (moveVectorY / distance);

        bulletSprite->move(moveX, moveY);


Vielleicht weiß ja einer von euch was ich falsch mache : )

2

10.05.2015, 15:53

Ich kann jetzt nichts falsches erkennen. Was macht es denn was es nicht machen soll?

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

4

10.05.2015, 16:09

Kann mich jetzt auch irren, aber ich meine, dass du ein Offset brauchst, da das Sprite das sich bewegt eine gewisse Größe hat. Wenn sich das Sprite entlang eines Vektors bewegt, bewegt sich der Punkt 0,0 (x und y Koordinate sind immer das Linke-Obere Eck) des Sprites in diese Richtung und nicht der Mittelpunkt des Sprites.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

5

10.05.2015, 16:18

Jup, der Nullpunkt eines Sprites ist links oben. Das lässt sich über setOrigin ändern. Ob das hier aber das eigentliche Problem ist, lässt sich schwer sagen.
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]

6

10.05.2015, 16:26

Das ist leider nicht die Lösung :(
Hab einfach mal den WeaponSprite ovn dem ich ausgehe ->setOrigin(0,0) gemacht änder sich aber nichts;

Wirago

Alter Hase

Beiträge: 1 193

Wohnort: Stockerau

Beruf: CRM Application Manager

  • Private Nachricht senden

7

10.05.2015, 16:33

0,0 ist ja auch der default-Wert. Du musst die Mitte nehmen. Also zB 25,25 bei einem 50x50 Sprite ;)

siehe auch:
http://www.sfml-dev.org/documentation/2.…13fb96c034d25ec

8

10.05.2015, 18:03

Dann müsste es aber nur ein bisschen abweichen, aber nicht so viel.

BlueCobold

Community-Fossil

Beiträge: 10 738

Beruf: Teamleiter Mobile Applikationen & Senior Software Engineer

  • Private Nachricht senden

9

10.05.2015, 18:33

Das kommt wohl darauf an wie groß die Textur ist auf der das Sprite liegt.
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]

10

10.05.2015, 18:48

0,0 ist ja auch der default-Wert. Du musst die Mitte nehmen. Also zB 25,25 bei einem 50x50 Sprite ;)

siehe auch:
http://www.sfml-dev.org/documentation/2.…13fb96c034d25ec

Okay, ergibt sinn..
Habe es jedoch jetzt mit

C-/C++-Quelltext

1
2
bulletSprite->setOrigin(bulletSprite->getTexture()->getSize().x / 2, bulletSprite->getTexture()->getSize().y / 2);
    weaponSprite->setOrigin(weaponSprite->getTexture()->getSize().x / 2, weaponSprite->getTexture()->getSize().y / 2);


Probiert, jetzt ist auch der Mittelpunkt gesetzt etc. aber so eine derartige Verfehlung der destination ist immer noch vorhanden.

Werbeanzeige