首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >保存Box2D形状

保存Box2D形状
EN

Stack Overflow用户
提问于 2012-01-21 05:54:51
回答 2查看 727关注 0票数 1

作为保存/加载游戏代码的一部分,我需要保存世界上所有Box2D实体的状态。当我这样做,然后加载并重新创建它们时,有一个快速弹出,其中一些身体彼此分离。我已经反复检查了我的保存游戏信息,它是正确的。

对于每个物体,我保存了世界位置、角度、AngularVelocity和LinearVelocity。我还需要保存更多内容吗?

我只是在想,是否真的不可能完全拯救Box2D世界的状态。

我正在使用iOS中的C++ Box2d代码。

EN

回答 2

Stack Overflow用户

发布于 2012-01-21 18:01:14

b2worlddump函数。它把关于这个世界的所有信息都放入日志文件中。因此,您可以查看此日志文件,并了解需要保存的内容。

PS:我自己没有尝试过这个功能

票数 1
EN

Stack Overflow用户

发布于 2017-02-07 01:17:20

对于每个物体,我保存了世界的位置,角度,AngularVelocity和LinearVelocity。我还需要保存更多内容吗?

根据对Box2D 2.3.2 b2Body成员变量(在b2Body.h中)的回顾,您可能还希望保存:

  • 物体的顺序(可能通过像b2World::Dump()一样以从b2World访问它们的顺序保存它们),
  • 线性阻尼值和角度阻尼值(通过b2Body::GetLinearDamping()b2Body::GetAngularDamping()),

<代码>H113重力刻度(通过<代码>D14),<代码>H215<代码>H116类型(通过<代码>D17),<代码>H218<代码>H119项目号值(通过<代码>D20),<代码>H221<代码>H122允许休眠的值(通过<代码>D23),<代码>H224<代码>H125是唤醒值(通过<代码>D26),

  • is-active value (通过b2Body::IsActive()),
  • is-fixed-rotation value (通过b2Body::IsFixedRotation()),
  • 夹具列表及其顺序(通过b2Body::GetFixtureList()),
  • 用户数据(通过b2Body::GetUserData()),
  • 力,
  • 扭矩,以及
  • 睡眠时间。

不幸的是,最后三个状态值没有可读的公共访问权限。

如果你的世界有关节,你可能也想保存它们,但我建议从世界的角度来保存它们。

我只是在想,是否真的不可能完全保存Box2D世界的状态。

这取决于你在游戏中做了什么,以及你愿意在代码方面做什么。

如果你正在施加力或力矩,而你的世界没有设置为自动清除这些力,那么从纯粹的b2Body角度来看:no。OTOH,如果你在施加力或力矩,你可以自己保存它们,在这种情况下,力和力矩是可以保存的:,yes,

睡眠时间,这将是一个问题,它对你有多重要。如果你想在以后重新加载你的游戏,这样它就会像从来没有暂停过一样恢复,那么至少从用户级别的角度来看,你会被卡住;答案是no。OTOH yes,如果你愿意修改Box2D库源代码的话。

例如,您可以向b2Body.h文件添加代码,如下所示,提供对睡眠时间状态的读取访问权限:

代码语言:javascript
运行
复制
class b2Body
{
public:
    ...

    /// Get the sleep time.
    float32 GetSleepTime() const;

    ...
};

...

inline float32 b2Body::GetSleepTime() const
{
    return m_sleepTime;
}

当然,如果没有写访问,这也是不完整的。虽然可行,但这可能会更加困难,这取决于您是希望在构造body时恢复睡眠时间,还是在构造后设置睡眠时间(通过setter)就足够了(后者代码较少,但前者可能在语义上更吸引人)。无论如何,如果你也想看看加载值的代码,请告诉我。

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

https://stackoverflow.com/questions/8948362

复制
相关文章

相似问题

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