SpriteKit:didBeginContact在iPad上不停调用

时间:2014-10-16 14:14:54

标签: ios objective-c ios8 sprite-kit

我有一个非常简单的项目,使用SpriteKit,一个怪物被丢弃并穿过一个平台。在iPhone上,当怪物击中平台时,didBeginContact会被调用一次。然而,在iPad上,当怪物滑过平台时,该方法每秒被调用几次。为什么iPhone上没有问题但是iPad上的马车?我已经在模拟器和实际的iPad上进行了测试。

这是我设置类别的地方

static const uint32_t playerCategory        = 0x1 << 0;
static const uint32_t bulletCategory        = 0x1 << 1;
static const uint32_t monsterCategory       = 0x1 << 2;
static const uint32_t platformCategory      = 0x1 << 3;
static const uint32_t worldCategory         = 0x1 << 4;

以下是怪物的设置

enemy.physicsBody.dynamic = YES;
enemy.physicsBody.affectedByGravity = YES;
enemy.physicsBody.allowsRotation = NO;
enemy.physicsBody.categoryBitMask = monsterCategory;
enemy.physicsBody.contactTestBitMask = worldCategory & platformCategory & bulletCategory;
enemy.physicsBody.collisionBitMask = platformCategory;

怪物如何被移动

enemy.physicsBody.velocity = CGVectorMake(100, 0);

以下是我知道不断调用didBeginContact的方法。我每秒都会得到一次日志,说怪物击中平台。我需要在以后实施新事物时解决此问题。

if (firstBody.categoryBitMask == monsterCategory && secondBody.categoryBitMask == platformCategory) {
    NSLog(@"Monster Hit Platform");
}

1 个答案:

答案 0 :(得分:2)

enemy.physicsBody.restitution = 0;
platform.physicsBody.restitution = 0;

这是“bounciness”财产。这样,当敌人和平台发生碰撞时,不会有很少的弹跳触发多个接触事件。

我还看到建议使用applyImpulse而不是手动设置速度。