XNA Monogame 鼠标射弹点击

XNA Monogame Mouse Projectile Click

我正在为一个游戏编写代码,我已经 运行 很好,但是我 运行 遇到了射弹问题。我不知道如何计算鼠标位置并发送弹丸。我看过很多 Whosebug 教程和很多 youtube 视频,但它们要么太模糊,要么非常复杂。有人可以解释一下这个过程吗?我已经用 C# 编码 2 年了,所以我确实有背景知识。请帮忙!

好吧,你不会说出你正在制作哪种游戏以及你想要的弹丸是什么"send over",不管那是什么意思,但这里有一些提示,也许会有帮助:

#1:如果你正在玩 2D 游戏,并且你想从某个点向鼠标光标发送弹丸,那么你只需通过在 MouseState 实例上调用 GetState() 来获取鼠标的位置,并读取它的 X 和 Y 属性,然后通过从鼠标位置减去弹丸原点的位置来获得弹丸的方向。然后你可以通过存储你发射它的时间沿着那条线移动射弹,从实际时间中减去每一帧以获得它已经走了多长时间然后加上它的速度乘以归一化方向到它的原点的倍数坐标.

示例: 为此,我假设你有一个 Projectile class,它有一个叫做 origin 的 Vector2 字段,一个叫做 direction,一个叫做 position,一个叫做 speed 的 float 和一个叫做 startTime 的 int,你有一个已经设置了 origin 和 speed 的实例.根据实际代码的需要进行修改。

MouseState ms = new MouseState();

在您的更新方法中:

ms.GetState();
projectile.direction = new Vector2(ms.X, ms.Y) - projectile.origin;
projectile.direction.Normalize();
projectile.position = projectile.origin + projectile.speed * (gameTime.TotalGameTime.TotalMilliseconds - projectile.stratTime) * projectile.direction;

然后在 Draw 方法中,您只需将射弹绘制到 projectile.position 中的坐标即可。

#2:你正在做一个 3D 游戏,想从你的相机发射一个射弹,并指向你鼠标指向的任何地方。您将需要使用如下内容生成射线:

private Ray getClickRay(Vector2 clickLocation, Viewport viewport, Matrix view, Matrix projection)
            {
            Vector3 nearPoint = viewport.Unproject(new Vector3(clickLocation.X, clickLocation.Y, 0.0f), projection, view, Matrix.Identity);
            Vector3 farPoint = viewport.Unproject(new Vector3(clickLocation.X, clickLocation.Y, 1.0f), projection, view, Matrix.Identity);
            Vector3 direction = farPoint - nearPoint;

            direction.Normalize();

            return new Ray(nearPoint, direction);
            }

从那里你可以用和上面一样的方法得到你的射弹的位置,只是使用 Vector3-s 而不是 Vector2-s。

#3:你想模拟某种发射器,对弹丸的轨迹进行物理模拟。因为我发现这比前两个不太可能,所以我只描述这个想法:你为你的发射器沿 2 个轴设置最小和最大旋转,link 每次旋转与你的整个宽度和长度的比率屏幕到鼠标位置,然后使用角度和任何其他变量来计算射弹在发射时的方向和速度,然后每帧模拟物理。

我希望其中之一能有所帮助。