0

私はアンドロイドゲーム開発の初心者です。助けていただければ幸いです。画面よりもはるかに大きいはずのキャンバスにグラフィックを描きたいと思います。したがって、スケーリングと移動は素晴らしいことです。私はいくつかの質問を読みましたが、通常は概念全体ではなく、一部の詳細のみに回答します。

カメラを使ってみた

cam.save();
cam.translate(0f, 0f, -8f);
cam.applyToCanvas(canvas);
cam.restore();

これは完全にスケーリングされますが、実際のタッチ座標をデコードできません。

私はopenGLを使いたくありません(それはやり過ぎですし、sth simpleから始めたいです)

とにかく、canvas.scale(int, int)も試しましたが、うまくいきませんでした。カメラが正しい方法だと信じていますが、道に迷っています。

問題は、実際の座標をどのように決定するかです。さらに、チュートリアルなどの一部や、キャンバス変換を使用する概念を共有できるとよいでしょう。(または、それを解決するためのより適切な方法があるかもしれません)

前もって感謝します

4

1 に答える 1

1

onTouchEvent をオーバーライドする必要があります

@Override
     public boolean onTouchEvent(MotionEvent event) {
         float x = event.getX();
         float y = event.getY();

         switch (event.getAction()) {
             case MotionEvent.ACTION_DOWN:
                 touch_start(x, y);
                 invalidate();
                 break;
             case MotionEvent.ACTION_MOVE:
                 touch_move(x, y);
                 invalidate();
                 break;
             case MotionEvent.ACTION_UP:
                 touch_up();
                 invalidate();
                 break;
         }
         return true;
     }



 private void touch_start(float x, float y) {
        mPath.reset();
        mPath.moveTo(x, y);
        mX = x;
        mY = y;
    }

     private void touch_move(float x, float y) {
         float dx = Math.abs(x - mX);
         float dy = Math.abs(y - mY);
         if (dx >= TOUCH_TOLERANCE || dy >= TOUCH_TOLERANCE) {
             mPath.quadTo(mX, mY, (x + mX)/2, (y + mY)/2);
             mX = x;
             mY = y;
         }
     }
     private void touch_up() {
         mPath.lineTo(mX, mY);
         // commit the path to our offscreen
         mCanvas.drawPath(mPath, mPaint);
         // kill this so we don't double draw
         mPath.reset();
     }
于 2013-02-27T03:53:15.753 に答える