我尝试使用OpenGL在Android上创建简单的游戏。
我在2个主题上运行游戏。一个用于渲染一个用于移动物体。问题是,当我尝试用相机跟随玩家时,玩家开始蠢蠢欲动。 (有关屏幕录制,请参阅youtube链接)
我尝试以两种不同的方式移动相机。首先我尝试将其移动到玩家之上(相机x,y与玩家x,y相同)。其次,我尝试将其作为弹性/弹簧移动以跟随玩家。在两种情况下都会发生颠簸。
http://youtu.be/5DXuYuaabvM(玩家顶部的相机)
http://youtu.be/4M-udbu2Vfc(相机弹性弹簧)
我试图在移动时打印播放器和相机x位置,看起来它们看起来并不均匀。更奇怪的是,绿色的鱼并没有晃动,而是以与玩家大致相同的速度移动。
这是线程设计的快速草图。
(玩家的移动速度/方向是加速度计的控制器。)
编辑(在mikkokoo回答之后): 经过对问题的研究之后,我发现了这个"现象"被称为相机口吃。 问题是因为Mikkokoo的说法是精灵移动而渲染器仍在吸引他,fps中的一些下降(即使是小的)也有助于此事件。
一个简单的解决方案是在渲染器线程上完成所有工作。 一个更好的解决方案是以某种方式同步渲染器和"工作"线。首先,修复你的fps(渲染器和工作线程)是很好的。我们将渲染器保留原样,因为它由vsync修复,另一方面我们将工作线程固定为120fps。 因为在我们的情况下只有玩家(果冻)口吃,我们改变了他在渲染器线程上完成的步骤。这基本上是固定的口吃,渲染器线程上的额外工作量是最小的,因为只需要进行3次额外的矩阵操作(旋转,平移,缩放)。
如果您从头开始使用引擎,我可能会看看如何实施2" holder"每个精灵的modelViewMatrix。然后当你移动精灵时,你总是在holderMatrix上移动它,然后从另一个中绘制它。绘图完成后,您只需更改持有人和"真实"矩阵。这基本上可以消除在绘制时改变矩阵的问题。
答案 0 :(得分:0)
对我而言,水母在你的getPlayerlocation
和drawSprite
水母之间移动。
尝试对相机矩阵使用相同的坐标并绘制水母(从getPlayerlocation
获得的水母)。