将事件阶段添加到随机生成的对象上。

我有四排筏子,它们随机生成,移动到屏幕的另一侧,然后消失。我在筏子下面放了水的图像。我已经使得当用户走上筏子时,可以避免水重新生成的功能。然而,这只对每行生成的第一个筏子起作用。

如何使得最后一个事件侦听器检测到所有筏子的碰撞?

点赞
用户2530838
用户2530838

如果你的代码是这样编写的,那么 objectTag 将指向最后一个 log,所以只有最后一个物体会添加事件监听器。

你可以像这样重新排列它:

local mRandom = math.random
local raft = {"Raft1" ,"Raft2","Raft3"}
local objectTag = 0
local object = {}

--移动此函数以便稍后调用
--青蛙在日志上时...
function raftCollide(event)
    if ( event.phase == "began" ) then
        isOnRaft = isOnRaft + 1
    elseif ( event.phase == "ended" )then
        isOnRaft = isOnRaft - 1
    end
end

--将所有生成日志的函数放在一起,这会让你更容易地控制插入日志的索引。
function spawnLogs()
    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})
        --对每个日志添加事件监听器
        --添加 '在日志上行走' 的事件
        object[objectTag]:addEventListener("collision",raftCollide)
    end

    spawnLogRight()
    timer.performWithDelay(3000, spawnLogRight, 0)
    --继续添加日志....
end

spawnLogs()

计时器函数是否生成了日志?你可能需要为生成函数添加一个事件参数。另外,尝试将所有生成函数放在一个函数中,这将使你更容易控制插入日志的索引。

2013-11-13 06:55:20