【发布时间】: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