Corona - 具有个体侦听器的Spawn对象

时间:2013-11-05 02:38:59

标签: lua touch corona

请原谅总的n00b问题。我是Corona SDK的新手(一般编程,除了一些VB并阅读Frank Zammetti的优秀书籍),我遇到了一个问题。经过多次尝试和广泛搜索,我无法理解这个......

背景:作为一项学习练习,我正在尝试编写一个有六个“东西”的游戏。每件东西都将根据随机属性给出“得分”,得分最高的东西将是“正确”的选择。用户将点击他们的选择,然后他们将被告知他们是否正确选择了。

我正在处理我的'绘制级别'功能,它将产生这些东西。此功能应在屏幕上生成6个图像,然后通过点击识别这六个图像中的每一个。这是我写的代码:

for i=1,6,1 do 
  thingy[i] = display.newImageRect("graphics/thingy.png", 67, 122, true);
  thingy[i].name = ("thingy"..i);
  thingy[i].id = i;
  thingy[i].x = (positionSpacing * i) - (positionSpacing / 2);
  thingy[i].y = display.contentCenterY;
  table.insert(thingy[i], gc.gameDG);
  print(thingy[i].name.." "..thingy[i].x.." index "..thingy[i].id); --for debug
  thingy[i]:addEventListener("tap", gc.positionTapped);

end

这样可以愉快地在屏幕上创建内容。那么我定义一个函数来响应事物的攻击:

function gc:positionTapped(event)
  utils:log(sceneName, "positionSelected()");
  print(self.id);

end

utils:log函数用于调试,并且可以正常工作。但是print self.id不起作用。我期待它给我一些东西(我应该按照循环中的定义)。它返回'nil'。

我尝试将spawn循环更改为:

for i=1,6,1 do 
  thingy[i] = display.newImageRect("graphics/thingy.png", 67, 122, true);
  thingy[i].name = ("thingy"..i);
  thingy[i].id = i;
  thingy[i].x = (positionSpacing * i) - (positionSpacing / 2);
  thingy[i].y = display.contentCenterY;
  table.insert(thingy[i], gc.gameDG);
  print(thingy[i].name.." "..thingy[i].x.." index "..thingy[i].id); --for debug
  thingy[i]:addEventListener("tap", gc:positionTapped);

 end

循环崩溃,“预期附近的函数参数”“

所以我又把它改成了:

for i=1,6,1 do 
  thingy[i] = display.newImageRect("graphics/thingy.png", 67, 122, true);
  thingy[i].name = ("thingy"..i);
  thingy[i].id = i;
  thingy[i].x = (positionSpacing * i) - (positionSpacing / 2);
  thingy[i].y = display.contentCenterY;
  table.insert(thingy[i], gc.gameDG);
  print(thingy[i].name.." "..thingy[i].x.." index "..thingy[i].id); --for debug
  thingy[i]:addEventListener("tap", gc:positionTapped());

end

它崩溃了“运行时错误断言失败!”在循环中,同样如下:

 thingy[i]:addEventListener("tap", gc.positionTapped(thingy[i].id));

同样如此:

 thingy[i]:addEventListener("tap", gc.positionTapped(i));

我一直在阅读和谷歌搜索三天仍然找不到答案。如果你能怜悯n00b并帮助我,我真的很感激。 :-)

1 个答案:

答案 0 :(得分:2)

试试这个:

local thingy = {}
local positionSpacing = 55

function tapHandler(event)
    print(event.target.name)
end

for i=1,6,1 do
  thingy[i] = display.newImageRect("Icon.png", 50, 50, true);
  thingy[i].x = (positionSpacing * i) - (positionSpacing / 2);
  thingy[i].y = display.contentCenterY;
  thingy[i].name = ("thingy"..i);
  thingy[i]:addEventListener("tap",tapHandler)
end

继续编码...............