parallax.md 2.5 KB


title: 视差代码示例

brief: 在本示例中,您将学习如何使用视差效果来模拟游戏世界中的深度。

视差 - 示例项目

在本示例项目中,您可以从编辑器打开从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