使两个用函数(LUA,Corona)创建的对象可以互相接触。

我猜这是一个真正的新手问题,但是我有下面的代码:

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”。因此,意见监听器仅适用于我创建的“circle”。

有什么想法可以选择我创建的其他圆吗?

谢谢 :)

点赞
用户1190388
用户1190388

必须使用表格。例如:

circles = {}
local function createCircle()
  --[[ 更多代码 ]]--
  table.insert( circles, display.newCircle( positionX, positionY, circleRadius ) )
  --[[ 更多代码 ]]--
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
2013-02-25 16:00:03
用户2107910
用户2107910

这是我解决它的方法:

local function createCircle()
  --[[ 更多的代码 ]]--
   table.insert(circleTable, display.newCircle( positionX, positionY, circleRadius ) )
   --[[ 更多的代码 ]]--
end

function onObjectTouch(event)
   local self = event.target
   if event.phase == "ended" then
        --[[ 更多的代码 ]]--
   end
   return true;
end

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

createCircle()
addTouchListeners()

我猜Dream Eater的解决方案也可以有效。但我在调用createCircle()函数时还有一个错误。我通过创建一个TouchListeners函数,并在createCircle()函数之后调用它来解决了这个问题。

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

2013-02-26 18:06:19