使用单独侦听器生成对象的 Corona

请原谅这个超级初级的问题。我是 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 函数用于调试,可以正确工作。但是打印 self.id 不起作用。我期望它会给我东西 ID (应该是在循环中定义的 i)。它返回“nil”。

我尝试将生成循环更改为:

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));

我已经阅读并搜索了三天,仍然找不到答案。如果您可以怜悯一个新手并帮我解决问题,我将不胜感激。 :-)

点赞
用户1979583
用户1979583
本地变量 thingy = {}
本地变量 positionSpacing = 55

函数 tapHandler(event)
    打印(event.target.name)
end

对于 i = 161 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

继续编写代码...........

2013-11-05 05:00:13