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

28.08.2010, 23:22

SFML Objekt um mittelpunkt drehen

Hallo Leute
Ich versuche ein SFML Sprite um den Mittelpunkt zu drehen.

C-/C++-Quelltext

1
2
3
4
5
6
void CPlayer::SetRotation(float Degree)
{
    sf::Vector2f Center = m_pSprite->GetCenter();
    m_pSprite->SetRotation(Degree);
    m_pSprite->SetCenter(Center);
}


So sieht die Funktion aus. Die Idee ist, eine winzige Transformationspipeline zu haben in der zuerst die drehung und dann die Positionierung(in diesem Fall Rücksetzung) erfolgt.
Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

2

29.08.2010, 00:01

Interessanter Versuch, gibt es hierzu auch eine Frage bzw. ein Problem, oder ist das nur eine Information deinerseits? :lol:

Stazer

Alter Hase

Beiträge: 468

Wohnort: Berlin

Beruf: Student

  • Private Nachricht senden

3

29.08.2010, 00:34

Tschuldigung aber ist der Code nicht irgendwie unnötig?
Da du die interne Center Variable in die interne Center Variable änderst und das ist unnötig.
Wenn du den Mittelpunkt der Sprite haben willst dann nimmst du die Größe des Bildes und teilst diese durch 2.

MfG Stazer

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

4

29.08.2010, 00:40

Tschuldigung aber ist der Code nicht irgendwie unnötig?

Ja, so wie ich die SFML verstanden hab tut der Code effektiv das selbe wie

C-/C++-Quelltext

1
m_pSprite->SetRotation(Degree);

5

29.08.2010, 00:43

entschuldigt bitte, das problem ist, das beim normalen rotieren um die obere rechte ecke gedreht wird,
und sich somit die mitte verschiebt
Ich habe dieses Stück Code geschrieben um das zu verhindern, aber irgendwei klappt es nicht :(
Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

dot

Supermoderator

Beiträge: 9 757

Wohnort: Graz

  • Private Nachricht senden

6

29.08.2010, 00:46

Du musst eben den Center auf die Mitte des Bildes setzen.

NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

7

29.08.2010, 11:49

dann musst du die position aber relativ zur mitte und nicht zur linken oberen ecke des sprites angeben.
"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?

n0_0ne

1x Contest-Sieger

  • Private Nachricht senden

8

29.08.2010, 12:38

Also was NachoMan gemeint hat, hab ich jetzt grade nicht verstanden ^^

Das Problem bei deinem Code ist: Du liest den Mittelpunkt des Sprites aus (den du vorher noch nie richtig gesetzt hast), machst dann eine Drehung um den Mittelpunkt (der ja falsch ist) und setzt dann den Mittelpunkt erneut auf den Wert, den er vorher schon hatte.

Bevor du eine Rotation machst, musst du zuerst (1 mal) den Mittelpunkt richtig setzen, so in der Art:

C-/C++-Quelltext

1
2
3
4
5
6
// Mittelpunkt bestimmen
 sf::Vector2f Center = sf::Vector2f(m_pSprite->GetImage()->GetWidth() / 2, m_pSprite->GetImage()->GetHeight() / 2);
// Mittelpunkt setzen
m_pSprite->SetCenter(Center);
// Jetzt kann richtig um den Mittelpunkt gedreht werden
m_pSprite->SetRotation(Degree);


Das bestimmen des Mittelpunkts auf die Art funktioniert natürlich nur, wenn das Sprite nicht animiert ist, d.h. es nur 1 Teilbild gibt.

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »n0_0ne« (29.08.2010, 12:44)


NachoMan

Community-Fossil

Beiträge: 3 885

Wohnort: Berlin

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

  • Private Nachricht senden

9

29.08.2010, 13:00

beleg dir einfach ne taste die zwischen center = 0|0 und center = 50|50(bei einem 100*100pixel großen sprite) wechselt. dann wirst du schon merken was sich dabei alles ändert...

Zitat

Das bestimmen des Mittelpunkts auf die Art funktioniert natürlich nur, wenn das Sprite nicht animiert ist, d.h. es nur 1 Teilbild gibt.

nein eigentlich funktionierts auch wenn du ein subrect bestimmst. dafür sollte man natürlich sprite.GetSize().x benutzen...
"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

29.08.2010, 14:05

ach jetzt versteh ich das, Set Center bestimmt den Mittelpunkt des Bildes, ich dachte das wäre sowas wie SetPos.
Danke nochmal
Gewinnen ist, wenn man einmal mehr aufsteht, als man zu Boden geht.

Werbeanzeige