我正在制作一款安卓游戏,目前我还没有达到我想要的性能.我在自己的线程中有一个游戏循环,用于更新对象的位置.渲染线程将遍历这些对象并绘制它们.目前的行为似乎是波涛汹涌/不均匀的运动.我无法解释的是,在我将更新逻辑放入自己的线程之前,我在onDrawFrame方法中,就在gl调用之前.在这种情况下,动画非常流畅,当我尝试通过Thread.sleep来限制我的更新循环时,它只会变得不连贯/不均匀.即使我允许更新线程进行狂暴(无睡眠),动画也是平滑的,只有当涉及Thread.sleep时它才会影响动画的质量.
我已经创建了一个骨架项目来查看是否可以重新创建该问题,下面是渲染器中的更新循环和onDrawFrame方法: Update Loop
@Override
public void run()
{
while(gameOn)
{
long currentRun = SystemClock.uptimeMillis();
if(lastRun == 0)
{
lastRun = currentRun - 16;
}
long delta = currentRun - lastRun;
lastRun = currentRun;
posY += moveY*delta/20.0;
GlobalObjects.ypos = posY;
long rightNow = SystemClock.uptimeMillis();
if(rightNow - currentRun < 16)
{
try {
Thread.sleep(16 - (rightNow - currentRun));
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的onDrawFrame方法:
@Override
public void onDrawFrame(GL10 gl) {
gl.glClearColor(1f, 1f, 0, 0); …Run Code Online (Sandbox Code Playgroud) git merge 文档说明了该示例:
A---B---C topic
/
D---E---F---G master
Run Code Online (Sandbox Code Playgroud)
然后“git merge topic”将重放主题分支上所做的更改,因为它从master分支(即E)直到其当前提交(C)位于master之上,并将结果与名称一起记录在新的提交中两个父提交以及来自用户的描述更改的日志消息。
我想知道“重放更改”这个短语。在其他关于 git 合并的文章中我几乎找不到提到“重播”这个词。
我想象 git 找到 A 和合并基础之间发生的变化,应用该更改,应用 B 和 A 之间的差异,应用 C 和 B 之间的差异,然后将这一系列更改合并到合并提交中。本质上是查看合并基础后的每个提交并单独评估它们。
如果这是真的,那么会发生什么……
A---B---C---I topic
/ \
D---E---F---G---H(merge)---O master
Run Code Online (Sandbox Code Playgroud)
我想将 master 合并到 topic 中。假设当前分支是主题“ git merge master ”。我的“ git merge-base master topic ”合并基础是提交C。
如果我们坚持“重播”更改的故事,主题分支如何获取提交 F 和 G 的更改?它是否找到了 H 和 C(合并基础)之间的差异?如果是这样,为什么要重播第一个示例中的一系列更改,而只是查找分支头和合并基础之间的差异?