Я решил преобразовать свою 2D-игру на основе спрайтов для Android, чтобы использовать opengl-es, чтобы помочь с некоторыми проблемами с частотой кадров, связанных с визуализацией. В настоящее время настройка выглядит следующим образом:
Рендеринг выполняется в собственном потоке с режимом рендеринга, установленным на непрерывный. Обновление игровой логики происходит в отдельной цепочке. Оба потока взаимодействуют с синхронизированным классом блокировки, что гарантирует, что они никогда не касаются игровой информации одновременно.
Таким образом, в основном поток рендеринга ожидает завершения любого текущего обновления, прежде чем рисовать, а поток обновления ожидает окончания текущего рендеринга, прежде чем начинать обновление. Все выглядит великолепно, за исключением или некоторой изменчивости, которую я заметил на картинке при перемещении по экрану.
Я полагаю, что это, вероятно, связано с отсутствием согласованности в количестве обновлений, которые происходят между каждым рендером, в среднем в два раза больше обновлений, потому что на данный момент в обновлении происходит не так уж много. Но этому не хватает согласованности, поэтому иногда 1 проходит, иногда 2, 3 и т. Д., Поэтому различие в позициях вытягиваемых элементов также не согласовано, что создает неравномерность.
У кого-нибудь есть идеи, как мне это исправить? Поток обновления регулируется до 60 раз в секунду со сном ... может быть, что-то подобное должно происходить при рендере? Я просто не уверен в этом.