2013-02-24 93 views
0

我是在Android游戏开发newbee,我将不胜感激您的帮助。我想在画布上绘制一些图形,该图形应该比屏幕大。所以一些缩放和移动会很棒。我读过一些问题,但他们通常只回答一些细节 - 而不是整个概念。画布游戏中的缩放(确定真正的触摸坐标)

我试过用相机

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

这完全扩展,但我无法真正触摸坐标进行解码。

我不想使用OpenGL(这是矫枉过正,也是我想开始与一些较为简单)

不管怎样,我试了canvas.scale(INT,INT)为好,但没没有工作。我相信相机是正确的方式,但我迷路了。

所以问题是:如何确定真正的坐标?此外,如果有人可以分享一段教程等或使用画布转换的概念,那将会很好。 (也许有更合适的方式如何解决它)提前

+0

没有人知道?我绝望 – petrbel 2013-02-25 09:33:29

+0

你想知道在哪里触摸画布 – 2013-02-26 11:50:21

+0

是的,精确地 – petrbel 2013-02-26 15:36:02

回答

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(); 
    }