2010-08-02 13 views
2

j'ai ce problème quand mon origine de rotation de Sprite est fixé au coin supérieur gauche de la fenêtre (même avec sprite.draw et sprite.Draw2D) De toute façon, si je change le centre de rotation, il est encore à en haut à gauche. J'ai besoin d'un sprite pour tourner autour de son axe Z.C origine sprite # directx

Edit: J'ai essayé:

hereMatrix pm = Matrix.Translation(_playerPos.X + 8, _playerPos.Y + 8, 0); 
    sprite.Transform = Matrix.RotationZ(_angle) * pm; 
    sprite.Draw(playerTexture, textureSize, new Vector3(8, 8, 0), new Vector3(_playerPos.X, _playerPos.Y, 0), Color.White); 

Mais il ne semble pas fonctionne bien ...

+0

Veuillez poster un exemple de code afin que nous puissions voir ce que vous faites. – Tchami

Répondre

1

Lorsque vous dessinez, est-il au bon endroit?

Je crois que l'ordre de multiplication est inversé, et que vous ne devriez pas être en train de transformer par la position des joueurs dans la transformation.

// shift centre to (0,0) 
sprite.Transform = Matrix.Translation(-textureSize.Width/2, -textureSize.Height/2, 0); 

// rotate about (0,0) 
sprite.Transform *= Matrix.RotationZ(_angle); 


sprite.Draw(playerTexture, textureSize, Vector3.Zero, 
      new Vector3(_playerPos.X, _playerPos.Y, 0), Color.White); 

Modifier

Vous pouvez également utiliser la méthode Matrix.Transformation pour obtenir la matrice en une seule étape.

1

J'ai la solution pour vous, c'est une méthode simple que vous pouvez utiliser chaque fois que vous voulez dessiner un sprite. Avec cette méthode, vous pourrez faire pivoter l'image-objet avec le centre de rotation souhaité.

public void drawSprite(Sprite sprite, Texture texture, Point dimension, Point rotationCenter, float rotationAngle, Point position) 
    { 
     sprite.Begin(SpriteFlags.AlphaBlend); 

     //First draw the sprite in position 0,0 and set your desired rotationCenter (dimension.X and dimension.Y represent the pixel dimension of the texture) 
     sprite.Draw(texture, new Rectangle(0, 0, dimension.X, dimension.Y), new Vector3(rotationCenter.X, rotationCenter.Y, 0), new Vector3(0, 0, 0), Color.White); 

     //Then rotate the sprite and then translate it in your desired position 
     sprite.Transform = Matrix.RotationZ(rotationAngle) * Matrix.Translation(position.X, position.Y, 0); 

     sprite.End(); 
    }