2017-09-11 5 views
0

私はholder.setFixedSize(1280, 720);のAndroid用ゲーム開発用SurfaceViewを持っています。少数のスプライトを追加しました。スプライトが触れたときにいくつかのアクションをしたい。以下は私のSurfaceView.onTouchコードです。ここでは、面図XYの代わりにx and yの値を取得しています。Android:固定サイズのときに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は変化しません。この問題を解決するために、私はsurfaveview 'actualX'と' actualY'値を 'setFixedSize()'の前に置いて、 'view.getWidth()'を 'actualX'と' view.getHeight() 'をactualYに置き換えました。それは私の問題を解決する。ご協力いただきありがとうございます。それに応じて回答を更新してください。 –

関連する問題