2013-12-03 1 views
1

У меня возникли проблемы с получением повторяющегося фона для работы в моем игровом меню.PanGesture с повторяемым фоном с использованием SpriteKit

Пользователь может перемещать палец по экрану, чтобы выбрать персонажа для воспроизведения. У меня есть эффект параллакса, работающий с различными фонами, когда персонажи скользят в поле зрения.

Образец ниже.

- (void)didMoveToView:(SKView *)view 
{ 
    self.pan = [[UIPanGestureRecognizer alloc]initWithTarget:self action:@selector(dragScene:)]; 
    self.pan.minimumNumberOfTouches = 1; 
    self.pan.delegate = self; 
    [self.view addGestureRecognizer:self.pan]; 
} 

- (void)dragScene:(UIPanGestureRecognizer *)gesture 
{ 
    CGPoint trans = [gesture translationInView:self.view]; 
    SKAction *moveSky = [SKAction moveByX:trans.x*0.03 y:0 duration:0]; 
    [_skyBackground runAction:moveSky]; 
} 

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

Спасибо за помощь!

+0

Как далеко может прокручиваться плеер? т.е. если фон может перемещаться бесконечно в любом направлении? – AndyOS

+0

Будет ограничено, насколько далеко может прокручиваться кто-то, но предел может измениться в любое время. Бесконечно было бы идеально. –

ответ

1

Вы можете создать еще два фоновых узла - один слева от вашего текущего фонового узла и один справа. Перемещайте их также в любое время, когда вы перемещаете существующий _skyBackground узел. Затем в методе обновления проверьте, нужно ли «переместить» любой из трех узлов - либо за два других, либо спереди. Вы в основном меняете позиции трех узлов, если это необходимо.

-(void)update:(NSTimeInterval)currentTime { 

    //get the left background node (or if using an ivar just use _leftNode) 
    SKSpriteNode *leftNode = (SKSpriteNode*)[self childNodeWithName:@"leftNode"]; 

    //my positioning might be off but you'll get the idea 
    if (leftNode.position.x < -leftNode.size.width*2) 
    { 
     leftNode.position = CGPointMake(leftNode.size.width, leftNode.position.y); 
    } 

    if (leftNode.position.x > leftNode.size.width*2) 
    { 
     leftNode.position = CGPointMake(-leftNode.size.width, leftNode.position.y); 
    } 

    //repeat the same for _skyBackground and _rightNode 

} 

Возможно, вам понадобится более трех изображений, если есть небольшие промежутки между изображениями при их смещении.