c# - 鼠标在 Xna 游戏中选取旋转 Sprite

标签 c# c#-4.0 xna rotation mouse

我正在开发一个简单的游戏,你可以在方形 Sprite 消失之前点击它们。我决定花点心思让方 block 旋转。现在,当我单击方 block 时,它们并不总是响应单击。我认为我需要围绕矩形(正方形)的中心旋转单击位置,但我不确定如何执行此操作。这是我的鼠标点击代码:

    if ((mouse.LeftButton == ButtonState.Pressed) &&
    (currentSquare.Contains(mouse.X , mouse.Y )))

这是轮换逻辑:

    float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;

        RotationAngle += elapsed;
        float circle = MathHelper.Pi * 2;
        RotationAngle = RotationAngle % circle;

我对 Xna 和一般编程都很陌生,因此非常感谢您的帮助。

非常感谢

比尔

最佳答案

所以你试图确定一个点是否在矩形中,但是当矩形旋转时?

Contains()方法仅在当前旋转为0时才起作用(我猜currentSquare是一个表示不旋转的图像位置的矩形?)。

您需要做的是在鼠标坐标上对图像进行相反旋转(鼠标坐标应围绕图像原点旋转),然后计算新位置是否在范围内当前广场。您应该能够使用向量完成所有这些操作。 (未经测试)

bool MouseWithinRotatedRectangle(Rectangle area, Vector2 tmp_mousePosition, float angleRotation)
{
    Vector2 mousePosition = tmp_mousePosition - currentSquare.Origin;
    float mouseOriginalAngle = (float)Math.Atan(mousePosition.Y / mousePosition.X);
    mousePosition = new Vector2((float)(Math.Cos(-angleRotation + mouseOriginalAngle) * mousePosition.Length()), 
                                (float)(Math.Sin(-angleRotation + mouseOriginalAngle) * , mousePosition.Length()));
    return area.Contains(mousePosition);
}

关于c# - 鼠标在 Xna 游戏中选取旋转 Sprite ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9333786/

相关文章:

c# - 更好的逻辑来检查财政年度日期

c# - 如何在 C# 中将多个数据表存储到单个数据集中?

3d - XNA Game Studio 3D模型编辑器建议

c# - XNA GameComponent 实现首选项...?

c# - 将多个 csv 文件作为单个数据集加载的最佳方法

c# - 无法反序列化值时,如何导致反序列化失败?

c# - 匹配模式后从字符串中剪切文本

c# - 通过字符串锁定。这安全/理智吗?

c# - Parallel.ForEach 和 ParallelEnumerable.ForAll 之间的区别

vb.net - 如何在面板内绘制 XNA 窗口?