我有一個矩形底部的正方形。我也有讓矩形圍繞它的原點旋轉的代碼,它位於矩形的頂部。我試圖讓底部的方塊始終停留在這個矩形的末端,即使它旋轉了。她的圖片說明我的問題:讓一個點跟隨一個旋轉的精靈
現在我明白,這是不是一個好主意,使底部的白色正方形。所以當我把矩形向上或向上旋轉到左邊時,我想讓這個矩形繼續留在這個矩形的末端。也許有一個簡單的解決方案,但我的知識不如它應該在這個問題上。希望有人能指出我正確的方向。
我有一個矩形底部的正方形。我也有讓矩形圍繞它的原點旋轉的代碼,它位於矩形的頂部。我試圖讓底部的方塊始終停留在這個矩形的末端,即使它旋轉了。她的圖片說明我的問題:讓一個點跟隨一個旋轉的精靈
現在我明白,這是不是一個好主意,使底部的白色正方形。所以當我把矩形向上或向上旋轉到左邊時,我想讓這個矩形繼續留在這個矩形的末端。也許有一個簡單的解決方案,但我的知識不如它應該在這個問題上。希望有人能指出我正確的方向。
像這樣的東西讓你在那裏。
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
}
最簡單的方法是將轉換矩陣傳遞給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();
基本上你在旋轉ANS翻譯成你需要一個不同的空間中工作,實現黑色矩形的位置是(0,0)。
代碼未經測試,但應按預期工作。 ;)