精灵和碰撞检测cocos2d android

时间:2013-01-21 15:53:23

标签: android cocos2d-iphone collision sprite overlapping

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

感谢您的帮助。

2 个答案:

答案 0 :(得分: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;
      }
    }
  }

答案 1 :(得分: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)