尝试为使用电晕的lua中的数组的一部分添加一个事件监听器

时间:2012-07-18 21:03:08

标签: lua corona

主要创建一个简单的2d数组。现在我想为表中的每个对象创建一个addeventlistener。我认为我在课堂上这样做?虽然我已经创建了一个水龙头功能,然后定义了addeventlistener,但我得到了错误。

--main.lua--
grid={}
for i =1,5 do
grid[i]=  {}
for j =1,5 do

        grid[i][j]=diceClass.new( ((i+2)/10),((j+2)/10))
    end
end
--dice class--
local dice = {}
local dice_mt = { __index = dice } -- metatable


function dice.new( posx, posy) -- constructor
local a=math.random(1,6)
local b= true
local newdice = display.newText(a, display.contentWidth*posx,
    display.contentHeight*posy, nil, 60)
--newdice:addEventListener("tap", taps(event))

return setmetatable( newdice, dice_mt )
end


function dice:taps(event)
self.b = false
print("works")
end
function dice:addEventListener("tap", taps(event))

2 个答案:

答案 0 :(得分:2)

直到今天,这让我很难过。主要的问题是你正在制作一个Corona display.newText对象,然后将它重新分配为一个骰子对象。所有Corona对象都像普通表一样,但它们实际上是特殊对象。所以你有两个选择:

一个。不要使用类和OOP。正如你的代码现在,没有理由让骰子成为一个类。这是我选择的选项,除非你有一些令人信服的理由让骰子上课。以下是如何实现此选项

--dice not a class--
local dice = {}

local function taps(event)
    event.target.b = false
    print("works")
end

function dice.new( posx, posy) -- constructor
    local a=math.random(1,6)
    --local b= true
    local newdice = {}
    newdice = display.newText(a, display.contentWidth*posx,
    display.contentHeight*posy, nil, 60)
    newdice:addEventListener("tap", taps)
    newdice.b = true
    return newdice
end

或B.对显示对象使用“has a”关系而不是“is a”关系。由于您无法将它们设置为骰子对象和显示对象,因此骰子对象可以包含显示对象。这就是看起来的样子。

--dice class--
local dice = {}
local dice_mt = { __index = dice } -- metatable

local function taps(event)
    event.target.b = false
    print("works")
end

function dice.new( posx, posy) -- constructor
    local a=math.random(1,6)
    --local b= true
    local newdice = {}
    newdice.image = display.newText(a, display.contentWidth*posx,
    display.contentHeight*posy, nil, 60)
    newdice.image:addEventListener("tap", taps)
    newdice.b = true
    return setmetatable( newdice, dice_mt )
end

还有一些其他问题。在你的点击功能事件处理程序中,你必须使用event.target.b而不是self.b.另外,在dice.new中,b是一个局部变量,所以它不是你骰子类的成员。

答案 1 :(得分:1)

删除最后一行。

应该像这样调用addEventListener函数

newdice:addEventListener("tap", taps)