我正在尝试使用可从任何位置访问的各个属性创建同一显示对象的多个副本。特别是,我希望能够点击并与每个人进行互动。到目前为止我的代码如下: -
centerX = display.contentCenterX
centerY = display.contentCenterY
local function onGemTouch(event)
print("to see if each object can be tapped")
end
local spawnTable = {}
local function gamebegin(params)
ball = display.newImageRect(params.image, 62,62)
ball.x = centerX - 4*60 +2*(params.x-1)*60
ball.y = centerY -3*60 + (params.y-1)*60
ball.ballTable = params.ballTable
ball.index = #ball.ballTable+1
ball.myName = ball.index
ball.ballTable[ball.index] = ball
return ball
end
--i have four images that I want to use randomly--
for i = 1, 4 do
for j = 1,7 do
local spawn = gamebegin({image = "images/" .. math.random(4) ..".png", x=i, y = j, ballTable = spawnTable})
end
end
ball.tap = onGemTouch
ball:addEventListener( "tap", ball )
代码的工作原理是没有错误,并且我想要的网格中的副本可以被点击,但只能点击对象的最后一个副本。显然我在这里做错了。 任何帮助将不胜感激。
答案 0 :(得分:1)
在不了解您的代码(或Corona)的情况下,我认为添加侦听器的正确语法是:
ball:addEventListener("tap", onGemTouch)
由于你想将它添加到每个球,你需要在循环内部创建球,或者你需要在创建球的功能内。如果我们把它放在创建球的函数中,我们得到:
local function gamebegin(params)
ball = display.newImageRect(params.image, 62,62)
...
ball:addEventListener("tap", onGemTouch)
ball.ballTable[ball.index] = ball
return ball
end
由于gamebegin
似乎只是在创建新球,为什么不将其重命名为addBall
?如果您将其添加到ballTable
并且从不使用返回值,则不要返回任何内容:
local function addBall(params)
ball = display.newImageRect(params.image, 62,62)
ball.x = centerX - 4*60 +2*(params.x-1)*60
ball.y = centerY -3*60 + (params.y-1)*60
ball.ballTable = params.ballTable
ball.index = #ball.ballTable+1
ball.myName = ball.index
ball:addEventListener("tap", onGemTouch)
ball.ballTable[ball.index] = ball
end
for i = 1, 4 do
for j = 1,7 do
addBall({
image = "images/" .. math.random(4) ..".png",
x=i,
y = j,
ballTable = spawnTable})
end
end
在我对你的答案的评论中添加建议:
local centerX = display.contentCenterX
local centerY = display.contentCenterY
local offset = 60
local imageSideLength = 62
local spawnTable = {}
local function onGemTouch(event)
print("to see if each object can be tapped")
end
local function getBall(imagePath, x, y)
local ball = display.newImageRect(imagePath, imageSideLength, imageSideLength)
ball.x = centerX - 4*offset + 2*(x - 1)*offset
ball.y = centerY - 3*offset + (y - 1)*offset
return ball
end
for i = 1, 4 do
for j = 1, 7 do
local ball = getBall("images/" .. math.random(4) .. ".png", i, j)
ball:addEventListener("tap", onGemTouch)
table.insert(spawnTable, ball)
end
end
答案 1 :(得分:0)
感谢您的答复Millie。您的方法可能会起作用,但我在此期间偶然发现了另一种解决方案
原来我需要将addEventListener(" tap",onGemTouch)添加到spawnTable。但我会尝试你的方法 - 看起来更容易。