Первоначально я использовал аналогичную вам технику в моей платформерной игре Box Fox и в RTS, но обнаружил, что она вызывает довольно заметные задержки, если вы прокручиваете достаточно, чтобы растр нужно было перерисовать.
Мой нынешний метод в этих играх похож на ваш вариант C. Я рисую слои мозаичной карты на сетке больших растровых изображений (около 7x7), занимая область, большую, чем экран. Когда пользователь прокручивает край этой сетки, я перекладываю все растровые изображения в сетке (перемещая конечные растровые изображения вперед), меняю смещение сетки, а затем просто перерисовываю новый край.
Я не совсем уверен, что быстрее с программным рендерингом (ваш вариант C или мой текущий метод). Я думаю, что мой метод может быть быстрее, если вы когда-нибудь переключитесь на рендеринг OpenGL, поскольку вам не придется загружать столько данных текстуры на видеокарту, сколько пользователь прокручивает.
Я бы не рекомендовал вариант А, потому что, как вы предлагаете, сотни маленьких растровых изображений для мозаичной карты снижают производительность, и с большими экранами она становится довольно плохой. Вариант B может даже оказаться невозможным на многих устройствах, так как довольно легко получить ошибку «размер растрового изображения превышает бюджет виртуальной машины», поскольку на многих телефонах ограничение пространства кучи достаточно мало.
Также, если вам не нужна прозрачность на вашей карте / фоне, попробуйте использовать растровые изображения RGB_565, так как в программном обеспечении намного быстрее рисовать и использовать меньше памяти.
Между прочим, я получаю ограничение 60 кадров в секунду на своем телефоне и 10 "планшете в моей RTS описанным выше способом, визуализируемом с помощью программного обеспечения, и могу плавно прокручивать карту. рендерер программного обеспечения для Android. У меня есть 2D-оболочка OpenGL, созданная для моей игры, но пока не нужно переключаться на нее.