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にスポーンします(画面の左下隅)誰かが正しい方向に私を向けることができますか?
randX randY座標とは何ですか?私は4つのスプライトのうち3つで0,0になることはほとんどないと思うので、あなたはどこか別の位置に再び変更することしか想像できません。 – LearnCocos2D
forループ宣言をもう一度見てください:)それはすべて明らかになります。 –