Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/342.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 使用射弹物理更平滑的2D动画_Java_Physics_Projectile - Fatal编程技术网

Java 使用射弹物理更平滑的2D动画

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循环,如下所示:

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