Как мне реализовать ITouchArea.convertSceneToLocalCoordinates () для AndEngine? - PullRequest
2 голосов
/ 18 сентября 2011

Я использую 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 Ответ

2 голосов
/ 19 сентября 2011

Метод должен преобразовывать координаты в пространстве сцены в локальное пространство (из Entity).Если на вашем Entity есть только перевод, то вы просто вычли бы mX и mY из заданных координат x и y соответственно.

[На изображении сущность (mX, mY)(300, 100)] enter image description here

При вращении и масштабировании будут использоваться те же понятия.Просто оси X и Y будут вращаться / масштабироваться, и, таким образом, Sprite также будет вращаться / масштабироваться.Возможно, вы захотите реализовать это, используя объект Transformation (так же, как это делает Entity).Смотри Entity.convertLocalToSceneCoordinates(final float pX, final float pY, final float[] pReuse).

...