将b2world添加到CCLayer

时间:2013-12-16 14:44:45

标签: cocos2d-iphone box2d-iphone

我有CCScene,上面有很多CCLayers

1。 我想添加一个包含b2world的特定图层(box2d)。 我需要它是一个完全独立的层,我添加到当前场景之上,而不是删除。 我可以在图层类中创建一个世界并将该类添加为图层吗?或者我需要一个场景?

2。 如何将gravity向量定义为与iPhone屏幕成90度? (它通常与屏幕平行,指向主页按钮,而不是“3d”。)。

非常感谢。

1 个答案:

答案 0 :(得分:0)

问题1:

这是CCLayer非常奇怪的用法。 “场景”是“图层”的容器,其中每个图层被合成以形成整个场景。

将物理“世界”放入场景中会有(某些)意义,因为您可能在一个层中显示调试信息,在另一个层中显示物理世界中的某些内容,在第三个中显示hud信息,为精灵第四层中的其他物理对象等

然而,将b2World *放入图层本身意味着您必须跳过箍以与模型(物理)共享任何其他图层的物理信息。

因为你要从CCScene派生类中的场景中删除图层,所以让它也破坏物理学:

void MyScene::DestroyPhysicsLayer()
{
    removeChild(_physicsLayer);
    delete _world;
    _world = NULL;
}

曾经对于同时运行两个物理模型有这个(也许不是那么)疯狂的想法,这样你就可以拥有“在后台”和“在前景中”的东西(就像一场遥远的战斗和近战一样),当用户按下一个键时,通过将物体从一个物理“世界”跳到另一个物体,在它们之间移动。在这种情况下,你仍然会将物理学放在场景中......层只需要知道他们正在使用哪个物理世界。您是否正在添加“物理层”,以便您可以执行此类操作?

能够随时将“Box2D调试图层”投射到场景中对于调试非常方便,找出精灵为什么不排队等等...当你把它放得更加困难时物理到层中。

问题2:

“向下”通常是这样的: b2Vec2 gravity(0,-9.8f); // 9.8米/秒

我通常会设置应用程序,使其具有一个方向(横向或纵向,但不是两者)。屏幕应该自动旋转,因此“向下”仍然按预期工作。

这有用吗?