スプライトが衝突したかどうかを調べようとしています (スプライトは円なので、collideswith() は使用できません)。何らかの理由で、中心の座標は同じ値を返しますが、一定である必要がある centerB は常に centerA と同じ座標を持ちます。理由はありますか?
public boolean collision(){
boolean collide=false;
float radA, radB;
float[] centerA;
float[] centerB= yourSprite[spriteNum].getSceneCenterCoordinates();
radB=yourSprite[spriteNum].getHeightScaled()/2;
Log.e("SpriteNum",Integer.toString(spriteNum));
if(spriteNum>0)
for(int x=0;x<spriteNum;x++){
centerA = yourSprite[x].getSceneCenterCoordinates();
radA=yourSprite[x].getHeightScaled()/2;
if(Math.sqrt(Math.pow((centerA[0]-centerB[0]),2)+Math.pow((centerA[1]-centerB[1]),2))<(radA+radB))
collide=true;
Log.e("CenterA",Float.toString(centerA[0])+", "+Float.toString(centerA[1]));
Log.e("CenterB",Float.toString(centerB[0])+", "+Float.toString(centerB[1]));
Log.e("RadA",Float.toString(radA));
Log.e("RadB",Float.toString(radB));
}
return collide;
}
重要な場合は、ここでスプライトを作成します。
private void createSpriteOnTap(float x, float y)
{
scale = 1;
down = true;
spriteNum++;
yourSprite[spriteNum] = new Sprite(x, y, textureRegionForYourSprite, getVertexBufferObjectManager())
{
boolean active = true;
@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent, float pTouchAreaLocalX, float pTouchAreaLocalY)
{
down = true;
if (pSceneTouchEvent.isActionMove())
{
if(active){
setScale(scale += 0.05);
setPosition(pSceneTouchEvent.getX() - getWidth() / 2, pSceneTouchEvent.getY() - getHeight() / 2);
}
if(collision()){
down=false;
active=false;
}
}
if(pSceneTouchEvent.isActionUp()){
down = false;
active = false;
}
Log.e("On Area touch",Boolean.toString(down));
return true;
}
};
new Thread(new grow(yourSprite[spriteNum])).start();
//lets register touch area
yourScene.registerTouchArea(yourSprite[spriteNum]);
//attach our sprite to the scene
yourScene.attachChild(yourSprite[spriteNum]);
}