【问题标题】:Wait for method complete to start next method in objective c等待方法完成以在目标 c 中启动下一个方法
【发布时间】:2016-02-09 18:10:42
【问题描述】:

我正在使用 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];
 }

我做错了什么,我需要改变什么,所以它按照我一开始解释的方式运行

【问题讨论】:

  • 顺便说一句:方法名称应始终以小写字母开头。
  • @bbum,我改变了它,但它没有任何区别
  • 它不应该有所作为;只是让你的代码更接近 Objective-C 标准模式。

标签: ios objective-c animation sprite-kit skscene


【解决方案1】:

当你运行死亡动画时,你在那里添加完成事件来触发游戏结束

[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];
}];

注意,不要只是复制和粘贴,因为我的目标 c 生锈了,它可能无法在目标 c 中 100% 工作

我还应该注意,这会创建一个对 self 的循环引用,所以你需要做一个 self 的弱版本。我忘记了如何在目标 c 中正确地做到这一点,我想说你可以添加类似 __weak SKNode *weakSelf = self; 的东西来完成工作,但我记得我最终在某个地方遇到了问题,所以不要一直使用它.

【讨论】:

    猜你喜欢
    • 2022-08-07
    • 2016-10-11
    • 1970-01-01
    • 2013-08-10
    • 2019-04-10
    • 1970-01-01
    • 1970-01-01
    • 2020-10-30
    • 2023-03-16
    相关资源
    最近更新 更多