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 楼答案
你从画布上得到的矩阵。视图的onDraw方法中的getMatrix()已经有一些操作(将视图缩放到显示大小,并将视图坐标转换为ViewRoot曲面坐标)
通过使用矩阵。setScale(),而不是pre或postScale,将矩阵重置为恒等变换,然后应用缩放。这会导致为onDraw设置的初始转换丢失。矩阵。preTranslate()可以
或者,您可以保持设置比例并使用画布。concat(m)将矩阵应用于现有矩阵
(我也无法保持应用前和应用后转换的操作笔直。)