我正在玩 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)
返回空值。
我查看了b2World.CreateBody 的实现,发现只有在 IsLocked 为真时才会返回 null。我的理解是,当世界在踩踏时,IsLocked 是真的。但是,我在运行我的代码时看到 IsLocked 实际上是错误的,但 CreateBody 仍然返回 null。
我看过的所有示例都遵循 b2World 的相同基本设置。有什么我想念的吗?
我正在 Android 模拟器上对此进行测试,如果这有什么不同的话。
编辑 5/27:在了解了有关该问题的更多信息后,我现在知道有一些我认为没有必要包含在原始问题中的重要信息。我错了。我使用 CocosSharp Visual Studio 模板来创建解决方案和项目。这就是整个事情在Android上不起作用的原因。我会在答案中解释。