2014-02-20 28 views
0

我以有趣的形式崩溃。我安装SKActionSpriteKit在其他SKScene上运行时发生崩溃

-(id)initWithSize:(CGSize)size 
{ 
    if (self = [super initWithSize:size]) 
    { 
     self.backgroundColor = [SKColor colorWithWhite:255 alpha:1]; 

     [self createNinja]; 
     [self setUpJump]; 
    } 
    return self; 
} 

- (void)setUpJump 
{ 
    SKTextureAtlas *jumpAtlas = [SKTextureAtlas atlasNamed:@"Ninja_jump"]; 

    SKTexture *jump1 = [jumpAtlas textureNamed:@"Ninja_jump_1"]; 
    SKTexture *jump2 = [jumpAtlas textureNamed:@"Ninja_jump_2"]; 
    SKTexture *jump3 = [jumpAtlas textureNamed:@"Ninja_jump_3"]; 
    SKTexture *jump4 = [jumpAtlas textureNamed:@"Ninja_jump_4"]; 

    SKAction *jumpUpAnimation = [SKAction animateWithTextures:@[jump1, jump2, jump3, jump4] 
              timePerFrame:0.07]; 

    SKAction *jumpDownAnimation = [SKAction animateWithTextures:@[jump3, jump2, jump1, [SKTexture textureWithImageNamed:@"Ninja"]] 
               timePerFrame:0.07]; 

    SKAction *wait = [SKAction waitForDuration:0.3]; 

    self.jumpAction = [SKAction sequence:@[jumpUpAnimation, wait, jumpDownAnimation]]; 
} 

但是,当我不跑在第一SKScene这一行动,并去其他SKScene,当我设置了同样的动作,我有一个崩溃

enter image description here

但是如果我在第一个SKScene上运行此操作,则下一个SKScene上的所有内容都可以正常运行。

SKTextureSpriteKit中有问题吗?

运行我的动作像

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event 
{ 
    for (UITouch *touch in touches) 
    { 
     CGPoint location = [touch locationInNode:self]; 

     SKSpriteNode *ninja = (SKSpriteNode *)[self childNodeWithName:@"ninja"]; 

     if (location.x > 230 && 
      (location.x < 419 && location.y > 500)) 
     { 
      [ninja runAction:self.jumpAction]; 
     } 
    } 
} 
+1

你能发布更多的代码吗?代码,你实际运行的行动。 –

+0

实际上当我点击对象时运行动作,或者像在忍者上方的代码中点击更高。 – Roman

+0

您是在第一个场景中设置动作吗? –

回答

0

不是100%肯定你在说什么,但如果我读你的权利,你是设置在第一现场的SKAction财产jumpAction,并指的是行动其他场景的touchesBegan:方法(?):

[ninja runAction:self.jumpAction]; 

如果不建立self.jumpAction你的第二个场景,那么你基本上是说[ninja runAction:nil];

我个人觉得把行为尽可能靠近应该执行它的节点(在这个例子中是精灵)是一个好主意。如果你正在重复使用大量的动作来创建一个ActionFactory类,那么可以通过另一种方式去实现它...

+0

其实没有:)我在第一个场景上设置了这个属性,并且在第二个场景中设置了相同的代码。例如,如果我这样做不使用junpAction,我有一个崩溃,但实际上在initWithSize初始化跳转动作 SKScene * gameOver = [[MyScene alloc] initWithSize:self.size]; SKTransition * transition = [SKTransition doorsCloseVerticalWithDuration:2]; [self.view presentScene:gameOver transition:transition]; – Roman

+0

你可以在原始文章中添加更多的代码,例如你在哪里设置'self.jumpAction'属性的init方法? –

+0

顶部 – Roman