【问题标题】:SpriteKit: How to prevent two SKSpriteNodes from colliding (in Swift)SpriteKit:如何防止两个 SKSpriteNodes 碰撞(在 Swift 中)
【发布时间】:2016-01-25 02:14:58
【问题描述】:

我正在制作一个由玩家、障碍物和硬币组成的相对简单的游戏。我的目标是仅在障碍物和玩家之间发生碰撞,并让玩家和硬币之间的接触触发didBeginContact

这里有一些代码:

//declare categoryBitMasks
struct physicsCategories {
    static let playerCategory : UInt32 = 1
    static let coinCategory: UInt32 = 2
    static let obstacleCategory : UInt32 = 3 
}

//assign physics categories 
playerNode!.physicsBody?.categoryBitMask = physicsCategories.playerCategory
playerNode!.physicsBody?.collisionBitMask = physicsCategories.obstacleCategory
playerNode!.physicsBody?.contactTestBitMask = physicsCategories.coinCategory


obstacleNode.physicsBody?.categoryBitMask = physicsCategories.obstacleCategory
obstacleNode.physicsBody?.collisionBitMask = physicsCategories.playerCategory
obstacleNode.physicsBody?.contactTestBitMask = 0


coinNode.physicsBody?.categoryBitMask = physicsCategories.coinCategory
coinNode.physicsBody?.collisionBitMask = 0
coinNode.physicsBody?.contactTestBitMask = physicsCategories.playerCategory

didBeginContact 函数将硬币从视图中移除,并向用户的货币银行添加一枚。此函数在玩家击中硬币时调用,但在硬币被移除之前发生碰撞。碰撞对游戏玩法非常具有破坏性,我一直无法找到可行的解决方案。有什么建议吗?

【问题讨论】:

  • 您的问题是您的类别,搜索位掩码的工作原理。你不能做 1,2,3 他们必须是 2 的幂
  • @Knight0fDragon 那么我该怎么做呢,2、4、8?
  • 是的 1,2,4,8,16 或者是理解 0x1
  • @Knight0fDragon 做到了,谢谢!如果您想将其发布为答案,我会将其标记为正确。
  • 我不知道我很难找到它,我以前回答过这个问题,但我想其他人删除了它。如果有人看到它,请将其标记为重复。

标签: ios swift sprite-kit skphysicscontact


【解决方案1】:

您的问题是您的类别,搜索位掩码的工作原理。你不能做 1,2,3 他们必须是 2 的幂; 0x1

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-10-07
    • 2016-09-24
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多