2016-11-20 88 views
0

我想寫一個代碼,做paralax滾動。 「棋子」表中的所有精靈都需要拍攝到空中,然後將其位置重置爲y = 200和x =隨機數。稍後,我將根據他們爲了獲得真正的3D效果而移動的速度,讓他們變得更小或更大。如何在lua中的表中對對象進行迭代代碼?

這裏有一個天真的嘗試:

local speed = math.random(250,1000) 
pieces = { "sprite", "sprite1", "sprite2", "sprite3", "sprite4", 
"sprite5", "sprite6", "sprite7", "sprite8", "sprite9", "sprite10", 
"sprite11", "sprite12", "sprite13", "sprite14", "sprite15" } 

function update(self, dt) 
    for i, v in ipairs(pieces) do 
     p = go.get_position(v) 
     p.y = p.y + speed * dt 
     print(v) 
      if p.y > 800 then 
      p.y = -200 
      p.x = math.random(1,25) * math.random(10,35)*2 
      local speed = math.random(250,1000) 
     end 
     go.set_position(v) 
    end 
end 

如果我打印ipairs我得到所需的輸出(雪碧,sprite1,雪碧等)內的「V」型,所以我想我有什麼上面會工作。它沒有。任何幫助?

+1

那麼,你想循環它 - 它循環好,打印v顯示它。你必須解釋你想要什麼和你得到什麼。 「不起作用」不是一種解釋。如果它不改變「速度」 - 這是因爲你在'if p.y> 800'分支中聲明瞭局部變量'速度',所以新的隨機值不在分支之外使用。如果它不能以其他方式工作,你必須解釋。 – Vlad

+0

你說得對。我忘了說具體問題是 p = go.get_position(v) 給出了一條錯誤消息。我相信我沒有正確引用該對象。 – josh

+0

那是'去'什麼?我認爲這是一個game_objects的集合,由你在'pieces'數組中的名字索引。但是,它在你的樣本中?它有函數get_position()/ set_position()嗎?那些如何定義? – Vlad

回答

1

這是我想到的正確的代碼。如果有人看到並需要解釋,請告訴我。

local speed = math.random(250,1000) 
--pieces = { "sprite1", "sprite2", "sprite3", "sprite4", "sprite5", "sprite6", "sprite7", "sprite8", "sprite9", "sprite10", "sprite11", "sprite12", "sprite13", "sprite14", "sprite15" } 
pieces = { "go1", "go2", "go3" } 

function update(self, dt) 
    for i, v in ipairs(pieces) do 
     p = go.get_position(v) 
     p.y = p.y + speed * dt 
     if p.y > 800 then 
      p.y = math.random(200,800)/-1 
      p.x = math.random(1,25) * math.random(10,35) * 2 
      local speed = math.random(250,1000) 
      go.set_position(p, v) 
      else 
      go.set_position(p, v) 
     end 
    end 
    end 
+0

提示:不是將字符串存儲在pieces表中,而是存儲對象的id:s:pieces = {go.get_id(「go1」),go.get_id(「go2」),go.get_id(「go3 「)}'。 對於需要進行大量迭代的情況,這會節省從字符串到引擎ID(散列)的查找,否則引擎每次都必須執行此操作。 –