我只是一个简短的问题! 我制作了一个应用程序,其中随机精灵在屏幕上绘制,我希望这些精灵不会与其他精灵重叠。(这些精灵是相同的图片,但位置只是随机的)
感谢您的帮助。
答案 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)