问题是:我正在使用Corona制作一个简单的物理游戏,非常简单的模块:http://developer.coronalabs.com/code/move-camera,所以我有一个带有物理体的鱼对象,在每一个帧(enterFrame事件)中,我都将摄像机对准它。
camera.x = -fish.x + screenWidth / 2我有两个背景,bg1和bg2,一个接一个(bg1,bg2,bg1,bg2等)在用户不知道只有2个背景的情况下,会产生很好的移动世界效果。问题是我无法正确计算他们的位置来产生这样的效果。我搜索了很多,但找不到适合我需要的东西。
这是一种免费的艺术,我用的是http://www.vickiwenderlich.com/2013/02/free-game-art-flying-goldfish/,你可以找到这两种背景。
鱼也有可能稍微向相反的方向移动(通常它是向右移动的,所以要使世界移动的效果背景必须向左移动),所以如果它在计算中会很好的话。
我想出了这样的办法(尽管不管用,但也许我离得很近):
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是最后一个鱼位置和当前鱼位置之间的差异,仅此而已。
如果您可以帮助我的计算,或给我新的,或只是提供一些有趣的链接,请写在这里。
如有任何帮助,敬请见谅。
发布于 2013-10-22 07:34:29
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
https://stackoverflow.com/questions/19509686
复制相似问题