为什么我的精灵有相同的中心坐标(Android和Engine)?
我试图找出我的精灵是否发生了碰撞(它们是圆,所以我不能使用CollizeSwith())。由于某种原因,虽然centerB(应为常数)始终与centerA具有相同的坐标,但中心的坐标返回的却是相同的。知道为什么吗为什么我的精灵有相同的中心坐标(Android和Engine)?,android,sprite,andengine,collision,Android,Sprite,Andengine,Collision,我试图找出我的精灵是否发生了碰撞(它们是圆,所以我不能使用CollizeSwith())。由于某种原因,虽然centerB(应为常数)始终与centerA具有相同的坐标,但中心的坐标返回的却是相同的。知道为什么吗 public boolean collision(){ boolean collide=false; float radA, radB; float[] centerA; float[] centerB= yourSprite[spriteN
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]);
}