2011-09-18 4 views
2

AndEngine을 사용하고 있으며 스프라이트를 관리하는 클래스를 만들고 있습니다. 클래스는 사용자가 터치 할 때 몇 가지 작업을 수행해야하므로 ITouchArea 인터페이스를 구현했습니다. 그것을 정의, 또는 null 반환하지 않고AndEngine의 ITouchArea.convertSceneToLocalCoordinates()는 어떻게 구현해야합니까?

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

:

@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) 

내가 아직도 그리워하는 것은 이것이다

나는 방법에 포함 된 정의 프로그램이 충돌합니다. 나는 그것이 다른 클래스에서 어떻게 구현되는지 살펴 보려고했지만, 실제로 어떤 일이 일어나는 지 이해하지 못했으며, 그 함수가 무엇인지 모르기 때문에 구현 방법을 모른다. 클래스의 영역은 단순한 사각형입니다.

이 방법은 어떻게해야합니까? 어떻게 구현합니까?

+0

그냥 참고 사항 : - X_DIMENSION/2 && \t \t \t \t pX의 <= this.mXCenterPosition + X_DIMENSION 귀하의'contains' 방법은 어떤'if'없이 구현 될 수있다, 다만'\t \t pX의> = this.mXCenterPosition 반환/2 && \t \t \t \t PY> = this.mYCenterPosition - Y_DIMENSION/2 && \t \t \t \t PY <= this.mYCenterPosition + Y_DIMENSION/2] '(물론 사용자의 예처럼 바꿈과 함께). –

답변

2

이 방법은 장면 공간의 좌표를 로컬 공간 (Entity)으로 변환해야합니다. Entity에 번역본 만있는 경우 주어진 x 및 y 좌표에서 각각 mXmY을 뺍니다.

는 회전 enter image description here

[화상에서의 엔티티 (MX, MY)는 (300, 100)이다]과는 동일한 개념을 사용할 것 확장. x 축과 y 축이 회전/크기 조정되므로 Sprite도 회전/크기 조정됩니다. 변환 객체를 사용하여이를 구현하고 싶을 것입니다 (Entity과 동일). Entity.convertLocalToSceneCoordinates(final float pX, final float pY, final float[] pReuse)을 참조하십시오.

+0

고맙습니다. Sprite는 크기가 조절되거나 회전되지 않으므로 실제로 내 문제의 해결책을 제공합니다! 감사! –

관련 문제