Объекты в игре SpriteKit перестали сталкиваться после обновления iOS 7.1

Объекты в моей игре spriteKit перестали сталкиваться после обновления iOS 7.1. Это включает в себя границы экрана, поэтому персонаж просто убегает за пределы экрана. Я использую битовую маску для обнаружения коллизий и обработки коллизий в методе делегата didBeginContact. Я добавлю код того, как я добавляю свои SKNodes. Заранее спасибо.

//main character 
self.girl = [SKSpriteNode spriteNodeWithImageNamed:@"pixelgirl"];
self.girl.position = CGPointMake(self.size.width / 2, self.size.height * 0.2);
[self addChild:self.girl];        
self.girl.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:self.girl.size.height / 4];
self.girl.physicsBody.dynamic = YES;
self.girl.physicsBody.affectedByGravity = NO;
self.girl.physicsBody.mass = 0.02;
self.girl.physicsBody.allowsRotation = NO;
self.girl.physicsBody.categoryBitMask = girlCategory;
self.girl.physicsBody.contactTestBitMask = tallTreeCategory | uglyTreeCategory | shortTreeCategory;

//contact object 
SKSpriteNode *pixelShort = [SKSpriteNode spriteNodeWithImageNamed:@"pixelshort"];
pixelShort.physicsBody = [SKPhysicsBody bodyWithCircleOfRadius:pixelShort.size.width / 2]; //2
pixelShort.physicsBody.dynamic = NO;
pixelShort.physicsBody.categoryBitMask = uglyTreeCategory;

- (void)didBeginContact:(SKPhysicsContact *)contact
{

__block BOOL isRotating;

[self performSelector:@selector(moveDog) withObject:Nil afterDelay:.3];

isRotating = NO;

if (!isRotating) {
    SKAction* action0 = [SKAction scaleXTo:1.0 duration:0.05];
    SKAction* action1 = [SKAction scaleXTo:0.1 duration:0.05];
    SKAction* action2 = [SKAction scaleXTo:-0.1 duration:0.05];
    SKAction* action3 = [SKAction scaleXTo:-1.0 duration:0.05];

    SKAction* action = [SKAction sequence:@[action0,action1,action2, action3]];

    [self.girl runAction:action completion:^{
        isRotating = YES;
    }];

    }

}

person user1681673    schedule 06.04.2014    source источник
comment
Динамика должна быть ДА.   -  person Roecrew    schedule 07.04.2014
comment
Это все еще не работает, когда я изменил их на YES. Кроме того, спрайты танцуют по экрану, когда для параметра Dynamic установлено значение YES.   -  person user1681673    schedule 07.04.2014
comment
Странно то, что контакт с первым спрайтом работает нормально. Именно после первого контакта спрайты просто проходят друг через друга.   -  person user1681673    schedule 07.04.2014


Ответы (1)


Ваша проблема scaleXTo:-1.0. Я использовал точно такую ​​же команду, чтобы отразить один из моих спрайтов, и как только я это сделал, маленький парень перестал отвечать на ВСЕ контакты. Удалите его и все снова будет хорошо.

person sangony    schedule 06.04.2014
comment
Я считаю, что есть другие вопросы/ответы по этому поводу. Кроме того, обязательно установите для свойства showsPhysics вашего SKView значение YES. Это, вероятно, поможет вам визуально увидеть проблему, вызванную ошибкой отрицательного масштаба. - person prototypical; 07.04.2014
comment
@prototype - Абсолютно. Мне так и не удалось решить эту проблему с xTo-1, и в итоге я создал зеркальные изображения для своих спрайтов. Я восхвалял гения, создавшего в тот день сочетания клавиш! - person sangony; 07.04.2014
comment
ДА. Большое спасибо. Вот оно. Я никогда не думал, что это будет проблемой. Я думал, что это какое-то свойство узлов. ТЫ. Есть ли альтернатива вращению спрайта? - person user1681673; 07.04.2014
comment
Рад слышать, что решил вашу проблему. Это сводило меня с ума на несколько дней! Что касается вращения вашего спрайта... вы можете повернуть его, изменив свойство zRotation, НО ПОМНИТЕ, что zRotation находится в радианах. 1 радиан = 57,3 градуса. Вы также можете прикрепить к вашему спрайту короткую анимацию «повторять навсегда», состоящую из пары кадров. - person sangony; 07.04.2014