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

23.10.2011, 18:20

Position richtig setzen, trotz Rotation?

Hallo,

ich habe mal wieder ein Problem, undzwar möchte ich die Position eines Items auf die Hand eines Charakters legen, soweit so gut,
jedoch habe ich neulich die Hand vom Character Sprite getrennt (damit ich die Hand rotieren kann, ohne den ganzen Charakter zu rotieren), soll heißen das die Hand ein Bild
und der restliche Teil vom Charakter ein eigenes Bild ist, auch da hat das setzen des Items noch funktioniert.

Jedoch kam dann die Rotation ins Spiel, ich rotiere nämlich den Arm in Richtung des Mauszeigers mit:

C-/C++-Quelltext

1
Item.SetRotation(-(atan2(Mouse.GetPosition().y - Item.GetPosition().y, Mouse.GetPosition().x - Item.GetPosition().x) * 180) / PI);

Das Item rotiere ich genau so, nun ist jedoch das Problem, das dass Item nicht mehr wirklich auf der Position der Hand ist, es ist drüber oder
drunter aber nicht auf der Hand, ich schätze das liegt an der Rotation der Hand...
Und da bilder bekanntlich mehr sagen als tausend Wörter:

(Link)


Jetzt ist halt die Frage wie ich das Item trotz Rotation auf die Hand bekomme, so wie es bei "Ohne Rotation" ist.
Vielen Dank schonmal im Voraus für jede Hilfe!

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

2

23.10.2011, 18:36

vllt hilft dir das weiter: Objekt in Rotationrichtung bewegen (SFML)
"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?

3

23.10.2011, 20:19

Danke erstmal, aber leider bekomme ich es nicht hin...

C-/C++-Quelltext

1
2
//Set the Position of the Item
Item.SetPosition(Hand.TransformToGlobal(Hand.GetPosition()));

So bewegt sich zwar das Item mit, jedoch ist es ziemlich weit von der Hand entfernt,
es fliegt eher rum...

Bei beiden Sprites (Item/Hand) habe ich ein Center gesetzt und beide richten sich nach dem gleichen Winkel aus
und der Charakter fällt am Anfang runter, macht das vielleicht was aus?

Oder stehe ich auf einem Schlauch?

4

24.10.2011, 16:25

Kann/will es mir keiner erklären? :(

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

5

24.10.2011, 16:51

Bei beiden Sprites (Item/Hand) habe ich ein Center gesetzt

Wie bestimmst du das Center?
"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?

6

24.10.2011, 17:10

Bei dem Item mach ich es so:

C-/C++-Quelltext

1
2
        //Set
        Item.SetCenter(Item.GetSubRect().GetWidth() / 2, Item.GetSubRect().GetHeight());

Damit der Rotations punkt am Griff ist..

Und bei der Hand:

C-/C++-Quelltext

1
2
        //Set
        Hand.SetCenter(25, Hand.GetSubRect().GetHeight() / 2);

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

7

24.10.2011, 17:29

Das Center von der Hand ist eigentlich unwichtig. Wichtig ist, dass die Position des Schwert-Centers auf dem Griff liegt, die Position des Schwertes an sich auf der globalen Position der Hand liegt(genauer: Die Stelle an der das Schwert festgehalten werden soll). Dann müssen sie nichmal die gleiche Rotation haben, kann ja sein, dass deine Figur das Schwert im 90° Winkel hält oder es Rotiert, wie im anderen Thread.
"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?

8

24.10.2011, 18:13

Ja, das habe ich ja versucht, nur funktioniert es halt irgendwie trotzdem nicht...
Ich habe gerade ein extra Projekt erstellt und mehrere Versuche gestartet, aber irgendwie landet
die Position des Schwertes immer weit entfernt von der Hand...

Hier der Code: http://pastebin.com/yfrPdZF3

Sprite1 = Die Hand
Sprite2 = Das Item

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

9

24.10.2011, 19:33

Deine Kommentare sind einfach klasse! xD

C-/C++-Quelltext

1
2
//Set Position of Sprite 2
Sprite2.SetPosition(Sprite1.TransformToGlobal(Sprite1.GetPosition()));

Das könntest du dir eigentlich sparen und stattdessen ordentliche Bezeichner verwenden. So sparst du dir ne menge Tipparbeit und ermöglichst es jeden, der C++ beherrscht, deinen Code zu verstehen.
"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

24.10.2011, 20:25

Jaaaa :D
Das war ja nur son auf die schnelle ding und irgendwie kommentiere ich immer alles, auch wenn
die Kommentare manchmal relativ sinnlos sind... Sieht einfach schöner aus mit dem Grün.. :P

Ich hab ja aber oben geschrieben für was die Bezeichner stehen... :P
Und so wirklich hilft mir das jedoch bei meinem Problem nicht weiter... ^^

Werbeanzeige