我正在制作一个类似galaxian的射击游戏,我的敌人物体有一个目标矢量,他们使用这段代码前往它们:
position.X -= (Motion.X / Magnitude) * Speed;
position.Y -= (Motion.Y / Magnitude) * Speed;
Run Code Online (Sandbox Code Playgroud)
动作由:
this.Motion = InitialPosition - Destination;
Run Code Online (Sandbox Code Playgroud)
这使得他们沿着直线前往目的地.
但是,我想让它们变得更有趣,并且在一个罪恶或宇宙波上旅行,有点像Galaxian.
我怎样才能做到这一点?
您可能最好为运动函数定义贝塞尔曲线,而不是像正弦波这样的简单函数.Galaxian肯定有比这更复杂的动作.
这是Bezier曲线数学入门的链接.这是一篇相当长的文档,但是通过大量的例子很好地涵盖了所涉及的数学.
希望这有助于激励你.
一种方法是为水平运动创建一个加速因子,并将该因子加到每个滴答的水平速度上.因此,如果你的特定敌人的水平速度是2开始,你的加速度是-01,那么在200个蜱之后,敌人将直接向下,并且在另外200个蜱后,它将以-2的水平速度移动.这将给出一个很好的曲线.
通过为每个敌人随机确定速度和加速度(在通过实验确定的某些限制内),您可以创建一个漂亮的各种攻击配置文件而无需太多努力.这将产生类似Galaxian的运动.
你也可以对垂直方向做同样的事情,当然,加速度限制会有很大的不同......对于水平加速度,你可能想要确定一个在0的两侧大小相等的范围(比如-.02到+ 0.02),而对于垂直加速度,你可能总是希望船最终从屏幕底部向下移动,所以你可能希望加速总是最终为正(或取决于你是如何做屏幕坐标的.)