我只有一个简短的问题!我制作了一个应用程序,其中随机精灵在屏幕上绘制,我希望这些精灵不会与其他精灵重叠。(这些精灵是同一张图片,但位置只是随机的)
谢谢你的帮助。
我只有一个简短的问题!我制作了一个应用程序,其中随机精灵在屏幕上绘制,我希望这些精灵不会与其他精灵重叠。(这些精灵是同一张图片,但位置只是随机的)
谢谢你的帮助。
您可以使用 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)
要检查一个精灵是否与另一个精灵相交,您可以使用
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;
}
}
}