Я создал простой игровой движок с использованием SurfaceView.
Я использую RectF в качестве окна «камеры», чтобы представить масштабированную ширину пикселя и высоту холста SurfaceView и выяснить, что на экране.
Я использую canvas.translate для перемещения туда, куда камера «указывает».Вот цикл рисования:
mCamera.UpdateCamera();
scaleWorld(c, mCamera);
c.translate(-mScreen.left, mScreen.top - miHeight
* (1 / mCamera.getScaleLevel()));
drawBehavior.drawGame(c);
В любом случае, если я стреляю снарядом, игра рендерится плавно, и я не вижу визуальных вспышек черного цвета, который я использую для очистки холста.
Однако, если я сразу же изменю то, что видит камера, возможно, на расстоянии 3 или более «экранов», часто, но не всегда, вспыхивают черные цвета.Иногда мне везет, и переход происходит незаметно.
Эти вспышки обычно находятся в позициях моих растровых изображений, когда я рекурсивно рисую землю и фон, используя одну или две растровые изображения.
Мне показалось, что внезапное изменение было проблемой, поэтомуЯ попытался очистить поток gameLoop, чтобы остановить все, затем установить новые координаты Rect, затем перезапустить с другим потоком, но это не работает.
Полагаю, что при отражении я просто задерживал «шок»для системы, делая это, а не обрабатывая ее.
Прежде чем пытаться скрыть этот, возможно, зверский дизайн под ковром, возможно, с помощью затухания или другого визуального трюка, мне интересно, есть ли у кого-то более глубокое понимание проблемыи может привести меня к более элегантному решению.