依次添加addEventListener碰撞。

我正在制作一个简单的打砖块游戏,但我在 ball:addEventListener( "collision", removeBricks ) 中遇到了问题,当球同时撞击两个砖块时,上下方向(vy)会两次切换,使得球继续向上或向下移动。

如何逐个添加 addEventListener collision 并禁用一次多个碰撞?

function removeBricks(event)

    if event.other.isBrick == 1 then
        vy = vy * (-1)
        ...
    end
end
点赞
用户498176
用户498176

将下面翻译成中文并且保留原本的 markdown 格式

代替在 `removeBricks` 函数中修改小球速度,你可以简单地反转一个标志,表示“小球已经碰撞到了一些砖块,并且应该改变它的方向”,然后在 `enterFrame` 处理程序中只需更改小球的速度:

local ballHasCollided = false

local function removeBricks(event)
    if event.other.isBrick == 1 then
        ballHasCollided = true
    end
end

local function updateBallVelocity(event)
    if ballHasCollided then
        ballHasCollided = false
        ball.vy = -ball.vy
        -- ...
end

-- 在你的游戏设置代码中添加以下代码
Runtime:addEventListener('enterFrame', updateBallVelocity)

翻译:

不要在 removeBricks 函数中改变小球速度,你可以设置一个标志变量 ballHasCollided,表示小球已经碰撞到了砖块,需要改变它的方向。然后在 enterFrame 处理程序中,只需要更新小球的速度即可:

local ballHasCollided = false  -- 标志变量

local function removeBricks(event)
    if event.other.isBrick == 1 then
        ballHasCollided = true  -- 小球碰撞到了砖块,需要改变方向
    end
end

local function updateBallVelocity(event)
    if ballHasCollided then
        ballHasCollided = false  -- 处理完碰撞事件,将标志复位
        ball.vy = -ball.vy  -- 更新小球速度
        -- ...
end

-- 在游戏设置代码处添加以下代码
Runtime:addEventListener('enterFrame', updateBallVelocity)
2013-06-28 05:36:48