所以我一直在尝试编写一个物理模拟。我从模拟一个自由落体开始很小。我在Java中使用Java Jframe和一些来自awt库的方法。然而,我一直面临的问题是调整参数以使我的模拟更加生活。我的游戏while循环以恒定的60 FPS运行,这意味着每个循环都需要16 ms。每次我更新,我执行这些法律:物理模拟,将像素调整为米?
this.velX = this.velX + (accX)*delta;
this.velY = this.velY + (accY) * delta ;
this.velY = this.velY * 0.9;
this.x = this.x + (int) ((this.velX) * delta);
this.y = this.y + (int) ((this.velY)* delta);
然而,由于我转换为int的值总是又回到了0,因为它们非常小。而形状的绘制方法只接受int(我认为这是可以理解的,对吧?)我想知道是否会有解决方案?球会卡住,它的运动不会明显(如果它移动的话)。
我试着将delta传递为1,它很好地工作,但它太快了,但我认为它不现实。因此,如果有人能够给我关于这个问题的一般想法,那将是非常有用的。
“16毫升秒” - 16毫秒?我想这应该是“毫秒”=毫秒? – Fildor
这听起来像你正在从渲染他们的同一个地方读你的坐标 - 这正是你眼中问题的原因。尝试将坐标存储在一些专用对象中,这些对象可以以您实际需要的任何形式接受它们(即以'double'或其他形式),然后在渲染它们时仅转换为'int'。 –
是的,抱歉,我编辑了它。 – Robot0110