助けが必要です(ええと)。cocos2dでゲームのランダムなY位置を生成したいと思います。
したがって、状況は次のようになります。ゲームは0.2秒ごとにプラットフォームを生成します。iPhone/iPadは横向きモードです。プラットフォームは画面の右側に表示され(プラットフォームが画面の外側に表示されるように幅よりも大きいx)、を使用して画面の左端に向かって移動を開始しますCCMoveTo
。プラットフォームごとにランダムなYを選択します。問題は、プラットフォームを別のプラットフォームの上にスポーンしたくないということです。これは、「すでに取得されていない」randYを作成する必要があることを意味します。私がこれまでに試したコードは次のとおりです。
//this is a part of code from my addPlatform function. This part in particular cares for the generation of my Y coordinate.
int randY = arc4random() % (int)(3 * (winSize.height/4)); //This prevents to spawn a Y larger than 3/4 of the screen
//here I would like to loop long enough to find a good Y
while (![self isGoodPlatformY:randY])
{
randY = arc4random() % (int)(3 * (winSize.height/4));
}
次の部分は私のisGoodPlatformY
機能です
- (bool)isGoodPlatformY:(int)platY
{
CGSize winSize = [[CCDirector sharedDirector] winSize];
int padding = 100;
bool ok = true;
for (CCSprite *body in [self children])
{
if (body.tag > platformBody)
{
if (body.position.x < (winSize.width - padding))
{
if (abs(body.position.y - platY) < 20)
{
ok = false;
}
}
}
}
return ok;
}
プラットフォームよりも大きなタグですべてのボディをループします。タグを使用して分離するさまざまなタイプのプラットフォームがあります。ボディがプラットフォームの場合、最初にX座標を確認します。プラットフォームが十分に離れている場合(パディング)、その正確なポイントで新しいプラットフォームをスポーンできるので、次のプラットフォームを確認します。そうでない場合は、そのプラットフォームのYを確認します。この場合、Y座標が20ピクセル未満の場合は、新しいYを見つける必要があります。そのため、boolをfalseに設定し、forループの後に返します。中かっこは必要ないことはわかっていますが、他のことをテストしていたので、そこに入れました。
これはうまくいかないようです。自分が何を達成したいのかを明確にしたいと思います。あなたの側からの助けをいただければ幸いです。私があまりにも初心者のスタイルを見逃していないことを願っています:)
この問題は「どこでも」発生する可能性があるため、他の言語で質問にタグを付けました。