2013-11-27 5 views
0

Я хочу сделать эффект параллакса на моем экране заголовка фона с движущимися горами. «Трюк», который я хочу сделать, - это когда гора идет в конец экрана, вместо того чтобы уничтожить узел и создать его снова в начале, я просто хочу изменить его положение на начальную позицию и зациклить остальные действия. Для этого я создаю свой спрайт moutain в начале функции createSceneContents(), и я передаю спрайт методу animate(), который всегда делает одну и ту же комбинацию действий навсегда: анимировать вправо, а затем, когда она находится в позиции x, измените mountain.position.x в начале ...(iOs SpriteKit) Прохождение спрайта по методу

-(void)createSceneContents{ 

//crear 
SKSpriteNode *mountain = [SKSpriteNode spriteNodeWithImageNamed:@"mountain.png"]; 
mountain.name = @"mountain"; 
//initial position 
mountain.position = CGPointMake(-161.5,15); 
//animate 
SKAction *animRight = [SKAction moveToX:801.5 duration:4]; 

SKAction *comboActions = [SKAction repeatActionForever:[SKAction performSelector:@selector(animate:mountain) onTarget:@"mountain"]]; 

И здесь я имею мой метод заявление:

- (void) animate:(SKSpriteNode*)mountain 
{ 
     // code.... 
} 

Моя проблема я ВСЕГДА, имеющие ошибки, проходящие в SKSpriteNode * гору в моем методе и Я схожу с ума, пытаясь вечно.

ответ

0

Вы можете избежать выполнения действия Selector, используя настраиваемое действие, подобное этому.

SKAction* parallaxMoveAction = [SKAction sequence:@[[SKAction moveToX:801.5 duration:4.0f],[SKAction customActionWithDuration:0 actionBlock:^(SKNode* node, CGFloat elapsedTime){ 
      [node setPosition:CGPointMake(-161.5,15)]; 
     }]]]; 

Если вы установили произвольную продолжительность действия на 0, она будет выполняться только один раз.

С другой стороны, ваш выполнить действие селектор должен выглядеть следующим образом:

[SKAction performSelector:@selector(animate:) onTarget:self] 

Насколько я знаю, вы не можете передать аргументы к нему.

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