2014-02-20 2 views
0

У меня авария в интересной форме. Я нАлАдкА SKAction каксбой SpriteKit при запуске действия на другом 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.

Есть ли проблема в SpriteKit в SKTexture?

Выполнить мое действие подобное

-(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% уверен, что вы говорите, но если я читаю вас правильно, вы настройке jumpAction SKAction свойства в первой сцене и имеют в виду, что действия в touchesBegan: метод другой сцены (?):

[ninja runAction:self.jumpAction]; 

Если вы не настройки self.jumpAction для вашей второй сцены, то вы, по сути говоря [ninja runAction:nil];

Я лично считаю целесообразным связать действия как можно ближе к узлу, который должен его выполнять (в данном случае спрайту). Если вы повторно используете много действий для разных узлов, создавая класс ActionFactory, это может быть другим способом ...

+0

На самом деле нет :) Я устанавливаю это свойство на первом эпизоде ​​И на втором, том же коде. Например, если я делаю это, не используя junpAction, у меня есть сбой, но действие init jump действительно происходит в initWithSize SKScene * gameOver = [[MyScene alloc] initWithSize: self.size]; SKTransition * переход = [SKTransition doorsCloseVerticalWithDuration: 2]; [self.view данныйScene: играOver переход: переход]; – Roman

+0

Не могли бы вы добавить еще какой-то код в свой исходный пост, ваш init-метод, где вы, например, настроили свойство self.jumpAction? –

+0

обновите информацию сверху – Roman

Смежные вопросы