1

请原谅总 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 函数用于调试,并且可以正常工作。但是打印 self.id 不起作用。我希望它能给我东西 id(应该是循环中定义的 i )。它返回“零”。

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

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并帮助我,我将非常感激。:-)

4

1 回答 1

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

继续编码......

于 2013-11-05T05:00:13.853 回答