title: 视差代码示例
在本示例项目中,您可以从编辑器打开或从GitHub下载,我们展示了如何使用视差效果来模拟游戏世界中的深度。 有两层云,其中一层看起来比另一层更远。还有一个动画飞碟作为点缀。
云层被构建为两个独立的游戏对象,每个都包含一个*瓦片地图*和*脚本*。
这些层以不同的速度移动,以产生视差效果。这是在下面的*background1.script*和*background2.script*的update()
中完成的。
-- file: background1.script
function init(self)
msg.post("@render:", "clear_color", { color = vmath.vector4(0.52, 0.80, 1, 0) } )
end
-- 背景是游戏对象中的瓦片地图
-- 我们移动游戏对象以产生视差效果
function update(self, dt)
-- 每帧将x位置减少1个单位以产生视差效果
local p = go.get_position()
p.x = p.x + 1
go.set_position(p)
end
-- file: background2.script
-- 背景是游戏对象中的瓦片地图
-- 我们移动游戏对象以产生视差效果
function update(self, dt)
-- 每帧将x位置减少0.5个单位以产生视差效果
local p = go.get_position()
p.x = p.x + 0.5
go.set_position(p)
end
飞碟是一个独立的游戏对象,包含一个*精灵*和一个*脚本*。
它以恒定速度向左移动。上下运动是通过使用Lua正弦函数(math.sin()
)围绕固定值动画化其y分量获得的。这是在*spaceship.script*的update()
中完成的。
-- file: spaceship.script
function init(self)
-- 记住初始y位置,这样我们
-- 可以在不更改脚本的情况下移动飞船
self.start_y = go.get_position().y
-- 将计数器设置为零。用于下面的正弦运动
self.counter = 0
end
function update(self, dt)
-- 每帧将x位置减少2个单位
local p = go.get_position()
p.x = p.x - 2
-- 围绕初始y位置移动y位置
p.y = self.start_y + 8 * math.sin(self.counter * 0.08)
-- 更新位置
go.set_position(p)
-- 当飞船离开屏幕时移除它
if p.x < - 32 then
go.delete()
end
-- 增加计数器
self.counter = self.counter + 1
end