2013-10-22 58 views
0

這是一個問題:我正在使用Corona SDK和非常簡單的模塊進行一個簡單的物理遊戲:http://developer.coronalabs.com/code/move-camera所以我有魚物體與物理體和每個幀(enterFrame事件) M於它在Corona SDK中重複2個背景

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

中心的攝像頭和我有兩個背景BG1和BG2,這是其他(BG1 BG2 BG1 BG2等)後平鋪每次都會讓用戶無需移動好看世界效應知道,只有2個背景。問題是我無法正確計算他們的立場來產生這種效果。我GOOGLE了很多,但找不到任何符合我的需求的東西。

這是一個免費的藝術,我正在使用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是像素的和移動,如果它是在屏幕寬度我的一個跳躍背景,lfx是最後一條魚的位置,dfx是最後一條魚和當前魚的位置之間的差異,就是這樣。

如果你可以幫助我計算或給我新的或只是給一些有趣的鏈接,請寫在這裏。

任何幫助將不勝感激, 問候

回答

0

感謝@krs和@顴部,結合你的答案我想出如何做到這一點:

local function updateFrame(event) 

    local speed = fish.x - lfx 
    lfx = fish.x 

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

    bg1.x = bg1.x - speed 
    bg2.x = bg2.x - speed 

    if bg1.x + bg1.width < 0 then 
     bg1.x = bg1.x + screenWidth * 2 
    end 
    if bg2.x + bg2.width < 0 then 
     bg2.x = bg2.x + screenWidth * 2 
    end 

    if bg1.x - bg1.width > 0 then 
     bg1.x = bg1.x - screenWidth * 2 
    end 
    if bg2.x - bg2.width > 0 then 
     bg2.x = bg2.x - screenWidth * 2 
    end 

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

開始位置:

bg1.x = screenLeft 
bg2.x = bg1.x + bg1.width 

而最後最重要的變化: 我把BG1,BG2和相機成團和其他物體進入攝像機組:

local camera = require("camera") 
group = display.newGroup() 
group:insert(bg1) 
group:insert(bg2) 
camera:insert(fish) 
camera:insert(ground) 
group:insert(camera) 

因此,我們有地面和魚,可移動永遠,但背景只是從-screenWidth移動到screenWidth。

所有這些東西結合起來就像一個魅力!

1
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 /精靈/ JungleScene

0

試試這個:

local bg1 = display.newImageRect("bg_1.png" ,480 ,320) 
bg1.x = display.contentWidth/2; bg1.y = display.contentHeight/2 

local bg2 = display.newImageRect("bg_2.png" ,480 ,320) 
bg2.x = bg1.x + bg1.width; bg2.y = display.contentHeight/2 


local speed = 30 
function move() 
    bg1.x = bg1.x-speed; 
    bg2.x = bg2.x-speed; 
    if(bg1.x + bg1.width/2 < 0)then bg1.x = bg1.width*3/2-speed 
    elseif(bg2.x + bg2.width/2 < 0)then bg2.x = bg2.width*3/2-speed end 
end 
Runtime:addEventListener("enterFrame", move) 

保持編碼............ :)