我正在编写一个游戏,我运行得很好,但我遇到了抛射物的问题。我不知道如何计算鼠标位置并发射弹丸。我看过许多stackoverflow教程和许多YouTube视频,但它们太模糊或非常复杂。有人可以解释这个过程吗?我已经用C#编写了2年的编码,所以我确实有背景知识。请帮助!
答案 0 :(得分:0)
嗯,你不知道你正在做什么样的游戏以及你想要“发送”的射击是什么,无论这意味着什么,但这里有一些指示,也许会有所帮助:
#1:如果您正在进行2D游戏,并且想要从某个点向鼠标光标发送射弹,那么您只需通过调用MouseState实例上的GetState()来获取鼠标的位置,然后阅读它是X和Y属性,然后通过从鼠标位置减去射弹原点的位置来获得射弹的方向。然后你可以通过存储你发射它的时间沿着那条线移动射弹,从实际时间减去每一帧以获得它在路上的时间长度,然后将它的速度乘以标准化方向到它的原点多次坐标。
实施例: 为此我假设你有一个Prolac类,它有一个名为origin的Vector2字段,一个名为direction,一个名为position,一个名为speed的浮点数和一个名为startTime的int,你有一个实例,它的原点和速度已经设置好了。根据实际代码的需要进行修改。
MouseState ms = new MouseState();
在您的Update方法中:
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游戏,想拍摄一个来自你的相机的射弹,并指向你的鼠标指向的任何东西。您将需要使用以下内容生成Ray:
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轴的最小和最大旋转,将每个旋转链接到屏幕的整个宽度和长度与鼠标的比率位置,然后使用角度和任何其他变量来计算发射时射弹的方向和速度,然后模拟物理每帧。
我希望其中一个会有所帮助。