Java 使用射弹物理更平滑的2D动画
所以不久前我发布了一个问题。我遵循我得到的答案,因为这是有道理的。因此,我构建了主while循环,如下所示:Java 使用射弹物理更平滑的2D动画,java,physics,projectile,Java,Physics,Projectile,所以不久前我发布了一个问题。我遵循我得到的答案,因为这是有道理的。因此,我构建了主while循环,如下所示: while(running){ endTime = System.currentTimeMillis(); frametime = (endTime - startTime); test.update(frametime/1000); test.repaint(); S
while(running){
endTime = System.currentTimeMillis();
frametime = (endTime - startTime);
test.update(frametime/1000);
test.repaint();
System.out.println(test.yvel + " " + startTime + " " + frametime);
startTime = endTime;
try{
if(1000/30 > System.currentTimeMillis() - endTime)
Thread.sleep((long) (1000/30 - (System.currentTimeMillis() - endTime)));
}
catch(Exception e){}
}
它修复了动画的“平滑度”。。。。但是物理部分被破坏了。。。我计算出整个循环需要33毫秒,因此帧时间始终等于33,阻止了球的正确更新。在过去的一个半小时里,我一直在研究这个问题,试图找到新的解决方法,我提出了一个问题。。。因为处理while循环所需的时间没有变化,所以我尝试这样做的方式是否不起作用?比如说,如果我做了一个游戏,可能是更新了一个玩家或者其他东西,使得while循环在某些点比其他点更长,那么这会导致球正确更新吗?。。。。我开始觉得我只需要一些定时器就可以让它正常工作XD一个实际的需要更少的猜测工作和更好的响应只是一个提示:在主循环中使用
System.out.println
是一个非常糟糕的主意。控制台写入是一个阻塞操作,实际上可能需要一段时间。再次检查另一个问题,答案已更新。物理模拟程序中有一个非常严重的遗漏,即v+=a*dt;x+=v代码>且应为v+=a*dt;x+=v*dt
。