我正在使用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,程序就会崩溃。我试着看看它是如何在其他类中实现的,但我并没有真正理解它的作用,我不知道它的功能是什么,所以我不知道如何实现它。该类的区域是一个简单的矩形。
这种方法应该怎样做?我该如何实现它?
答案 0 :(得分: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)
。