首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在Corona中重复两个背景

在Corona中重复两个背景
EN

Stack Overflow用户
提问于 2013-10-22 05:32:22
回答 3查看 970关注 0票数 0

问题是:我正在使用Corona制作一个简单的物理游戏,非常简单的模块:http://developer.coronalabs.com/code/move-camera,所以我有一个带有物理体的鱼对象,在每一个帧(enterFrame事件)中,我都将摄像机对准它。

代码语言:javascript
运行
复制
camera.x = -fish.x + screenWidth / 2

我有两个背景,bg1和bg2,一个接一个(bg1,bg2,bg1,bg2等)在用户不知道只有2个背景的情况下,会产生很好的移动世界效果。问题是我无法正确计算他们的位置来产生这样的效果。我搜索了很多,但找不到适合我需要的东西。

这是一种免费的艺术,我用的是http://www.vickiwenderlich.com/2013/02/free-game-art-flying-goldfish/,你可以找到这两种背景。

鱼也有可能稍微向相反的方向移动(通常它是向右移动的,所以要使世界移动的效果背景必须向左移动),所以如果它在计算中会很好的话。

我想出了这样的办法(尽管不管用,但也许我离得很近):

代码语言:javascript
运行
复制
local function updateFrame(event)

    local m
    local dfx = lfx - fish.x

    lfx = fish.x
    camera.x = -fish.x + screenWidth / 2

    --print("dfx = " .. dfx)

    bg1.x = bg1.x + dfx
    bg2.x = bg2.x + dfx

    s = s + dfx

    if mAbs(s) > screenWidth then
        m = sgn(s)

        if m ~= 0 then
            s = s - m * screenWidth
            if m < 0 then
                bg1.x = bg1.x - 2 * m * screenWidth
            else
                bg2.x = bg2.x - 2 * m * screenWidth
            end
        end
    end

end
Runtime:addEventListener( "enterFrame", updateFrame );

s = screenLeft - screenWidth

其中s是移动的像素之和,如果它是在screenWidth上跳过一个背景,lfx是最后一个fish x位置,dfx是最后一个鱼位置和当前鱼位置之间的差异,仅此而已。

如果您可以帮助我的计算,或给我新的,或只是提供一些有趣的链接,请写在这里。

如有任何帮助,敬请见谅。

EN

Stack Overflow用户

发布于 2013-10-22 07:34:29

代码语言:javascript
运行
复制
local road = display.newImageRect( "Images/roadBg1.png",2247/4,559/4 )
road:setReferencePoint( display.CenterLeftReferencePoint )
road.x = 0
road.y = baseline - 20
local road2 = display.newImageRect( "Images/roadBg1.png",2247/4,559/4  )
road2:setReferencePoint( display.CenterLeftReferencePoint )
road2.x = 2247/4
road2.y = baseline - 20

local tPrevious = system.getTimer()
local function move(event)
local tDelta = event.time - tPrevious
tPrevious = event.time

local xOffset = ( 0.2 * tDelta )

road.x = road.x - xOffset
road2.x = road2.x - xOffset
if (road.x + road.contentWidth) < 0 then
    road:translate( 2247/4 * 2, 0)

end
if (road2.x + road2.contentWidth) < 0 then
    road2:translate( 2247/4 * 2, 0)

end
Runtime:addEventListener( "enterFrame", move )

或者看到丛林场景游戏的示例代码。

地点: SampleApps/Sprites/JungleScene

票数 1
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19509686

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档