2017-09-11 3 views
0

나는 안드로이드 게임 개발을위한 SurfaceView가 holder.setFixedSize(1280, 720);입니다. 스프라이트가 거의 추가되지 않았습니다. 나는 스프라이트가 닿았을 때 어떤 행동을하고 싶다. 다음은 내 SurfaceView.onTouch 코드입니다. x and y 표면 값 XY 대신 값이 표시됩니다.안드로이드 : 고정 된 크기로 SurfaceView 터치 위치를 찾는 방법?

표면 뷰의 실제 XY를 찾으십시오.

@Override 
public boolean onTouch(View view, MotionEvent event) { 
    int x = (int) event.getX(); 
    int y = (int) event.getY(); 

    switch (event.getAction()) { 
     case MotionEvent.ACTION_DOWN: { 
      if (scenes.size() > 0) { 
       Scene scene = scenes.get(scenes.size() - 1); 
       if (scene != null) { 
        int size = scene.getSprites().size(); 
        Log.i(TAG, "Surface Touched. size : " + size); 
        for (int j = size - 1; j >= 0; j--) { 
         Sprite s = scene.getSprites().get(j); 
         if (s.isTouchable() && s.performTouch(x, y)) { 
          Log.i(TAG, "Touch handled by sprite"); 
          return true; 
         } 
        } 
       } 
      } 

      break; 
     } 
     case MotionEvent.ACTION_MOVE: { 

      break; 
     } 
    } 

    return false; 
} 

답변

1

변경 아래 xy 등의 계산 :

int x = (int) (event.getX() * 1280/view.getWidth()); 
int y = (int) (event.getY() * 720/view.getHeight()); 
+0

이상적이 솔루션이다. 'view.getWidth()'와'view.getHeight()'는 각각 1280과 720을 돌려 주므로 결과적인 XY에는 변화가 없습니다. 이 문제를 해결하기 위해'setFixedSize()'전에 surfaveview'actualX'와'actualY' 값을 유지 한 다음'view.getWidth()'를'actualX'와'view.getHeight()'를 actualY로 대체했습니다. 그것은 내 문제를 해결합니다. 당신의 도움을 주셔서 감사합니다. 그에 따라 답변을 업데이트하십시오. –