【问题标题】:b2World.CreateBody returns null with CocosSharp and Box2Db2World.CreateBody 使用 CocosSharp 和 Box2D 返回 null
【发布时间】:2016-05-26 17:52:48
【问题描述】:

我正在玩 CocosSharp 和 Box2D。我正在尝试创建一个世界并为其添加一个地面主体。这是我的代码:

var gravity = b2Vec2.Zero;
gravity.Set(0f, -9.8f);

world = new b2World(gravity);
world.SetAllowSleeping(false);
world.SetContinuousPhysics(true);

var groundBodyDef = new b2BodyDef();
groundBodyDef.position.Set(0, 0);

var groundBody = world.CreateBody(groundBodyDef);

问题出现在最后一行。 world.CreateBody(groundBodyDef) 返回 null。

我查看了implementation for b2World.CreateBody,发现它只会在 IsLocked 为真时返回 null。我的理解是,当世界在踩踏时,IsLocked 是真的。但是,我在运行我的代码时看到 IsLocked 实际上是错误的,但 CreateBody 仍然返回 null。

我看过的所有示例都遵循 b2World 的相同基本设置。我有什么遗漏吗?

我正在 Android 模拟器上对此进行测试,如果这有什么不同的话。

编辑 5/27: 在了解了有关该问题的更多信息后,我现在知道有一些我认为没有必要包含在原始问题中的重要信息。我错了。我使用 CocosSharp Visual Studio 模板来创建解决方案和项目。这就是整个事情在Android上不起作用的原因。我会在答案中解释。

【问题讨论】:

    标签: xamarin box2d cocossharp


    【解决方案1】:

    事实证明,我在 Android 上进行测试确实非常重要。 CocosSharp 的 VS 模板没有将 box2d.dll 的引用添加到 Android 项目中。 Windows Phone 和 iOS 项目都有参考,我上面的代码在这两个平台上都按预期工作。

    Android 项目有一个 Box2dTest.dll 引用,我假设它是允许我的代码构建和运行的原因。

    昨晚深夜,在找到another question 之后,我终于找到了正确的方向,这在表面上似乎不是同一个问题,但提供了一个可行的答案。我需要将 CocosSharp.PCL.Shared Nuget 包安装到我的 Android 项目中。然而,这并不是道路的尽头。我开始从中得到构建错误。

    因此,我对该问题的最终解决方案是将 CocosSharp.PCL.Shared Nuget 包的引用添加到单独的测试项目中,将包文件夹复制到我当前解决方案的包文件夹中,然后添加一个程序集引用仅box2d.dll。它在 Nuget 包中添加的其他内容让我更加悲痛。

    完成所有这些之后,我的代码就可以在 Android 上运行了。

    到目前为止,CocosSharp 非常酷,但它的 Visual Studio 模板肯定还有改进的空间。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多