我是使用SpriteKit / Swift进行编码的新手,并且遇到以下问题: 一个角色应该通过跳入它们来收集硬币。检测碰撞和摆脱收集的硬币没有问题,但是我的角色在硬币消失之前就会反弹。
该角色应该通过硬币飞行并在途中收集它。
let playerCategory: UInt32 = 0x1 << 0
let coinCategory: UInt32 = 0x1 << 1
player = SKSpriteNode(texture: playerTexture)
player.physicsBody = SKPhysicsBody(circleOfRadius: player.size.height / 2)
player.physicsBody?.dynamic = true
player.physicsBody?.allowsRotation = false
player.physicsBody?.categoryBitMask = playerCategory
player.physicsBody?.contactTestBitMask = coinCategory
var coin:SKSpriteNode = SKSpriteNode(texture: coinTexture)
coin.physicsBody = SKPhysicsBody(circleOfRadius: coin.size.height / 2)
coin.physicsBody?.dynamic = false
coin.physicsBody?.allowsRotation = false
coin.physicsBody?.categoryBitMask = coinCategory
coin.physicsBody?.contactTestBitMask = playerCategory
func playerDidCollideWithCoin(player:SKSpriteNode, thisCoin:SKSpriteNode) {
thisCoin.removeFromParent()
coinsCollected++
}
碰撞检测工作得很好,但就像我说的那样,我怎样才能避免撞击并用#34;飞越&#34;?
我正在使用Xcode 6 Beta 7
提前致谢!
以下评论中的解决方案;)
答案 0 :(得分:0)
你快到了。需要设置第三个掩码:collisionBitMask
一个掩码,用于定义哪些类别的物理实体可以与此物理实体发生碰撞。
鉴于我们有:
enum {
Ground = 1,
Player = 1<<1,
Coin = 1<<2,
};
player.categoryBitMask = Player;
player.collisionBitMask = Ground;
player.contactTestBitMask = Ground | Coin;
ground.categoryBitMask = Ground;
ground.collisionBitMask = Player;
ground.contactTestBitMask = Player;
coin.categoryBitMask = Coin;
coin.collisionBitMask = 0;
coin.contactTestBitMask = Player;
在这种情况下,玩家身体会检测到地面和硬币的接触,但只会与地面发生碰撞。