簡體   English   中英

SpriteKit + Swift中的碰撞檢測

[英]Collision Detection in SpriteKit + Swift

我正在使用SpriteKit + Swift制作一個簡單的Pong游戲。 現在,我正在嘗試檢測球何時擊中屏幕邊緣。 當我運行代碼並且球碰到屏幕邊緣時,由於某種原因,得分增加了兩倍而不是一次。 例如,控制台讀取

Player 1 has a score of: 1.
Player 1 has a score of: 2.

當我一次點擊屏幕右側時。

我在didBeginContact函數中的代碼:

func didBeginContact(contact: SKPhysicsContact) {
    var firstBody = SKPhysicsBody()
    var secondBody = SKPhysicsBody()

    if contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask {
        firstBody = contact.bodyA
        secondBody = contact.bodyB
    } else {
        firstBody = contact.bodyB
        secondBody = contact.bodyA
    }

    if firstBody.categoryBitMask == ballCategory && secondBody.categoryBitMask == leftSideCategory {
        player2Score++
        print("Player 2 has a score of: \(player2Score).")
    } else if firstBody.categoryBitMask == ballCategory && secondBody.categoryBitMask == rightSideCategory {
        player1Score++
        print("Player 1 has a score of: \(player1Score).")
    }

}

firstBody.categoryBitMask設置為firstBody.categoryBitMask以外的其他ballCategory 可能是諸如deadBallCategory類的deadBallCategory ,它設置為0x0(或0,或者無論如何定義它們,將其設置為0)。 然后,您的firstBody (球)將不會繼續觸發您的didBeginContact函數。 創建要添加到場景中的新球時,請確保將categoryBitMask設置為ballCategory (無論如何看起來都可以)。

暫無
暫無

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

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