首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在XNA中计算重力

在XNA中计算重力
EN

Stack Overflow用户
提问于 2011-04-21 23:15:52
回答 2查看 2.7K关注 0票数 3

好了,我正在尝试为3D XNA游戏创建自己的物理引擎,但我在计算由于重力而移动对象时遇到了问题。

XNA的游戏计时器每16毫秒出现一次,因此经过一些计算,并使用9.81m/s作为我的重力速度,您可以看到,您应该通过以下方式增加具有重力的对象的速度:

0.15696米/16毫秒

代码语言:javascript
复制
 - basically every update call should increase the object by 0.15696 meters

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

谢谢你的帮助!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-04-22 02:44:23

虽然2d游戏开发更多地以像素为中心,但3d游戏开发并不关心这类东西的像素,而是单位。单元大小完全是任意的。

通常,您有一个速度矢量,其大小等于米(或英尺或??)每秒你的对象正在移动。这样,每一帧都会更新位置,方法是将此速度*自上一帧( 16.6666毫秒)以来经过的时间相加。重力产生的加速度以相同的方式添加到速度矢量中:

代码语言:javascript
复制
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米。

票数 5
EN

Stack Overflow用户

发布于 2011-04-21 23:47:31

你只需要计算出你的屏幕所代表的“区域”有多大;然后简单地缩放。如果你有一个围绕地球运行的卫星的2D表示,那么你的"Y“像素表示地面到卫星(大约35,000米)。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5746118

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档