主要创建一个简单的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))
答案 0 :(得分:2)
一个。不要使用类和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)