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

标签 java android andengine coordinate-transformation

我正在使用 AndEngine 并且我正在创建一个类来管理一堆 Sprite 。 该类需要在用户触摸时执行一些操作,因此我让它实现了 ITouchArea 接口(interface)。

我定义的方法包含:

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

这个方法应该做什么?我将如何实现它?

最佳答案

该方法应将场景空间中的坐标转换为局部空间(实体)。如果您的 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)

关于java - 我应该如何为 AndEngine 实现 ITouchArea.convertSceneToLocalCoordinates()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7463051/

相关文章:

Java Generics - 类本身的子类?

java - 为所有 volley 请求设置自定义 header

java - 自定义 map 标记

android - Andengine - 从启动画面中删除广告

android - 搜索最近的 Sprite - Andengine - Android

java - 运行 Jersey 测试时初始化 Spring beans

java - 在程序启动时清除java swing表单的所有文本字段

java - 如何在java web应用程序中显示视频文件的一部分?

android - 简单地从espresso android中的自定义 View 获取 View

android - Box2D 启动 AndEngine?