使用函数创建两个可触摸的对象(LUA,Corona)

时间:2013-02-25 15:51:32

标签: function lua corona addeventlistener

我猜这是一个真正的新手问题,

但我有以下代码:

local function createCircle()
[...]
circle = display.newCircle( positionX, positionY, circleRadius )
[...]
end

function circle:touch( event )
   if event.phase == "ended" then
      scaleCircle(self,scaleUp)
   end
   return true;
end
circle:addEventListener("touch", circle)

我清理了一下,专注于重要的事情。

我现在的问题是:我可以触摸一个圆圈并进行缩放。但这只适用于其中一个圈子(我想创建它们中的3个或4个)。而且我猜它只适用于最后创建的圆圈。

我想这里的主要问题是,我用“createCircle()”创建的所有圆圈都被命名为“circle”。因此,evenListener仅适用于我创建的“圆圈”。

如何选择我创建的其他圈子?

谢谢你:)

2 个答案:

答案 0 :(得分:1)

必须使用表格。例如:

circles = {}
local function createCircle()
  --[[ MORE CODE ]]--
  table.insert( circles, display.newCircle( positionX, positionY, circleRadius ) )
  --[[ MORE CODE ]]--
end
function circle:touch( event )
   if event.phase == "ended" then
      scaleCircle(self,scaleUp)
   end
   return true;
end
for _, circle in ipairs( circles ) do
  circle:addEventListener("touch", circle)
end

答案 1 :(得分:1)

这就是我解决它的方法:

local function createCircle()
  --[[ MORE CODE ]]--
   table.insert(circleTable, display.newCircle( positionX, positionY, circleRadius ) )
   --[[ MORE CODE ]]--
end

function onObjectTouch(event)
   local self = event.target
   if event.phase == "ended" then
        --[[ MORE CODE ]]--
   end
   return true;
end

local function addTouchListeners()
   for _, circle in ipairs(circleTable) do
      circle:addEventListener("touch", onObjectTouch)
   end
end

createCircle()
addTouchListeners()

我猜Dream Eaters解决方案应该也能正常运行。但是我在调​​用createCircle()函数时遇到了另一个错误。我通过为TouchListeners创建一个函数并在createCircle()函数之后调用它来解决这个问题。

希望这可以帮助其他有类似问题的人。