检测Sprite Collision而不在SpriteKit中反弹

时间:2014-09-04 14:17:21

标签: ios swift sprite-kit sprite xcode6

我是使用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

提前致谢!

以下评论中的解决方案;)

1 个答案:

答案 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;

在这种情况下,玩家身体会检测到地面和硬币的接触,但只会与地面发生碰撞。