Дождитесь завершения метода, чтобы запустить следующий метод в цели c

я делаю игру с комплектом Sprite, в основном, когда "герой" умирает, затем запускает анимацию (в коде называется "AnimBack") и после этого переходит к игре поверх сцены, но теперь, когда "герой" умирает, он сразу же переходит в игру над сценой. Вот что у меня есть на данный момент:

-(void)AnimBack{
Animation =[SKSpriteNode spriteNodeWithImageNamed:@"die0"];
Animation.position = CGPointMake(self.frame.size.width/2, self.frame.size.height/2);

SKTextureAtlas *atlas =[SKTextureAtlas atlasNamed:@"die"];
SKTexture *die0 = [atlas textureNamed:@"die0"];
SKTexture *die1 = [atlas textureNamed:@"die1"];
SKTexture *die2 = [atlas textureNamed:@"die2"];
SKTexture *die3 = [atlas textureNamed:@"die3"]; 
NSArray *backatlas = @[die0, die1, die2, die3]; 
SKAction *backatlasanimation = [SKAction animateWithTextures:backatlas timePerFrame:0.1];
SKAction *wait = [SKAction waitForDuration:0.1];
SKAction *backaction = [SKAction sequence:@[wait, backatlasanimation]];
[Animation runAction:backaction];
[self addChild:Animation];
}

- (void)didBeginContact:(SKPhysicsContact*)contact {
//-----------------------------------//
if ((firstBody.categoryBitMask == ballCategory && secondBody.categoryBitMask == bottomCategory) || (firstBody.categoryBitMask == secballCategory && secondBody.categoryBitMask == bottomCategory)) {
    [self AnimBack];

    GameOver* gameOver = [[GameOver alloc] initWithSize:self.frame.size playerLose:YES];
    SKTransition *transition = [SKTransition pushWithDirection:SKTransitionDirectionUp duration:1.0f];
   [self.view presentScene:gameOver transition:transition];
 }

Что я делаю не так и что мне нужно изменить, чтобы все работало так, как я объяснил в начале


person artG    schedule 09.02.2016    source источник
comment
Кстати: имена методов всегда должны начинаться с строчной буквы.   -  person bbum    schedule 09.02.2016
comment
@bbum, я меняю это, но это не имеет значения   -  person artG    schedule 09.02.2016
comment
Это не должно было иметь никакого значения; просто приближает ваш код к стандартным шаблонам Objective-C.   -  person bbum    schedule 10.02.2016


Ответы (1)


когда вы запускаете анимацию смерти, вы добавляете туда событие завершения, чтобы запустить gameover

[hero runAction:dieingAnimationAction completion:
{
    GameOver* gameOver = [[GameOver alloc] initWithSize:self.frame.size playerLose:YES];
    SKTransition *transition = [SKTransition pushWithDirection:SKTransitionDirectionUp duration:1.0f];
    [self.view presentScene:gameOver transition:transition];
}];

Обратите внимание, не просто копируйте и вставляйте это, он может не работать на 100% в объекте c, так как мой объект c заржавел

также я должен отметить, что это создаст циклическую ссылку на self, поэтому вам нужно будет сделать слабую версию self. Я забыл, как правильно это сделать в цели c, я хочу сказать, что вы можете добавить что-то вроде __weak SKNode *weakSelf = self;, чтобы выполнить работу, но я помню, что где-то в процессе у меня возникли проблемы, поэтому не используйте это все время.

person Knight0fDragon    schedule 09.02.2016