Как запустить или выполнить SKAction извне объекта?

У меня есть следующий код:

-(void) createBall {

    _ballSprite = [SKSpriteNode spriteNodeWithImageNamed:@"ball0001"];
    _ballSprite.position = CGPointMake(firstNode.position.x, firstNode.position.y);
     SKAction *ballScale =[SKAction scaleXTo:-0.5 duration:0];
     SKAction *ballMove = [SKAction moveByX:0 y:-300 duration:0];
     SKAction *ballMoveScale = [SKAction sequence:@[ballScale,ballMove];
     SKAction *ballScaleMove = [SKAction sequence:@[ballMove,ballScale]; //Unused variable
     [_ballSprite runAction:ballMoveScale];
     [self addChild:_ballSprite];

}

Теперь, как мне запустить, скажем, ballScaleMove снаружи, например. внутри обработчика touchBegan или в initWithSize ..и т.д.?

-(void)touchesBegan:(NSSet *)touches withEvent:(UIEvent *)event {

///here maybe
[_ballSprite runAction:ballScaleMove];  // Error undeclare identifier 'ballScaleMove';


}

person adimona    schedule 10.05.2014    source источник
comment
KAction не является допустимым классом. Вы имели в виду SKAction? Скопируйте/вставьте в точности тот код, с которым у вас в настоящее время возникают проблемы, чтобы мы могли более точно диагностировать вашу проблему.   -  person esqew    schedule 10.05.2014
comment
да спасибо, исправил.   -  person adimona    schedule 10.05.2014


Ответы (3)


Вам необходимо определить свои свойства или iVars как глобальные. определите их в @interface вашего класса

@interface
@property Class *myProperty;
@end

Затем вы можете получить к ним доступ с помощью self.myProperty или _myProperty (доступ к неявному iVar для вашего свойства)

Я надеюсь, что это помогает

person eharo2    schedule 10.05.2014
comment
глядя на мои коды, у меня уже есть SKSpriteNode*_ballSprite; но ты имеешь в виду, что у меня тоже должно быть что-то вроде SKAction*_ballScaleMove? У меня нет проблем с глобальным доступом к _ballSprite, но действия не будут работать. - person adimona; 10.05.2014
comment
Непонятно, почему голосование против... Объект ballScaleMove объявляется и создается в методе createBall. чтобы получить к нему доступ в методе touchesBegan, это должно быть глобальное свойство или iVar. Я что-то пропустил?.... е - person eharo2; 10.05.2014

Я реализовал объект Singleton, который возвращает все необходимые мне SKActions. Этот подход также имеет преимущество в повторном использовании SKActions.

person Stefan    schedule 10.05.2014

person    schedule
comment
Спасибо, Андрей, но фактическая последовательность намного больше, чем этот образец. Это упрощенная версия, следование вашему методу будет означать дублирование большого количества кода здесь и там, мне нужен простой способ замены действий. - person adimona; 10.05.2014