我应该如何为AndEngine实现ITouchArea.convertSceneToLocalCoordinates()?

时间:2011-09-18 17:12:51

标签: java android andengine coordinate-transformation

我正在使用AndEngine,我正在创建一个管理一堆精灵的类。 该类需要在用户触摸时执行某些操作,因此我使其实现了ITouchArea接口。

我定义的方法包含:

 @Override
 public boolean contains(float pX, float pY) {
    if(     pX >= this.mXCenterPosition - X_DIMENSION/2 &&
            pX <= this.mXCenterPosition + X_DIMENSION/2 && 
            pY >= this.mYCenterPosition - Y_DIMENSION/2 &&
            pY <= this.mYCenterPosition + Y_DIMENSION/2)
        return true;
    return false;
 }

和这个方法:

@Override
public boolean onAreaTouched(TouchEvent pSceneTouchEvent,
        float pTouchAreaLocalX, float pTouchAreaLocalY)

我仍然想念的是:

public float[] convertSceneToLocalCoordinates(float pX, float pY)

如果没有定义它,或者返回null,程序就会崩溃。我试着看看它是如何在其他类中实现的,但我并没有真正理解它的作用,我不知道它的功能是什么,所以我不知道如何实现它。该类的区域是一个简单的矩形。

这种方法应该怎样做?我该如何实现它?

1 个答案:

答案 0 :(得分:2)

该方法应该将场景空间中的坐标转换为本地空间(Entity)。如果Entity上只有翻译,那么您只需分别从给定的x和y坐标中减去mXmY

[在图像中,实体的(mX,mY)是(300,100)] enter image description here

通过旋转和缩放,它将使用相同的概念。只是x和y轴将被旋转/缩放,因此Sprite也将被旋转/缩放。您可能希望使用Transformation对象实现此功能(与Entity相同)。请参阅Entity.convertLocalToSceneCoordinates(final float pX, final float pY, final float[] pReuse)