按照旋转精灵制作一个点

时间:2014-08-28 18:10:25

标签: c# xna rotation

我的底部有一个正方形的矩形。我还有一些代码使矩形围绕它的原点旋转,该原点位于这个矩形的顶部。我试图使底部的方块始终保持在这个矩形的末端,即使它旋转。用图片来说明我的问题:

enter image description here

我现在看到,将底部的正方形变成白色并不是一个好主意。所以当我向上向右或向上向左旋转矩形时,我希望方块保持在这个矩形的末端。也许有一个简单的解决方案,但我的知识并不像它应该在这个主题上那么好。希望有人能指出我正确的方向。

2 个答案:

答案 0 :(得分:0)

这样的东西可以帮助你。

float pendulumAngle;
Vector2 origin;
Vector2 squareTLcorner;//top left corner of square
Vector2 squareOffset;

void Reset()
{
  pendulumAngle = 0;
  origin = new Vector2(?.?f, ?.?f);// set to whatever you need
  squareTLcorner = new Vector2(?.?f, ?.?f); // set to whatever you need
  squareOffset = squareTLcorner - origin;

}

void UpdatePendulum(float angleMovedSinceLastFrame)
{
  pendulumAngle += angleMovedSinceLastFrame;
}

void UpdateSquarePosition()
{
  squareTLcorner = Vector2.Transform(squareOffset, Matrix.CreateRotationZ(pendulumAngle) + origin;

}

void DrawSquare()
{
  spriteBatch.Draw(sqTex,squareTLcorner, , ,pendulumAngle, ,  ,  ,  );// overload 6 of 7
}

答案 1 :(得分:0)

最简单的方法是将转换矩阵传递给sprite批处理。

 Rectangle Black = new Rectangle(0,0, 20, 100);
 Rectangle White = new Rectangle( Black.Left, Black.Bottom, Black.Width, Black.width);

 Vector2 Pivot= new Vector(100,100);
 vector2 Origin = new Vector2( 10,10);

 Matrix transform = Matrix.CreateTranslation(-Origin.X, -Origin.Y) 
                  * Matrix.CreateRotationZ(angle) 
                  * Matrix.CreateTranslation(Pivot);

 SpriteBatch.begin(...., transform)

    SpriteBatch.Draw( Texture, Black, Color);
    SpriteBatch.Draw( Texture, White, Color);

 SpriteBatch.end();

基本上你在不同的空间工作,根据需要旋转和翻译,实现黑色矩形位置为(0,0)。

代码未经测试但应按预期工作。 ;)