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

Werwofl

Treue Seele

  • »Werwofl« ist der Autor dieses Themas

Beiträge: 100

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

1

11.02.2012, 13:06

XNA Rotation eines Sprites

Moin moin,

ich versuch mich grad in XNA einzuleben un dbin auf ein Problem mit der Rotation gestoßen.

C#-Quelltext

1
2
spriteBatch.Draw(player.getTextureOf(i), new Vector2(32, 0), new Rectangle(0, 0, player.getBodyWidth(), player.getBodyHeight()), Color.White,
                          1.5f, new Vector2(player.getBodyWidth() / 2 , player.getBodyHeight()/2), 1.0f, SpriteEffects.None, 1.0f);


Und zwar wie ihr oben vielleciht sehen könnt möchte ich nur ein bestimmten Teil meines Textures benutzen

C#-Quelltext

1
new Rectangle(0, 0, player.getBodyWidth(), player.getBodyHeight()
. Mein Bild ist 32x64 px groß. Ich möchte aber nur den ersten Teil rotieren lassen. Also habe ich mir gedacht ich setze den Rotationspunkt in die Mitte also :

C#-Quelltext

1
new Vector2(player.getBodyWidth() / 2 , player.getBodyHeight()/2)
. Wenn ich aber das mache kommen total seltsame Rotationen zu stande. Meine erste Vermutung war das er trotz des Rectangles das ganze Bild rotiert.

Ich frage hier, weil ich nur Tutorials gefunden habe die sich auf die Rotation des gesamten Bildes beziehen und nicht nur auf einen bestimmten Teil.

Ich hoffe jemand kann mir das Verhalten genauer erklären.

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

2

11.02.2012, 17:25

An sich sieht das richtig aus was du da machst. Zeig doch vielleicht mal ein Screenshot von der Textur gesamt und dann vom Ergebnis. Ich versteh das aber schon richtig, dass das Bild um einen falschen Punkt gedreht wird richtig?
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werwofl

Treue Seele

  • »Werwofl« ist der Autor dieses Themas

Beiträge: 100

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

3

11.02.2012, 17:56

Ganz normale draw-Methode:

(Link)

C#-Quelltext

1
spriteBatch.Draw(player.getTextureOf(i), player.getPostionOf(i), new Rectangle(0, 0, player.getBodyWidth(), player.getBodyHeight()), Color.White);


Methode zur Rotation aufrufen aber ohne Rotation:

(Link)

C#-Quelltext

1
2
spriteBatch.Draw(player.getTextureOf(i), player.getPostionOf(i), new Rectangle(0, 0, player.getBodyWidth(), player.getBodyHeight()), Color.White,
                                     0.0f, new Vector2(player.getBodyWidth() / 2 , player.getBodyHeight() / 2), 1.0f, SpriteEffects.None, 0.0f);


Parameter verändert:

(Link)

C#-Quelltext

1
2
spriteBatch.Draw(player.getTextureOf(i), player.getPostionOf(i), new Rectangle(0, 0, player.getBodyWidth(), player.getBodyHeight()), Color.White,
                                     1.5f, new Vector2(player.getBodyWidth() / 2 , player.getBodyHeight() / 2), 1.0f, SpriteEffects.None, 0.0f);

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

4

11.02.2012, 18:35

Wenn du die Position an der linken oberen Ecke des Sprites angeben willst musst du den Abstand des "Origin" Vektors noch addieren.
@D13_Dreinig

Schorsch

Supermoderator

Beiträge: 5 145

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

5

11.02.2012, 18:44

Genau. Wenn du einen Origin setzt, dann ist das der Punkt in deiner Sprite, die für die Position/Rotation etc genommen wird. Oft ist es aber auch einfacher, wenn die Position mittig der Sprite ist. Deine Rotation müsste dann soweit stimmen. Wenn ich mich recht erinnere arbeitet Xna im Bogenmaß und nicht im Gradmaß. Das wäre für die Rotationen dann noch wichtig, damit du dich nicht wunderst, dass die Sprite nicht so gedreht wird wie du es vielleicht erwartest, aber möglicherweise ist das ja auch nichts neues für dich.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Werwofl

Treue Seele

  • »Werwofl« ist der Autor dieses Themas

Beiträge: 100

Beruf: Fachinformatiker für Anwendungsentwicklung

  • Private Nachricht senden

6

11.02.2012, 19:07

Vielen Dank ihr zwei!
@ Schorsch: Nein, wusste ich nicht aber danke für den Tipp ^^

Werbeanzeige