2012-06-21 25 views
-1

我想弄清楚我的精靈是否發生碰撞(它們是圓圈,所以我不能使用collideswith())。由於某些原因,中心的座標返回相同,儘管centerB應該是常數,但其座標始終與centerA的座標相同。任何想法爲什麼?爲什麼我的精靈有相同的中心座標(Android AndEngine)?

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]); 
} 

回答