2011-12-29 10 views
2

2DゲームをUIKitからCocos2dに移植しています。私はUIKitのを使用したときに五つの異なる正方形のためのフレームを設定し、それの一部は、このように見えた:Cocos2dのCGRectロジック

- (void)setFrames { 
    [playerSquare setCenter:CGPointMake(160, 240)]; 

    for(int iii = 0; iii < [squares count]; iii++) { 
     int randX = arc4random() % 321; 
     int randY = arc4random() % 481; 

     [(UIButton*)[squares objectAtIndex:iii] setFrame:CGRectMake(randX, randY, [(UIButton*)[squares objectAtIndex:iii] frame].size.width, [(UIButton*)[squares objectAtIndex:iii] frame].size.height)]; 

     CGRect playerRect = CGRectMake(80, 160, 160, 160); 

     for(UIButton* b in squares) { 
      if((CGRectIntersectsRect(b.frame, [(UIButton*)[squares objectAtIndex:iii] frame]) && ![b isEqual:[squares objectAtIndex:iii]])) { 
       //make sure no two squares touch 
       iii--; 
       break; 
      } else if(CGRectIntersectsRect(playerRect, [(UIButton*)[squares objectAtIndex:iii] frame])) { 
       //no square is close to center of the screen 
       iii--; 
       break; 
      } else if(!CGRectContainsRect(CGRectMake(10, 10, 300, 460), [(UIButton*)[squares objectAtIndex:iii] frame])) { 
       //no square is close to the edges of the screen 
       iii--; 
       break; 
      } 
     } 
    } 
} 

これまでのところ、私はcocos2dで同じことを達成しようとしている:

- (void)setFrames { 
    for(int idx = 0; idx < [squares count]; idx--) { 
     int randX = arc4random() % 321; 
     int randY = arc4random() % 481; 

     [(CCSprite*)[squares objectAtIndex:idx] setPosition:ccp(randX, randY)]; 

     CGRect playerRect = CGRectMake(80, 160, 160, 160); 

     for(CCSprite* b in squares) { 
      if((CGRectIntersectsRect(b.boundingBox, [(CCSprite*)[squares objectAtIndex:idx] boundingBox]) && ![b isEqual:[squares objectAtIndex:idx]])) { 
       //make sure no two squares touch 
       idx--; 
       break; 
      } else if(CGRectIntersectsRect(playerRect, [(CCSprite*)[squares objectAtIndex:idx] boundingBox])) { 
       //no square is close to center of the screen 
       idx--; 
       break; 
      } else if(!CGRectContainsRect(CGRectMake(10, 10, 300, 460), [(CCSprite*)[squares objectAtIndex:idx] boundingBox])) { 
       //no square is close to the edges of the screen 
       idx--; 
       break; 
      } 
     } 
    } 
} 

しかし、この修正された方法は機能しません。正方形の1つが適切な位置に置かれますが、他の4つは常にcocos2dの点0、0にスポーンします(画面の左下隅)誰かが正しい方向に私を向けることができますか?

+0

randX randY座標とは何ですか?私は4つのスプライトのうち3つで0,0になることはほとんどないと思うので、あなたはどこか別の位置に再び変更することしか想像できません。 – LearnCocos2D

+0

forループ宣言をもう一度見てください:)それはすべて明らかになります。 –

答えて

1

私はちょうど問題を考え出しました。私がこれをしたと信じられません。あなたは、私が上記の持っているコードで見ることができるように、私はデクリメント部分を変更するのを忘れ

代わりの

for(int idx = 0; idx < [squares count]; idx++) 

:この方法ではある時点で、私は、forループのように設定していました減分から増分するループの数。したがって、最初のスプライトのみが設定されたのは、ループが0から開始し、idxがintの下限をオーバーランしてint sの上限に達するまで減少したことです。これは[squares count]以上です。ですから、私の新しいコードの唯一の問題は、idx ++とidxの違いです。

挫折間違い。