Сбой SpriteKit при выполнении действия на другом SKScene
У меня краш в интересной форме. Я настраиваю SKAction
лайк
-(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
, когда я настраиваю то же действие, у меня происходит сбой
Но если я выполню это действие сначала 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 ответ
Не уверен на 100%, что вы говорите, но если я вас правильно прочитал, вы устанавливаете свойство SKAction jumpAction в первой сцене и ссылаетесь на это действие в другой сцене. touchesBegan:
Метод (?):
[ninja runAction:self.jumpAction];
Если вы не настраиваете self.jumpAction
для вашей второй сцены, то вы, по сути, говорите [ninja runAction:nil];
Лично я считаю хорошей идеей привязать действия как можно ближе к узлу, который должен их выполнять (в данном случае к спрайту). Если вы повторно используете много действий для разных узлов, создание класса ActionFactory может быть другим способом...