2016-11-20 37 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(散列)的查找,否则引擎每次都必须执行此操作。 –