我使用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坐标,然后用另一个线程重启,但这不起作用。
我想在反思时,我只是通过这样做而不是对它进行“冲击”而不是对它进行处理。
在尝试通过淡出或其他视觉技巧扫除这种可能是残酷的设计之前,我想知道是否有人对此问题有更深入的了解,并且可以引导我找到更优雅的解决方案。
答案 0 :(得分:1)
我猜测画面在画完成之前是否令人耳目一新。 多线程仍然有点让我失望 - 但这里有一些尝试: 尝试在游戏循环开始时锁定画布,并在最后解锁: http://developer.android.com/reference/android/view/SurfaceHolder.html#lockCanvas()