Cocos2D вертикально прокручиваемый фон - PullRequest
4 голосов
/ 29 марта 2011

У меня есть три изображения (320x480), которые я пытаюсь прокрутить по вертикали в моем приложении Cocos2D.

В моем методе инициализации у меня есть следующее:

//adding background sprites
background = [CCSprite spriteWithFile:@"BG1.png"];
background2 = [CCSprite spriteWithFile:@"BG2.png"];

//position background sprites
background.position = ccp(size.width, size.height/2);
background2.position = ccp(size.width, size.height*2);

//schedule to move background sprites
[self schedule:@selector(scroll:)];

//adding them to the main layer
[self addChild:background z:0];
[self addChild:background2 z:0];

А вот мой метод прокрутки:

-(void) scroll:(ccTime)dt 
{
//move 30*dt px vertically
background.position = ccp(background.position.x, background.position.y - 30*dt);
background2.position = ccp(background2.position.x, background.position.y - 30*dt);

//reset offscreen position
if (background.position.y < 290)
{
    background.position = ccp(480/2, 480);
}else if (background2.position.y < 290)
{
    background2.position = ccp(480/2,480);
}
}

В настоящее время происходит смещение моего первого фонового изображенияпримерно на четверть экрана (по горизонтали), и он начинается на четверть пути вверх от нижней части экрана, но прокручивается вниз.Мое второе фоновое изображение на самом деле не появляется, первое изображение просто повторяется снова и снова, будучи смещенным.Можно ли как-нибудь сделать, чтобы два изображения плавно зацикливались в фоновом режиме, и как бы я включил третье изображение?

Кроме того, просто небольшой побочный вопрос, плохо ли называть объекты (я думаю, что они 'повторяющиеся объекты) с номерами в названии (например, background2 / background3)?

1 Ответ

6 голосов
/ 03 июня 2011

Протестировано для горизонтальной прокрутки в ландшафтном режиме (все, что вам нужно сделать, это изменить прокрутку с горизонтальной на вертикальную, вы должны быть в состоянии понять это) не забывайте, что ccposition идет от середины спрайта, а не от 0,0 ракурс ...:

    CGSize size = [CCDirector sharedDirector].winSize;

    //adding background sprites
    background = [CCSprite spriteWithFile:@"tracktest.png"];
    background2 = [CCSprite spriteWithFile:@"tracktest.png"];
    [background.texture setAliasTexParameters];
    [background2.texture setAliasTexParameters];

    //position background sprites
    background.position = ccp(background.contentSize.height/2,background.contentSize.width/2);
    background2.position = ccp(size.width,0);

    //schedule to move background sprites
    [self schedule:@selector(scroll:)];

    //adding them to the main layer
    [self addChild:background z:0];
    [self addChild:background2 z:0];

метод прокрутки:

-(void) scroll:(ccTime)dt 
{
        //move 30*dt px vertically
  if (background.position.x<background2.position.x){
      background.position = ccp(background.position.x - 30*dt,background.contentSize.height/2);
      background2.position = ccp(background.position.x+background.contentSize.width,background2.contentSize.height/2);
  }else{
      background2.position = ccp(background2.position.x- 30*dt,background2.contentSize.height/2);
      background.position = ccp(background2.position.x+background2.contentSize.width ,background.contentSize.height/2);

  }

  //reset offscreen position
  if (background.position.x <-background.contentSize.width/2)
  {
      background.position = ccp(background2.position.x+background2.contentSize.width,background.contentSize.width/2);
  }else if (background2.position.x < -background2.contentSize.width/2)
  {
      background2.position = ccp(background.position.x+background.contentSize.width, background2.contentSize.width/2);
  }
}
...