Cocos2d iphone 将b2world添加到CCLayer

Cocos2d iphone 将b2world添加到CCLayer,cocos2d-iphone,box2d-iphone,Cocos2d Iphone,Box2d Iphone,我有一个CCScene,上面有许多CCLayers 一,。 我想添加一个特定的层,其中包含一个b2world(box2d)。 我需要它是一个完全独立的层,我添加到当前场景之上,而不是删除。 我可以在图层类中创建一个世界并将该类添加为图层吗?或者我需要一场戏 二,。 如何定义重力向量与iPhone屏幕成90度角?(它通常与屏幕平行,指向主页按钮,而不是“3d”。) 非常感谢。关于问题1: 这是CCLayer的一个非常奇怪的用法。“场景”是“层”的容器,其中每个层被合成以形成整个场景 将物理“世界”

我有一个
CCScene
,上面有许多
CCLayers

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

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


非常感谢。

关于问题1:

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

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

但是,将b2World*放入层本身意味着您必须跳转,以便与任何其他层共享来自模型(物理)的任何物理信息

由于您将在CCScene派生类中从场景中移除层,因此也让它破坏物理:

void MyScene::DestroyPhysicsLayer()
{
    removeChild(_physicsLayer);
    delete _world;
    _world = NULL;
}
有一次,我有一个疯狂的想法,就是同时运行两个物理模型(也许不是那么疯狂),这样你就可以“在后台”和“在前台”(比如远程战斗和近距离战斗),当用户按下一个键时,通过将对象从一个物理“世界”跳到另一个物理“世界”,在它们之间移动。在这种情况下,您仍然可以将物理放置在场景中……层只需知道它们使用的是哪个物理世界。你是在添加一个“物理层”来做这样的事情吗

能够在任何时候将“Box2D调试层”添加到场景中对于调试来说都非常方便,可以找出精灵不对齐的原因,等等……当你将物理添加到该层中时,这会变得更加困难。

对于问题2:

“向下”通常类似于: b2Vec2重力(0,-9.8f);//9.8米/秒

我通常设置应用程序,使其只有一个方向(横向或纵向,但不能两者兼有)。屏幕应自动旋转,以便“向下”仍能按预期工作


这有帮助吗?

问题2:只需将重力设置为零,即可获得斯诺克桌的效果。哦……我不知道你想要零重力……我以为你想要“向下”。别担心。我做的大部分东西都是零重力。