好了,我正在尝试为3D XNA游戏创建自己的物理引擎,但我在计算由于重力而移动对象时遇到了问题。
XNA的游戏计时器每16毫秒出现一次,因此经过一些计算,并使用9.81m/s作为我的重力速度,您可以看到,您应该通过以下方式增加具有重力的对象的速度:
0.15696米/16毫秒
- basically every update call should increase the object by 0.15696 meters问题是,如何将0.15696米转换为像素。显然,如果我只使用1:1的关系,对象将只移动9.81像素/秒。这并不是真的模拟重力:,有没有人有一个好主意,我如何确定我应该将物体移动多少像素?
谢谢你的帮助!
发布于 2011-04-22 02:44:23
虽然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;在本例中,我任意设定了1XNA单位==为1米。
发布于 2011-04-21 23:47:31
你只需要计算出你的屏幕所代表的“区域”有多大;然后简单地缩放。如果你有一个围绕地球运行的卫星的2D表示,那么你的"Y“像素表示地面到卫星(大约35,000米)。
使用经典物理学(http://en.wikipedia.org/wiki/List_of_equations_in_classical_mechanics)中的方程,然后将实际尺寸缩放到屏幕上。
https://stackoverflow.com/questions/5746118
复制相似问题