0

在我将 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;
    }
}
4

3 回答 3

1

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

于 2014-03-14T17:33:27.847 回答
0

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

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

node.physicsBody = node.physicsBody;
于 2014-03-26T12:32:04.153 回答
0

在 iOS 7.1 之后我遇到了 X/Yscale 问题,也许这个答案也可以解决你的问题。

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

于 2014-03-12T10:29:10.830 回答