【问题标题】:Make a point follow a rotating sprite使一个点跟随旋转的精灵
【发布时间】:2014-08-28 18:10:24
【问题描述】:

我有一个底部有一个正方形的矩形。我还有使矩形围绕其位于该矩形顶部的原点旋转的代码。我试图使底部的正方形即使在旋转时也始终保持在该矩形的末端。她的一张照片来说明我的问题:

我现在知道将底部的正方形设为白色并不是一个好主意。因此,当我将矩形向上向右或向上向左旋转时,我希望正方形保持在该矩形的末端。也许有一个简单的解决方案,但我在这个主题上的知识还不够好。希望有人能指出我正确的方向。

【问题讨论】:

    标签: c# xna rotation


    【解决方案1】:

    这样的东西可以让你到达那里。

    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
    }
    

    【讨论】:

      【解决方案2】:

      最简单的方法是将转换矩阵传递给精灵批次。

       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)。

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-04-16
        • 2012-01-03
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多