-1

我试图弄清楚我的精灵是否发生了碰撞(它们是圆圈,所以我不能使用 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]);
}
4

1 回答 1

0

看到方法说明了吗?它是共享的,这意味着当您第二次调用它时,您会覆盖以前的值。这就是坐标相同的原因。

你会在这里找到解决方案: http ://www.andengine.org/forums/gles2/getting-the-center-coordinate-of-a-sprite-t8118-10.html

于 2012-06-28T12:19:07.600 回答