[英]C# Rotate an image around it's position, relative to the mouse position
我在將圖像旋轉到相對於鼠標位置的位置時遇到了一些麻煩。 我只能讓圖像圍繞它自己的點旋轉而不是在它上面旋轉。
下圖說明了我想要做的事情:
這是我的代碼:
Image sprite = Image.FromFile("1.png");
private Point spritePos;
public Enemy(Point Position)
{
spritePos = Position;
}
public void Render(Graphics dc)
{
dc.TranslateTransform(spritePos.X, spritePos.Y); //Sets rotation point
float angle = CalcAngle(Cursor.Position);
dc.RotateTransform(angle); //Rotates the graphics transform
dc.DrawImage(sprite, spritePos);
dc.TranslateTransform(-(spritePos.X), -(spritePos.Y));
}
private float CalcAngle(Point TargetPos)
{
Point ZeroPoint = spritePos;
if (TargetPos == ZeroPoint)
{
return 0;
}
double angle;
double hypotenuse;
//Calculates the hypotenuse using Phytagoras(a^2 + b^2 = c^2)
hypotenuse = Math.Sqrt( //hypotenuse = squared(c^2)
Math.Pow((TargetPos.Y), 2) + //a^2 +
Math.Pow((TargetPos.X), 2)); // b^2
angle = Math.Acos((TargetPos.X) / hypotenuse); //Calculates the angle in radians
angle = angle * 180 / Math.PI; //Converts the radians to degree's
//If the cursor's y position is negative('above' the player), the returned angle is also negative
if (TargetPos.Y < 0)
{
return -(float)angle;
}
else
{
return (float)angle;
}
}
在正確的方向一些指針將是欣賞謝謝:)
你有正確的基本想法,但訂單錯誤。
首先,您應該將dc
轉換為0,0。 然后旋轉,然后轉換回原始位置。
dc.TranslateTransform(-spritePos.X, -spritePos.Y); //Sets rotation point
float angle = CalcAngle(Cursor.Position);
dc.RotateTransform(angle); //Rotates the graphics transform
dc.DrawImage(sprite, spritePos);
dc.TranslateTransform((spritePos.X), (spritePos.Y));
目前,您將精靈放置兩倍於原點,然后旋轉,然后將其移回原始位置。
你應該翻譯到圖像的中間:
dc.TranslateTransform(-spritePos.X / 2, -spritePos.Y / 2);
float angle = CalcAngle(Cursor.Position);
dc.RotateTransform(angle); //Rotates the graphics transform
dc.DrawImage(sprite, spritePos);
dc.TranslateTransform((spritePos.X / 2), (spritePos.Y / 2));
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.