Преобразование матрицы холста - PullRequest
0 голосов
/ 08 декабря 2010

Я сейчас разрабатываю игру для Android.

Я добавил кнопки, позволяющие пользователю перемещаться по камере по оси 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);

Это работает на эмуляторе, но дает мне странные результаты на моем реальном устройстве.

Может кто-нибудь сказать мне, что с ним не так? Я считаю, что работать с матрицами сложно, тем более что для объекта Matrix доступно много опций (pre, post и set).

Спасибо

1 Ответ

6 голосов
/ 27 декабря 2010

Матрица, полученная из canvas.getMatrix () в методе onDraw View, уже содержит некоторые манипуляции (для масштабирования представления до размера экрана и перевода координат представления в координаты поверхности ViewRoot.

Используя matric.setScale (), а не pre или postScale, вы сбрасываете матрицу в преобразование идентичности и затем применяете масштабирование. Это приводит к потере первоначальной настройки преобразования для onDraw. Матрица matrix.preTranslate () работает нормально.

Кроме того, вы можете оставить setScale и использовать canvas.concat (m), чтобы применить вашу матрицу к существующей матрице.

(я не могу сохранить операцию до и после применения преобразованийпрямо тоже.)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...