2011-03-29 130 views
4

我有三个图像(320x480),我试图在Cocos2D应用程序中垂直滚动。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)?

+0

在我看来就像background2的y坐标是太高,所以它开始关闭屏幕并在那里停留。 – lins314159 2011-03-29 22:43:26

回答

6

在横向模式下进行水平滚动测试(所有你需要做的是将滚动从水平滚动到垂直,你应该能够弄清楚)不要忘记ccposition是从sprite的中间,而不是从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); 
    } 
}