2011-03-29 107 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); 
    } 
}