有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java画布矩阵转换

我目前正在为安卓开发一款游戏

我添加了一些按钮,允许用户在x轴上导航相机并放大和缩小

为此,我使用以下矩阵代码:

// c is the canvas..
Matrix m = c.getMatrix();
// Make sure that the ground is always at the bottom of the screen
m.setScale(zoom,zoom,0.0f,height);
m.preTranslate(camera_x, 0); // Change offset in x-direction
c.setMatrix(m);

这可以在模拟器上运行,但在我的真实设备上会产生一些奇怪的结果

谁能告诉我有什么问题吗?我发现使用矩阵很棘手,尤其是因为矩阵对象有很多选项(pre、post和set)

谢谢


共 (1) 个答案

  1. # 1 楼答案

    你从画布上得到的矩阵。视图的onDraw方法中的getMatrix()已经有一些操作(将视图缩放到显示大小,并将视图坐标转换为ViewRoot曲面坐标)

    通过使用矩阵。setScale(),而不是pre或postScale,将矩阵重置为恒等变换,然后应用缩放。这会导致为onDraw设置的初始转换丢失。矩阵。preTranslate()可以

    或者,您可以保持设置比例并使用画布。concat(m)将矩阵应用于现有矩阵

    (我也无法保持应用前和应用后转换的操作笔直。)