Привет, я делаю игру с фреймворком SpriteKit и устанавливаю битовую маску столкновения при столкновении двух объектов. Один из этих объектов, скажем, объект A, может иметь 2 состояния: черный или нормальный, поэтому, когда два объекта сталкиваются, а объект A находится в нормальном состоянии, он добавляет точку, но когда два объекта сталкиваются, а объект A черный. сказать, что игра окончена. Этот код отлично работает для меня на iOS 7, но когда я запускаю его на iOS 8, и если состояние объекта A черное, он действует так, как будто он находится в нормальном состоянии и добавляет точку. Почему это происходит? Отличается ли код для iOS 7 и 8? Помогите пожалуйста, вот код:
-(void)didBeginContact:(SKPhysicsContact *)contact {
SKPhysicsBody *firstBody;
SKPhysicsBody *secondBody;
if (contact.bodyA.categoryBitMask < contact.bodyB.categoryBitMask) {
firstBody = contact.bodyA;
secondBody = contact.bodyB;
}else {
firstBody = contact.bodyB;
secondBody = contact.bodyA;
}
uint32_t collision = (contact.bodyA.categoryBitMask | contact.bodyB.categoryBitMask);
if (firstBody.categoryBitMask == objectACategory && secondBody.categoryBitMask == objectBCategory) {
NSLog(@"OBJECT A CAUGHT");
[firstBody.node removeFromParent];
[GameState sharedInstance].score++;
_scoreLabel.text = [NSString stringWithFormat:@"%d", [GameState sharedInstance].score];
_scoreLabel_2.text = [NSString stringWithFormat:@"%d", [GameState sharedInstance].score];
gameUrl = [NSURL fileURLWithPath:[[NSBundle mainBundle] pathForResource:@"sound " ofType:@"wav"]];
_gameSound = [[AVAudioPlayer alloc] initWithContentsOfURL:gameUrl error:nil];
_gameSound.delegate = self;
[_gameSound play];
if ([[firstBody.node.userData valueForKey:@"Black"] boolValue]) {
[self removeActionForKey:origamiFallKey];
NSLog(@"YOU LOSE");
[self gameOver];
[self runAction:[SKAction sequence:@[
[SKAction waitForDuration:0.5],
[SKAction performSelector:@selector(removeWhenLose) onTarget:self]]]];
}
}
Для установки состояния я использовал этот код в методе, который добавляет объектA:
// Black
if(arc4random_uniform(6) == 0) {
_objectA.texture = [SKTexture textureWithImageNamed:@"blackImage.png"];
_objectA.physicsBody.collisionBitMask = objectACategory;
_objectA.userData = [[NSMutableDictionary alloc] init];
[_objectA.userData setValue:@YES forKey:@"Black"];
blackObjectA = YES;
}
[_objectA.userData setValue:@YES forKey:@"Black"];
на[_objectA.userData setValue:@(YES) forKey:@"Black"];
решит вашу проблему и будет работать как на iOS7, так и на iOS8. - person Skyler Lauren   schedule 14.03.2015