2011-04-21 53 views
3

好的,所以我正在尝试为3D XNA游戏创建我自己的物理引擎,并且我正在计算应该通过重力来移动物体的程度。在XNA中计算重力

XNA的游戏计时器时每16毫秒,所以有人计算过,用9.81米/ S作为我的引力速度,你可以看到,你应该增加由具有重力的物体的速度:

0.15696米/ 16毫秒
- 基本上每个更新呼叫应增加0.15696米的对象

问题是,我如何将0.15696米转换为像素。显然,如果我只使用1:1关系,对象将只移动9.81像素/秒。哪个不能真正模拟重力:P有没有人有一个好主意,我如何确定我应该移动物体的像素数量?

感谢您的帮助!

+0

你有什么理由创建自己的框架? – tomasmcguinness 2011-04-21 15:19:17

+0

为了好玩:)基本上只是想获得在Xna玩物理的经验。 – cush 2011-04-21 15:20:54

+0

好的答案;-) – tomasmcguinness 2011-04-21 15:27:05

回答

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

你只需要弄清楚屏幕所代表的“区域”有多大;那么它的简单缩放。如果您有卫星轨道地球的二维图像,那么您的“Y”像素代表卫星接地(大约35,000米)。

从古典物理学中使用您的方程式(http://en.wikipedia.org/wiki/List_of_equations_in_classical_mechanics),然后将真实尺寸缩放到屏幕上。