我正在开发一种足球游戏,用户必须选择速度,角度,方位角,以便用户可以使用所需的选择发布目标。任何人都可以制定我如何为游戏创建轨迹路径。请帮助我我无法找到解决方案。
答案 0 :(得分:5)
这是基础物理学。假设Z为up,则您的初始X和Y速度是恒定的,并由初始角度(使用trig)确定。 Z分量完全由重力决定。您获取仰角并(再次使用trig)将其转换为组件。那是你的初始Z速度。
这是最简单的配方,忽略风,旋转和拖曳(即球在飞行过程中不会横向移动,只受重力影响)。
vx = power * cos(elevation) * sin(azimuth);
vy = power * cos(elevation) * cos(azimuth);
vz = power * sin(elevation);
现在,t
时的位置是简单的牛顿物理学:
x = vx * t;
y = vy * t;
z = vz * t - 0.5 * g * t * t;
g
是重力(9.81 m / s / s)
但直接使用这些公式并不能让你计算弹跳等。为此,你需要逐步计算它。这意味着,对于较小的时间增量(dt
),您可以获取当前位置和速度并进行修改。
vx; // unchanged
vy; // unchanged
vz -= g * dt; // gravity
x += vx * dt;
y += vy * dt;
z += vz * dt;
如果您的Z位置低于地面,则会否定vz
以允许反弹。如果你碰到一个表面,你会做类似的反射(将矢量反映在曲面法线上)。
如果你想让飞行受到旋转(马格努斯效应)和其他力量的影响,事情会变得棘手。您可能还想阻止反射,因为每当球反弹时能量就会消失。
这取决于你。我已经给出了基础知识,我希望有所帮助。
你应该阅读弹丸动作。一旦你得到一些基本的工作,并希望使运动更加真实,请阅读运动球的空气动力学/流体动力学......几乎任何Rabindra Mehta的书或文章都是一个很好的起点。