我有CCScene
,上面有很多CCLayers
。
1。
我想添加一个包含b2world
的特定图层(box2d
)。
我需要它是一个完全独立的层,我添加到当前场景之上,而不是删除。
我可以在图层类中创建一个世界并将该类添加为图层吗?或者我需要一个场景?
2。
如何将gravity
向量定义为与iPhone屏幕成90度? (它通常与屏幕平行,指向主页按钮,而不是“3d”。)。
非常感谢。
答案 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米/秒
我通常会设置应用程序,使其仅具有一个方向(横向或纵向,但不是两者)。屏幕应该自动旋转,因此“向下”仍然按预期工作。
这有用吗?