2014-03-27 85 views
0

我使用沿着由被隨機挑選不同的「部分」的軌道驅動角色做一個遊戲。它使用物理學,大多數物體有許多頂點,並且是用物理編輯器製作的。我的實現不太好,因爲每次需要新節時都會重新創建每節。這會導致幀率跳躍,因爲它必須在遊戲過程中創建這些「時間關鍵」的大型物理實體。每個部分長2000像素,到目前爲止我有7個像素。有人可以告訴我一個更好的實現方法嗎?謝謝!科羅娜SDK隨機物理景觀

這是我的用於拾取和創建隨機部分功能:

local secNeeded=false 

local secNum=2 

local totallength=-800 

local function newSec() 
if secNeeded==true then 
local levNum=math.random(1, 7) 
if secNum==1 then 
     display.remove(group1) 
     group1 = nil 
     group1=display.newGroup() 
     game:insert(group1) 
end 
if secNum==2 then 
     display.remove(group2) 
     group2 = nil 
     group2=display.newGroup() 
     game:insert(group2) 
end 
if secNum==3 then 
     display.remove(group3) 
     group3 = nil 
     group3=display.newGroup() 
     game:insert(group3) 
end 

    if levNum == 1 then 
     createRamp() 
    end 

    if levNum == 2 then 
     createdoubleRamp() 
    end 

    if levNum == 3 then 
     createHill() 
    end 

    if levNum == 4 then 
     createRampHill() 
    end 
    if levNum == 5 then 
     createUpHill() 
    end 
    if levNum == 6 then 
     createDownHill() 
    end 
    if levNum == 7 then 
     createTunnel() 
    end 
end 
secNum=secNum+1 
if secNum==4 then 
    secNum=1 
end 

end 


local function wheelMid(event) 
--print(totallength) 
--print(wheel.x) 
if wheel.x>totallength then 
secNeeded=true 
newSec() 
end 
end 

Runtime:addEventListener("enterFrame", wheelMid) 

和創建函數

 function createHill() 

      local mega=display.newGroup() 
      local guide = display.newRect(0,0, 2000, 50) 
      guide.x=totallength+2000 
      guide.y=totalheight 
      guide.alpha=0 
      mega:insert(guide) 

      local ground = display.newImageRect("ground.png", 2000, 600) 
      ground.x=guide.x 
      ground.y=guide.y+200 
      mega:insert(ground) 
      physics.addBody(ground, "static", { friction=0.5 }) 

      local hill= display.newImageRect("hill2.png", 1400, 900) 
      hill.x=guide.x+300 
      hill.y=guide.y-534 
      mega:insert(hill) 
      physics.addBody(hill, "static", physicsData:get("hill2")) 

       if secNum==1 then 
      group1:insert(mega) 
      end 
      if secNum==2 then 
      group2:insert(mega) 
      end 
      if secNum==3 then 
      group3:insert(mega) 
      end 

      totallength=guide.x 
      secNeeded=false 

    end 

的基團是示例所以有3個部分存在於一次。 什麼是更好的方式來實現這一點,消除了跳幀?我會非常感謝有人能幫助我或指引我朝着正確的方向發展!

+0

山姆沒有答案爲你工作? – Schollii

+0

重複http://stackoverflow.com/questions/22674505/corona-sdk-preload-images-and-physics-bodies?rq=1 – Arash

回答

0

預加載通過storyboard.loadScene場景可能是你在找什麼。

0

我的建議是加載你的7種不同類型的片,當遊戲啓動(或之前運行實際啓動),然後通過例如設置阿爾法爲0隱藏,而當比賽真正開始,你總是重複使用相同的7件而不是重新創建它們...例如,當您隨機選擇一件時,您從7件中選擇一件,將alpha設置爲1並將其x/y位置移動到準確位置。

這樣你就不會每次重新創建它,它就會快得多。

+0

致謝。如果我想要連續兩次同一件作品,該怎麼辦? –

+0

2個選項:1 您預先創建2×7片,而不是:)甚至3X7如果你能連續在同一塊3倍。這樣可以連續選擇2到3次相同的作品:) 2-確保連續兩次選擇同一作品:) –