【问题标题】:Lua Ide Cocos. Table almost working and then not working in a weird wayLua Ide Cocos。表几乎可以工作,然后以一种奇怪的方式不工作
【发布时间】:2014-07-31 11:56:27
【问题描述】:

这是违规代码的简短摘录。总结是将 3 个 ccsprite 放入一个 lua 表中,然后我尝试以与我正在使用的示例相同的方式将这些节点添加到 cclayer。我得到的错误是:

addChild has wrong number of arguments: 0, was expecting 3 

所以也许我可以相信表格条目会在添加功能的过程中消失,并通过对 Lua 奇异的作用域意识形态的一些创造性解释,但另一方面,如果我在尝试之前向表格添加 4 的表格条目添加表条目精灵(执行此操作的代码在那里并注释掉)我收到此错误:

[LUA-print] LUA ERROR: [string ".\GameScene.lua"]:101: 
     error in function 'lua_cocos2dx_Node_addChild'.
     argument #1 is 'number'; 'cc.Node' expected. 

所以我发现 addChild 对吞下 3 个精灵非常满意,但声明它们的存在表示参数计数为 0。我是 Lua 的新手,但这是一个不合理的不透明错误。我不明白。另请注意,在 lua 所依赖的 C++ 中,addchild() 是一个只有一个参数的函数,而不是 3,更不用说 0。

Pens = {}

for i = 1, 3 do  -- The range includes both ends.
    local bg = cc.Sprite:create("farm.jpg")
    local spriteSize = bg:getContentSize()
    local heightScale = frameSize.height/spriteSize.height
    local lengthScale = frameSize.width/spriteSize.width

    bg:setPosition(i*(self.origin.x + self.visibleSize.width / 2),
     i*(self.origin.y + self.visibleSize.height / 2))
    bg:setScale(lengthScale/2,heightScale/2)

    Pens[i] = bg --.newKey = {i,bg}
    print(Pens[i])
end

--Pens[4] = 4
--print(Pens[4])
print("bleh")

print(Pens[2])

for i, v in ipairs(Pens) do
    print(v)
    layerWorld.addChild(v)
end 

具有相同行为的更简单的代码:

Pens = {}

for i = 1, 5 do

    local spriteLand = cc.Sprite:create("land.png")
    spriteLand:setPosition(i*20,i*20)
    Pens[i] = spriteLand

end

for i, v in ipairs(Pens) do
    print(v)
    layerWorld.addChild(v)
end 

【问题讨论】:

  • "代码应该被读成一个连续的块,但我无法说服 end 加入聚会"

标签: lua cocos2d-x


【解决方案1】:

我无法解释这个问题,但也许这是一个解决方案。在 for 循环中,i 是索引,v 是值,因此您不需要索引表来获取值。只需尝试:

for i, v in ipairs(Pens) do
    print(v)
    layerWorld.addChild(v)
end 

【讨论】:

  • 这不起作用,该代码产生的错误与我之前的错误相同。但它确实看起来更干净,因此将被添加到有问题的主代码中......
  • 那么我建议将 addChild 移动到 i=1,3 块的初始位置。这里的问题可能是 Pen 表不会“保留”分配给它的对象,因此在 C++ 端 cocos2d-x 认为这些引用已经超出范围并删除/释放实例。
  • 那肯定行得通,我想这就是我要做的。我必须将我的世界中的各个帧抽象到他们自己的表格中,与呈现它们的精灵不同……这是一个更好的设计,而且我最终还是必须要做的,现在我考虑到了。感谢您的帮助,我将您的答案标记为已接受,因为我确信我不能这样做。
【解决方案2】:

layerWorld.addChild(v) -> layerWorld:addChild(v) 应该可以工作!

【讨论】:

    【解决方案3】:

    很明显: 更改为 ==== > layerWorld:addChild(v)layerWorld.addChild(self, v)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-08-03
      • 1970-01-01
      • 1970-01-01
      • 2020-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-02
      相关资源
      最近更新 更多