ちょっとだけ質問です!画面上にランダムなスプライトが描画されるアプリを作りましたが、これらのスプライトが他のスプライトと重ならないようにしたいです (これらのスプライトは同じ絵ですが、位置はランダムのみです)。
助けてくれてありがとう。
ちょっとだけ質問です!画面上にランダムなスプライトが描画されるアプリを作りましたが、これらのスプライトが他のスプライトと重ならないようにしたいです (これらのスプライトは同じ絵ですが、位置はランダムのみです)。
助けてくれてありがとう。
スプライトが別のスプライトと交差するかどうかを確認するには、
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;
}
}
}
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)