繁体   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