アプリでは、実行するたびに正方形にランダムなフレームを割り当てます。私はこのロジックを使用して確認します
a)各正方形がプレーヤーに近すぎない
b)各正方形が画面のビュー内に含まれているc)正方形が他の正方形に接触していない
for(UIButton* button in squareArray) {
BOOL shouldContinue = YES;
do {
int randX = arc4random() % 321;
int randY = arc4random() % 481;
button.frame = CGRectMake(randX, randY, button.frame.size.width, button.frame.size.height);
CGRect playerRect = CGRectMake(100, 180, 120, 120);
for(UIButton* b in squareArray)
if(!CGRectIntersectsRect(b.frame, button.frame) &&
!CGRectIntersectsRect(button.frame, playerRect) &&
CGRectContainsRect(self.view.frame, button.frame)) {
shouldContinue = NO;
}
} while (shouldContinue);
}
このコードでは、squareArrayの各正方形は(ループが完了すると)完全にビューの境界の内側にあり、配列内の他のボタンと交差せず、playerRectrectの境界の完全に外側にあると予想されます。 、画面中央の120x120の正方形です。私のコードは間違っていますか?私はこれらの機能のどれも得られないからです。
編集:私は実際、このメソッドの望ましい特性の1つを取得しています。つまり、playerRectと交差する正方形はありません。しかし、私はまだ互いに重なり合っている正方形と部分的に見えない正方形を取得します。
編集2:
ネストされたforループに次の変更を加えました。
for(UIButton* b in squareArray)
if(![b isEqual:button]) {
if(CGRectIntersectsRect(b.frame, button.frame) ||
CGRectIntersectsRect(button.frame, playerRect) ||
!CGRectContainsRect(CGRectMake(10, 10, 300, 460), button.frame))
shouldContinue = YES;
else
shouldContinue = NO;
}
そして今、正方形は常にビューのためにわずかに変更された(小さい)長方形内にあり、プレーヤーの正方形と交差することはありません。わーい。しかし、それらはまだ互いの上に表示されます。なんで?