好吧,所以我正在尝试为3D XNA游戏创建自己的物理引擎,而且我在计算我应该为重力移动物体的数量方面遇到了麻烦。
XNA的游戏计时器每16毫秒发生一次,所以经过一些计算,并使用9.81m / s作为我的引力速度,你可以看到你应该通过以下方式增加具有引力的物体的速度:
0.15696米/ 16毫秒
- 基本上每次更新调用都应该将对象增加0.15696米
问题是,如何将0.15696米转换为像素。显然,如果我只使用1:1的关系,对象将只移动9.81像素/秒。这并不真正模拟引力:P有没有人对如何确定我应该移动对象的像素有一个好主意?
感谢您的帮助!
答案 0 :(得分:5)
虽然2d游戏开发更像素为中心,但3D游戏开发并不关心这类东西的像素,而是单位。单位大小完全是任意的。
通常,您有一个速度向量,其大小等于您的对象每秒的米(或英尺或??)。这样,通过添加此速度*自上一帧(16.6666毫秒)以来经过的时间,每帧更新位置。重力加速度以相同的方式加到速度矢量上:
Vector3 gravity = Vector3.Down * 9.81f;
//in the update loop
float elapsed = (float)gameTime.ElapsedGameTime.TotalSeconds;//0.01666667 (or 16.67 ms) @ 60FPS
velocity += gravity * elapsed;
position += velocity * elapsed;
在这个例子中,我任意确定1 xna单位== 1米。
答案 1 :(得分:1)
您只需要弄清楚屏幕所代表的“区域”有多大;然后它的简单缩放。如果您有卫星轨道地球的2D表示,那么您的“Y”像素代表地面到卫星(大约35,000米)。
使用经典物理学中的方程式(http://en.wikipedia.org/wiki/List_of_equations_in_classical_mechanics),然后将实际尺寸缩放到屏幕上。