Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/187.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
为什么我的精灵有相同的中心坐标(Android和Engine)?_Android_Sprite_Andengine_Collision - Fatal编程技术网

为什么我的精灵有相同的中心坐标(Android和Engine)?

为什么我的精灵有相同的中心坐标(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

我试图找出我的精灵是否发生了碰撞(它们是圆,所以我不能使用CollizeSwith())。由于某种原因,虽然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]);
}