Рисование зеркальных растровых изображений в Android

Я пытаюсь научиться создавать анимированный спрайт в Android и не могу понять, как организовать свои растровые изображения. У меня есть спрайт-лист моего персонажа, идущего вправо: растровое изображение из пяти копий персонажа, равномерно расположенных (каждые 45 пикселей) в цикле ходьбы.

Я планировал рисовать каждый кадр, отрисовывая крошечный участок моего растрового изображения листа спрайтов, выполнив следующие действия:

Rect sourceRect = new Rect(0, 0, 45, 75);
canvas.drawBitmap(spriteSheetBitmap, sourceRect, new Rect(0, 0, 45, 75), null);

Затем для следующих кадров увеличивайте «sourceRect.x» на 45, затем перерисовывайте и так далее.

Однако сейчас я не знаю, как заставить мой спрайт двигаться влево. Сначала я думал, что могу просто отразить свой прямоугольник, из которого я рисую, чтобы получить перевернутое изображение. Что-то вроде:

sourceRect = new Rect(45, 0, 0, 75);

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

При поиске в Интернете мне кажется, что мне нужно сделать копию моего исходного растрового изображения, отразить его с помощью матрицы преобразования, а затем использовать это растровое изображение для рисования при движении влево. Однако я также нашел реализации, в которых из исходного листа спрайтов создается множество небольших растровых объектов, которые сохраняются (и преобразуются для зеркального движения), а затем используются по мере необходимости.

Поэтому мне интересно, что было бы лучше в этом случае, и есть ли разница (производительность / память):

Метод 1: Загрузить в мой исходный лист спрайтов, создать новый экземпляр растрового изображения , отразите его ,, затем вычислите все прямоугольники и используйте эти + два целых листа для рисования (по общему признанию, есть дополнительное пространство для растровых изображений, где лист спрайтов не используется).

Метод 2: Загрузите мой исходный лист спрайтов, для каждого кадра создайте два новых растровых объекта (1 зеркальный, 1 нормальный) и сохраните их для рисования.

Метод 3: Другие лучшие способы?

24
задан mitim 28 October 2011 в 04:52
поделиться