2012-03-02 9 views
0

私は水平に2つの背景の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-CO-を変更したくないので、縦座標は私が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); 
    } 
} 

しかし、それは私はちょうど第1の​​背景を取得し変更し、何のスクロールが行われていないされていると:((

バックグラウンドの初期化コード:cocos2dと私はドンは本当に新しい

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

イム」を

答えて

3

作業コード(ここにあなたの質問)の記録がありますので、コードにジャンプして垂直にしてください。

ココス2dのpositionは、背景の中心を表します。

position.xは水平成分であり、position.yは垂直成分です。私たちはあなたのための変更を行った場合ccpで新しいポジションを設定

として
background.position = ccp(newX,newY); 

考えることができ、我々は良い学習経験のあなたを奪うことと思います。あなたが近づいてもあなたの質問を更新してください。あなただけのx <を切り替えるため

更新... だから

のは、コードの行のいずれかを見てみましょうあなたは、これはあなたがやりたいことはありません

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

を変更しました - > yと幅< - >高さ 短いコードで作業することができない場合は、長いコードを書くことを恐れないでください(短いコードを書く前に学ばなければなりません)

私たちが注目している1行については、それを分解して作業してください。

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行のコードはあまり美しいものではありませんが、プロセスを理解するのに役立ちます。

更新

ここでの仕事にあなたのコードの変更の先頭ブロックを作るのショットです。 2つの背景が動くのを見てください。これは、最初の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

+0

@MidnightCoder MDTのアドバイスは戦闘の半分であり、実際にビルドしてテストしていれば、MDTは彼らのアドバイスに欠けているものを認識するだろうと確信しています。 (私は自分でコードを実行しているわけではありません)あなたの例のより複雑な行を変更する方法についての私の記述を見てください...うまくいけば、それはより役に立ちます。 –

+1

答えてくれてありがとう、私は何が起こっているのか理解していない、 'background.postion = ccp(bgOldX、bgNewY);' – MidnightCoder

関連する問題