2
\$\begingroup\$

From Wikipedia the (image) conversion degrees / radians shows the quadrants so that the increase of radians causes a counter-clockwise rotation but when using the following code the sprite is rotated clockwise:

rotation = (rotation + 0.5f) % MathHelper.ToRadians(360);
...
spriteBatch.Draw(sprite, sprite_center_other_sprite, new Rectangle(0, 0, 50, 50), Color.White, rotation, new Vector2(width/2, height/2),1.0f, SpriteEffects.None, 0.0f);

Why? The direction is a convention or XNA is different?

\$\endgroup\$
2
  • \$\begingroup\$ Are you sure about the first line? MathHelper.ToRadians(360) is exactl 2Pi, which is available as a constant from MathHelper. Also, why do you add 0.5 radians to the rotation? Did you mean half Pi? \$\endgroup\$
    – Marton
    Jul 17 '12 at 11:37
  • \$\begingroup\$ @Marton, Yes I'm sure that line does a rotation between 0 and 6,14 radians at 0.5 step. \$\endgroup\$
    – xdevel2000
    Jul 17 '12 at 11:51
5
\$\begingroup\$

As posted in this question on SO:

The XNA SpriteBatch works in Client Space. Where "up" is Y-, not Y+ (as in Cartesian space, projection space, and what most people usually select for their world space). This makes the rotation appear as clockwise (not counter-clockwise as it would in Cartesian space).

So, that said, if this code is intended to prevent the angle from getting too large, consider using the MathHelper.WrapAngle() method. This method wraps the angle you give it (in radians) to between π (180°) and -π(-180°).

rotation = MathHelper.WrapAngle(rotation + 0.5f);

Note: If it is in your Update statement, you may also want to multiply the 0.5f against the elapsed game time so that your rotation speed is per second and not per Update. The final line would be:

rotation = MathHelper.WrapAngle(rotation + 0.5f * (float)gameTime.ElapsedGameTime.TotalSeconds);
\$\endgroup\$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.