首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >2D运动理论

2D运动理论
EN

Stack Overflow用户
提问于 2010-11-06 21:58:19
回答 4查看 2.6K关注 0票数 2

我最近开始接触OpenGL/SDL,并在2D/3D空间中摆弄对象,我相信这一领域的大多数新手都会有一些疑问,关于做某事的“最佳”方法。我引用最好的,因为我假设没有最好的方法,这是个人喜好。

所以,我有一个实体,一个简单的GL_QUAD,我想要移动它。我有键盘事件设置,我可以得到按键/释放事件,没有问题。

我有一个实体类,这是我的GL_QUAD,伪实现....

代码语言:javascript
复制
class Entity
{
    void SetVelocity(float x, float y);
}

然后我有了这个事件处理程序代码...

代码语言:javascript
复制
if theEvent.Key = UPARROW AND theEvent.State = PRESSED
    Entity.SetVelocity(0.0f, -1.0f);
else if theEvent.Key = UPARROW AND theEvent.State = RELEASED
    Entity.SetVelocity(0.0f, 0.0f);

我的问题是,这是移动我的实体的最好方法吗?这让我想到,我们可以让它变得更复杂,通过单独调整X/Y速度的方法。如果我开始向左移动,SetVelocity会忘记我的X速度吗?所以我永远不能沿对角线旅行。

例如..。

代码语言:javascript
复制
class Entity
{
    void SetXVelocity(float x);
    void SetYVelocity(float y);
}

if theEvent.Key = UPARROW AND theEvent.State = PRESSED
    Entity.SetYVelocity(-1.0f);
else if theEvent.Key = UPARROW AND theEvent.State = RELEASED
    Entity.SetYVelocity(0.0f);
if theEvent.Key = LEFTARROW AND theEvent.State = PRESSED
    Entity.SetXVelocity(-1.0f);
else if theEvent.Key = LEFTARROW AND theEvent.State = RELEASED
    Entity.SetXVelocity(0.0f);

这样,如果我有一个XVelocity,然后我按UPARROW,我仍然会有我的XVelocity,以及一个新的YVelocity,因此对角线移动。

有没有更好的方法?我是不是遗漏了一些非常简单的东西?

我使用的是SDL1.2、OpenGL、C++。不确定SDL/OpenGL中是否有什么可以提供帮助的东西?

提前感谢你的回答。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2010-11-06 22:05:37

这个问题真的很普遍,因为它取决于您希望如何对您的世界中对象的运动进行建模。

通常每个物体都有它的速度,它是基于加速度计算的,并被限制到最大值。这意味着按键改变指定帧的对象加速度,然后计算该加速度并将其应用于对象的当前速度。

这是通过一个更新阶段完成的,该阶段遍历所有对象,并根据对象加速度计算速度变化。通过这种方式,您不必费心修改速度本身,而是让您的引擎根据每个对象的状态进行计算。

票数 3
EN

Stack Overflow用户

发布于 2010-11-06 22:19:40

加速度是在一段时间内应用的,因此在@jack的示例中,您将在一秒的时间内应用10m/s^2的加速度。

您还应该修改您的应用程序,使其成为time based,而不是基于框架。

看一下这篇basic game physics介绍,我也会真正了解一下GameDev.net Physics Tutorials

票数 2
EN

Stack Overflow用户

发布于 2010-11-06 22:09:49

我假设你想要移动的方式是,你想让玩家只在按住一个键的时候才移动。简而言之:您的解决方案很好。

一些需要考虑的潜在陷阱:如果同时按下左和右,会发生什么?

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

https://stackoverflow.com/questions/4113370

复制
相关文章

相似问题

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