2012-03-02 27 views
0

我有水平移動兩個背景imags這一空白功能,但我想垂直移動:如何在cocos2d中垂直移動這些背景圖像而不是水平移動?

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

更新到我的代碼:

,因爲我不想改變X-合作我認爲讓我改變y,所以圖像可以垂直移動!

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

    } 

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

但是,改變了我剛剛得到第一個背景,並沒有滾動正在做的:((

後臺初始化代碼:

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

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

     //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]; 

IM真正的新的Cocos2D和我不t真的明白它是如何工作的,謝謝!!

回答

3

現在你有一個工作代碼的記錄(你的問題在這裏),所以跳轉到代碼並使其垂直。

A position in cocos2d代表背景的中心。

position.x是水平分量,而position.y是垂直分量。

設置與ccp新的位置可以被認爲是

background.position = ccp(newX,newY); 

如果我們做了修改你,我們會被搶劫你的一個很好的學習經驗。給它一個鏡頭,當你靠近時更新你的問題,但仍然卡住。

更新... 所以

讓我們來看看代碼行之一,你改變

background.position = ccp(background.position.y - 30*dt,background.contentSize.width/2); 

這不會做你想做的,因爲你只打開X < - > y和寬度< - >高度 如果您無法使用短代碼來編寫較長的代碼(您必須學會在編寫短代碼之前),不要害怕

對於我們關注的一行,讓我們分解它的工作。

float bgOldX = background.position.x; 
float bgOldY = background.position.y; 
float bgNewY = bgOldY - 30*dt; 
// no need for newX because we are moving horizontally 
background.position = ccp(bgOldX,bgNewY); 

無論你得到你的原始代碼是由誰對這類東西很舒服的人寫的。代替1的4行代碼並不漂亮,但它可以幫助你理解這個過程。

更新

這裏是在使你的代碼更改的頂塊工作的一個鏡頭。我相信你應該看到兩個背景移動。這是基於您的第一個void函數正在工作的假設。如果您不能讓重置職位部分工作,我很樂意進一步提供幫助。

-(void) scroll:(ccTime)dt 
{ 
    // i am not too fond of my variable names 
    //move 30*dt px vertically 
    float bgOldX = background.position.x; 
    float bgOldY = background.position.y; 
    float bg2OldX = background2.position.x; 
    float bg2OldY = background2.position.y; 
    float bgNewY,bg2NewY; 
    // no need for newX because we are moving horizontally 
    if (background.position.y<background2.position.y){ 
     bgNewY = bgOldY-30dt; 
     bg2NewY = bgNewY+background.contentSize.height; 
     background.position = ccp(bgOldX,bgNewY); 
     background2.position = ccp(bg2OldX, bg2NewY);  
    }else{ 
     bg2NewY = bg2OldY-30dt; 
     bgNewY = bg2NewY+background2.contentSize.height; 
     background.position = ccp(bgOldX,bgNewY); 
     background2.position = ccp(bg2OldX, bg2NewY);  
    } 

    //reset offscreen position  
    //reset offscreen position 
    // etc.... 
} 
+0

感謝您的建議,我更新了我的代碼!但我得到一個靜止圖像! – MidnightCoder 2012-03-02 01:53:01

+0

@MidnightCoder MDT的建議是戰鬥的一半,我相信MDT會意識到他們的建議中缺少的東西,如果他們真的在構建和測試它。 (不是我自己運行代碼)看看我如何更改示例中更復雜的一行的描述...希望這會更有幫助。 – 2012-03-02 02:02:37

+1

感謝您的回答,我明白髮生了什麼,不是'background.postion = ccp(bgOldX,bgNewY);' – MidnightCoder 2012-03-02 02:18:11