0

私は単純なブレイクアウト ゲームに取り組んでいますが、問題があります。ボールが上下方向 ( ) を 2 回切り替えて、ボールが上下に移動し続けるball:addEventListener( "collision", removeBricks )よりも、ボールが同時に 2 つのレンガに当たるまで正常に動作します。vy

addEventListener 衝突を 1 つずつ実行し、一度に複数の衝突を無効にするにはどうすればよいですか?

function removeBricks(event)

    if event.other.isBrick == 1 then
        vy = vy * (-1)  
        ...
    end
end
4

1 に答える 1

0

関数でボールの速度を変更する代わりに、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

-- your game set up code somewhere
Runtime:addEventListener('enterFrame', updateBallVelocity)
于 2013-06-28T05:36:48.123 に答える