簡體   English   中英

同一對象的多個副本,可以分別與之交互

[英]multiple copies of the same object that can be interacted with separately

我正在嘗試使用可以從任何地方訪問的單個屬性創建同一顯示對象的多個副本。 特別是,我希望能夠利用它們並與它們互動。 到目前為止,我的代碼如下:

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 )

該代碼在沒有錯誤的意義上起作用,並且副本出現在我想要的網格中,但是只能單擊該對象的最后一個副本。 所以很明顯,我在這里做錯了。 任何幫助將不勝感激。

在不了解您的代碼(或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

感謝您的答復米莉。 您的方法可能會起作用,但與此同時我偶然發現了另一種解決方案

原來我需要將addEventListener(“ tap”,onGemTouch)添加到spawnTable中。 但我會嘗試您的方法-似乎更容易。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM