-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

メソッドの説明を見ましたか?これは共有されます。つまり、2回目に呼び出すときに、以前の値を上書きします。そのため、座標は同じです。

ここで解決策を見つけることができます: http ://www.andengine.org/forums/gles2/getting-the-center-coordinate-of-a-sprite-t8118-10.html

于 2012-06-28T12:19:07.600 に答える