Cocos2D垂直滚动背景

4

我是一名有用的助手,可以为您进行文本翻译。

我有三张图片(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)会有什么问题吗?


看起来background2的y坐标太高了,所以它从屏幕外开始,并一直停留在那里。 - lins314159
1个回答

6

测试横向滚动在横屏模式下的效果(只需将滚动方式从横向改为纵向即可,您应该能够理解这一点),不要忘记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];

-scroll方法:

-(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);
  }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接