趁着周末有点时间,为游戏的路线编辑器加了不少新东西。
首先是加了敌人在移动时,会面对着所移动的方向,本来我以为用 go.animate(go.get_id(), "rotation"...) 就可以,谁知道 go.animate 在处理旋转角度时会引起不正常的缩放效果,因为它所用的变量是 quarternion,而不是一个简单的角度,估计go.animate 是用了vmath.lerp() 来处理数值的变化,如果想正确的处理quarternion 是要用 vmath.slerp 的。后来在官方论坛找到有人遇到相同问题并想到的解决方法,几番折腾后才终于搞好。
更重要的是,今天加入了敌人可以沿着曲线移动的功能! 终于不用只是直来直往的那么单调。
-- Catmull-Rom Splines
local function getPointOnCurve(p0, p1, p2, p3, target, t)
local t2 = t * t
local t3 = t2 * t
target.x = 0.5*((2.0*p1.x)+(-p0.x+p2.x)*t+(2.0*p0.x-5.0*p1.x+4*p2.x-p3.x)*t2+(-p0.x+3.0*p1.x-3.0*p2.x+p3.x)*t3)
target.y = 0.5*((2.0*p1.y)+(-p0.y+p2.y)*t+(2.0*p0.y-5.0*p1.y+4*p2.y-p3.y)*t2+(-p0.y+3.0*p1.y-3.0*p2.y+p3.y)*t3)
end
我选用的曲线计算公式是 Catmull-Rom Splines,这个公式的原作者是 Edwin Catmull 和 Raphael Rom。Catmull 的其他重要发明还有 Texture mapping 和 Catmull–Clark subdivision surface,大家有没有发现这些可都是三维电脑图像处理的重要公式!而Catmull 是何许人呢? 他正是Pixar 创办时的技术大牛CTO,现任 Walt Disney 和 Pixar 的President!
John Lasseter 是 Pixar 的创意灵魂,但背后若不是Catmull 技术上过硬的支持,估计 Pixar 是不可能取得现在的成就的!