2

我正在使用 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,程序就会崩溃。我试着看一下它在其他类中是如何实现的,但是我并没有真正理解它是做什么的,也不知道它的作用是什么,所以我不知道如何实现它。类的区域是一个简单的矩形。

这个方法应该怎么做?我将如何实施它?

4

1 回答 1

2

该方法应该将场景空间中的坐标转换为局部空间(的Entity)。如果您的 上只有平移Entity,那么您只需分别从给定的 x 和 y 坐标中减去mX和。mY

【图中实体的(mX, mY)为(300, 100)】 在此处输入图像描述

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

于 2011-09-18T21:02:10.700 回答