0

我只有一个简短的问题!我制作了一个应用程序,其中随机精灵在屏幕上绘制,我希望这些精灵不会与其他精灵重叠。(这些精灵是同一张图片,但位置只是随机的)

谢谢你的帮助。

4

2 回答 2

0

您可以使用 ArrayList 保存以前的精灵(太阳)位置,并可以在添加新太阳时应用检查

ArrayList<CGRect> sunArrayList=new ArrayList<CGRect>();

现在在屏幕上生成新精灵(太阳)时应用检查

boolean exist;// variable to check position already exist
do{
    exist=false; //set at every loop starting new no generated not exist we have to check this below. if exist change it to true
    //generate no
    int xRandom=3;//apply your logic for random location x
    int yRandom=5;//apply your logic for random location y

for(int i=0;i<sunArrayList.size();i++)
{
    if(sunArrayList.get(i).contains(xRandom,yRandom))
    {
        exist=true;
    }
}

    if(exist==false)// means your generated location not exist
    {
        // add sun to screen with position xRandom,yRandom
        //write code here to add sprite on screen (xRandom,yRandom)

        ///
        CGSize sunSize=CGSize.make(width, height);
        //CGSizeSunSize=sprite(sun) slicing size 

CGPoint sunPos=new CGPoint();
        sunPos.set(xRandom, yRandom);
CGRect randomLocationGeneratedSun=new CGRect(sunPos,sunSize);
sunArrayList.add(randomLocationGeneratedSun);
    }

}while(exist) 
于 2013-01-25T06:06:01.667 回答
0

要检查一个精灵是否与另一个精灵相交,您可以使用

CCSprite *sprite1, *sprite2;
if (CGRectIntersectRect(sprite1.boundingBox, sprite2.boundingBox)) {
  // sprites are overlapping
}

这没有考虑旋转,因为计算会变得更加复杂。

我不明白您是否要部署大量没有重叠的精灵,在这种情况下,一个相当简单的方法如下:

CCNode *parent;
for (int i = 0; i < AMOUNT; ++i) {
  CCSprite *sprite = [CCSprite spriteWith..];
  bool isOk = false;
  while (!isOk) {
    sprite.position = ccp(...);
    isOk = true;
    for (CCSprite *sprite2 in parent) {
      if (CGRectIntersectRect(sprite.boundingBox, sprite2.boundingBox)) {
        isOk = false;
        break;
      }
    }
  }
于 2013-01-21T16:01:06.580 回答