Я пытаюсь научиться создавать анимированный спрайт в 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: Другие лучшие способы?