0

1つのリストから画像をランダムに生成し、それらを画面上に生成し、継続的にデスポーンするセクションがあります。生成された画像は object と呼ばれるリストに入れられます。私が作ろうとしているのは、画面上に生成される各画像がユーザースプライトによる衝突検出を持つようにすることです。ただし、現時点では、生成された最初のラフトのみを検出します。

isOnRaft = 0

--Set log position and movement
local mRandom = math.random
local raft = {"Raft1" ,"Raft2"}
local objectTag = 0
local object = {}

function spawnlogright()
    objectTag = objectTag + 1
    local objIdx = mRandom(#raft)
    local objName = raft[objIdx]
    object[objectTag]  = display.newImage(objName..".png")
    object[objectTag].x = 416
    object[objectTag].y = 72
    object[objectTag].name = objectTag
    transition.to(object[objectTag], {time = 10000, x = -96, onComplete = function(obj) obj:removeSelf(); obj = nil; end})
    physics.addBody( object[objectTag], "static", {isSensor = true})
end
spawnlogright()
timer.performWithDelay(3500,spawnlogright,0)

function spawnlogright()
    objectTag = objectTag + 1
    local objIdx = mRandom(#raft)
    local objName = raft[objIdx]
    object[objectTag]  = display.newImage(objName..".png")
    object[objectTag].x = 416
    object[objectTag].y = 168
    object[objectTag].name = objectTag
    transition.to(object[objectTag], {time = 10000, x = -96, onComplete = function(obj) obj:removeSelf(); obj = nil; end})
    physics.addBody( object[objectTag], "static", {isSensor = true})
end
spawnlogright()
timer.performWithDelay(3500,spawnlogright,0)

function spawnlogleft()
    objectTag = objectTag + 1
    local objIdx = mRandom(#raft)
    local objName = raft[objIdx]
    object[objectTag]  = display.newImage(objName..".png")
    object[objectTag].x = -96
    object[objectTag].y = 120
    object[objectTag].name = objectTag
    transition.to(object[objectTag], {time = 10000, x = 416, onComplete = function(obj) obj:removeSelf(); obj = nil; end})
    physics.addBody( object[objectTag], "static", {isSensor = true})
end
spawnlogleft()
timer.performWithDelay(3500,spawnlogleft,0)

function spawnlogleft()
    objectTag = objectTag + 1
    local objIdx = mRandom(#raft)
    local objName = raft[objIdx]
    object[objectTag]  = display.newImage(objName..".png")
    object[objectTag].x = -96
    object[objectTag].y = 216
    object[objectTag].name = objectTag
    transition.to(object[objectTag], {time = 10000, x = 416, onComplete = function(obj) obj:removeSelf(); obj = nil; end})
    physics.addBody( object[objectTag], "static", {isSensor = true})    
end
spawnlogleft()
timer.performWithDelay(3500,spawnlogleft,0)

--while the frog is on the log...
function raftCollide(event)
    if ( event.phase == "began" ) then
         isOnRaft = isOnRaft + 1
        print(isOnLog)
    elseif ( event.phase == "ended" )then
        isOnRaft = isOnRaft - 1
        print(isOnLog)
    end
end

--add event for 'walking on the log'
object[objectTag]:addEventListener("collision", raftCollide)

そのため、生成されたすべてのいかだを検出し、isOnRaft に 1 を追加するには、ユーザー スプライトが必要です。これにより、ウォーターデス機能が無効になります。オブジェクト リスト内のすべてのラフトまたはすべてのエンティティに衝突検出を追加する方法はありますか。

どんな助けでも感謝します。

4

1 に答える 1

1

最後の行を次のように置き換えるだけです。

for logTag, logObject in pairs(object) do
    logObject:addEventListener("collision", raftCollide)
end

また、単なるアドバイスですが、好きなことをしてください。同じスコープで同じ名前の2つの関数を宣言しないようにしてください... 2番目のspawnRight / spawnLeft関数の名前を別の名前に変更する必要があります:)

于 2013-11-13T14:25:38.943 に答える