0

次のようなランダムな位置を持つシーンでランダムなスプライトを生成しています。

-(void)addWRight
{
int randNo = arc4random()%5;
int randType = arc4random()%3;

for(int i = 0; i <= randNo; i++)
{
    NSString *strSprite = @"1.png";
    if(randType == 0)
    {
        strSprite = @"1.png";
    }
    else if(randType == 1)
    {
        strSprite = @"2.png";
    }
    else
    {
        strSprite = @"3.png";
    }

    int minX = 130; 
    int maxX = 240; 
    int randX = arc4random() % (maxX - minX) + minX;

    CCSprite *spr = [CCSprite spriteWithFile:strSprite];
    spr.position = ccp(randX, 200);
    [self addChild:spr];
    [whiteArray addObject:spr];
}}

randNo の結果に応じてスプライトを追加します。たとえば、randNo の値が 2 の場合、3 つのスプライトが追加されます。私の問題は、スプライトのランダムな x 軸位置にあります。130~240の間のどこかに配置されるようにしました。これでうまくいきますが、x軸がランダム化されているため、2つ以上のスプライトが重なる傾向があります。私の質問は、スプライトが重ならないようにするにはどうすればよいですか?

4

2 に答える 2

0

2 つのアプローチを提案できます。

  1. 衝突検出: 新しいスプライトを追加する前に、その境界が他の既存のスプライトと交差していないことを確認してください。

2 つの境界が衝突するかどうかをチェックする複雑さを軽減するために、次のようにすることができます。

  1. 空間を離散化: グリッドを定義します。次に、このグリッド内のスプライトにランダムな座標を割り当てます。空間全体で割り当てられたグリッド セルの座標を計算します。たとえば、スプライトが 20x40 でスペースが 320x480 の場合、16x12 グリッドを使用できます。スプライトをセル (3,3) に割り当てると、これは (60,120) に対応します。この場合、座標を比較するだけで 2 つのスプライト間の衝突を検出します。
于 2013-02-11T10:17:51.470 に答える
0

この投稿には、 timTheMysticによって投稿されたコード スニペットがあります。良い方法ではありませんが、スプライト間のオーバーラップを防ぐための許容できる解決策です。

于 2014-03-11T12:08:24.403 に答える