【问题标题】:Sprite Kit didBeginContact method not called after ios 7.1 upgradeios 7.1 升级后未调用 Sprite Kit didBeginContact 方法
【发布时间】:2014-03-11 06:29:42
【问题描述】:

在我将 iPhone 升级到 ios 7.1 后,didBeginContact 方法从未被调用过。有人知道怎么解决吗?

我们有

在 MainScene.h 中

@interface MainScene : SKScene <SKPhysicsContactDelegate>

在 MainScene.m 中

-(id)initWithSize:(CGSize)size
{
    [self.physicsWorld setGravity:CGVectorMake(0, kGravity)];
    [self.physicsWorld setContactDelegate:self];

     _ground.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:_ground.size];
       [_ground.physicsBody setCategoryBitMask:kGroundCategory];
       [_ground.physicsBody setCollisionBitMask:kPlayerCategory];
       [_ground.physicsBody setAffectedByGravity:NO];
       [_ground.physicsBody setDynamic:NO];

       _player.physicsBody = [SKPhysicsBody bodyWithRectangleOfSize:CGSizeMake(_player.size.width * kHitAreaScale, _player.size.height * kHitAreaScale)];
       [_player.physicsBody setDensity:kDensity];
       [_player.physicsBody setAllowsRotation:NO];

       [_player.physicsBody setCategoryBitMask:kPlayerCategory];
       [_player.physicsBody setContactTestBitMask: kGroundCategory | kMonsterCategory  kTopFloorCategory];
       [_player.physicsBody setCollisionBitMask:kGroundCategory | kMonsterCategory | kTopFloorCategory];
}


The following code in MainScene.m never get called in ios 7.1

- (void)didBeginContact:(SKPhysicsContact *)contact
{
    // firstBody: player
    SKPhysicsBody *firstBody, *secondBody;
    if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask)
    {
        firstBody = contact.bodyA;
        secondBody = contact.bodyB;
    }
    else
    {
        firstBody = contact.bodyB;
        secondBody = contact.bodyA;
    }
}

【问题讨论】:

  • 你需要给我们更多。需要一些与您的实现相关的代码。另外,你试过其他设备吗?
  • 感谢您的回复。刚刚在原始帖子中添加了一些代码。
  • 尝试在联系委托中使用 NSLog 来检查它是否被调用。此外,还要在您的地面节点上设置一个contactTestBitMask。你试过其他设备吗?
  • 我发现了问题。我将播放器 xScale 设置为 -1.0。如果我想保持 xScale = -1,你知道如何解决它吗?
  • 您可以通过在 iOS 7.1 模拟器和 iOS 7.0 模拟器中运行相同版本的应用程序来轻松测试问题是否与 iOS 7.1 相关。

标签: sprite-kit ios7.1


【解决方案1】:

绝对是 xScale 问题,在设置物理体之前或之后设置 xScale 似乎无关紧要。只要 xScale 设置为 -1,我的碰撞就不会起作用。 xScale 为 1 工作正常。

【讨论】:

    【解决方案2】:

    我在 iOS 7.1 之后遇到了 X/Yscale 问题,也许this answer 也解决了你的问题。

    只需将physicsBody 设置在X/Yscale 之前。

    【讨论】:

      【解决方案3】:

      我昨天才遇到这个问题。我想根据精灵的运动(向右或向左)反转精灵,并发现设置 xScale 会禁用任何碰撞/接触。

      但是,我每次设置 xScale 属性时都使用这条线,一切都恢复正常。

      node.physicsBody = node.physicsBody;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2014-04-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多