可以分别交互的同一物体的多个副本。

我试图创建多个具有可从任何地方访问的单独属性的相同显示对象的副本。 特别地,我希望能够点击和与它们每个人互动。 到目前为止,我的代码如下:-

centerX = display.contentCenterX
centerY = display.contentCenterY

local function onGemTouch(event)
    print("查看是否可以点击每个对象")
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
--我有四个随机使用的图像--

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 )

代码在感性方面运作良好,我希望出现的副本出现在我想要的网格中,但是只能点击对象的最后一个副本。 因此,显然我在这里做错了一些事情。 任何帮助将不胜感激。

点赞
用户2850543
用户2850543

不知道你的代码(或 Corona)的其他部分,我认为添加侦听器的正确语法是:

ball:addEventListener("tap", onGemTouch)

由于你想要将其添加到每个球中,你需要将它放在创建球的循环内部,或者将其放在创建球的函数内部。如果将其放在创建球的函数内部,代码如下:

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

由于 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
2015-04-05 06:01:00
用户4750231
用户4750231

谢谢你的回复 Millie。你的方法可能有效,但与此同时,我已经找到了另一个解决方案。

事实证明,我需要在 spawnTable 上添加 addEventListener("tap", onGemTouch)。但我会尝试你的方法 - 它似乎更容易。

2015-04-05 10:25:04