1

我正在开发一款安卓游戏,目前正忙于游戏相机类型的组件。最好的方法似乎是平移画布(可能使用矩阵)以移动整个画布以充当游戏摄像机。(如果我错了,请纠正我)。

这一切都很顺利,游戏摄像机正在移动,摄像机的 x 和 y 值被用作平移画布位置的指南:

    public void onMove(float distanceX, float distanceY){

          Camera.x += (int) distanceX;
          Camera.y += (int) distanceY;
     }

     protected void onDraw(Canvas canvas) {

             canvas.translate(Camera.x, Camera.y);

             level.draw(canvas);

             //the text is a ui component so shouldn't move with the level
             canvas.restore();
             canvas.drawText(fps + " fps", 0, 32, textPaint);
       }

当尝试与世界交互时,我只需将相机的坐标添加到触摸的坐标中即可获得世界中的正确点:

      public void onSingleTap(MotionEvent event) {

        float mouseX = event.getX() - Camera.x;
        float mouseY = event.getY() - Camera.y;
     }

但是,用户也可以选择缩放屏幕,缩放到世界上的一个点。

case MotionEvent.ACTION_MOVE:

    if (MODE == ZOOM && event.getPointerCount() == 2) {

        float newDist = spacing(event);

        if (newDist > 10f) {

            Camera.zoom = newDist / PrevMultiDist;

            //the midpoint for the zoom
            midPoint(midpoint, event);
            Camera.setPivot(midpoint.x, midpoint.y);

            translateMatrix.postScale(Camera.zoom, Camera.zoom, Camera.pivotX, Camera.pivotY);
        }
    }
 break;

由于视图正在移动以缩放所选位置,因此缩放会弄乱世界触摸平移坐标。我想如果我从相机位置减去缩放偏移值,我将再次获得正确的世界位置。

所以touchevent变成了这样:

      public void onSingleTap(MotionEvent event) {
      //ideally the zoomoffset might be added in the camera's location already?
        float mouseX = event.getX() - Camera.x - zoomOffsetX;
        float mouseY = event.getY() - Camera.y - zoomOffsetY;
     }

我已经找到了这个问题:Android get Bitmap Rect (left, top, right, bottom) on a Canvas但它没有提供我想要的 awsner 我不知道他的计算是否可以帮助我。

我觉得我错过了一些非常简单的东西。希望有人能帮忙!

4

0 回答 0