2015-10-06 63 views
0

我是游戏开发新手。Cocos2d/Box2d。如何从tilemap .tmx生成物理体?

我试图做的是tilemap的我已经从瓷砖创建我的游戏作为一个物理体(IES),我使用C++和Boxd2加载.tmx。我的瓷砖地图只显示我想要碰撞的瓷砖,如地板和一些平台。

重要的是要注意,我在Windows编程中是重要的,所有的文档,我发现大约IOS或旧版本,像b2BodyDef bodyDef一些功能似乎并没有工作。

+0

你是如何创造身体的?平铺不会生成物理本身 - 您可以创建一些形状,然后在您的应用程序中创建基于此的物理 –

回答

0

我目前做的,你在我最新的游戏被描述的一致,唯一的区别是我用cocostudio建立在我的游戏的一切,包括我的地图。我这样做的原因是,我可以控制所需的一切,我使用预先定义的命名约定来指示物理边缘,然后我读取并确定其尺寸并构建边缘体。

高度概括

继续在这里之前是我在做你.tmx tilemap的假设。对于想要创建为物理对象的对象,您有唯一的标识符 (您可以使用它的名称将其拉出并检查它)。

  1. 阅读.tmx文件并将其提供给您的fileParser。
  2. 获取所有“节点”,“精灵”,其中包含您的身体标识符。
  3. 由于您使用的是瓷砖贴图,因此我假设所有的碰撞区域都是正方形。
  4. 给节点列表您PhysicsBodyFactory和使用下面的代码来构建您所需要的机构。

伪上下的代码下面

auto tileNode = listOfNodes.at(nodeIndex); 

b2BodyDef tileBodyDef; 
tileBodyDef.type = b2_staticBody; 
tileBodyDef.position.Set(tileNode->getPositionX()/Pixel_To_Meter_Ratio, 
         tileNode->getPositionY()/ Pixel_To_Meter_Ratio); 

auto b2PolygonShape tileShape; 
tileShape.SetAsBox(tileNode->getBoundingBox().size.width/Pixel_To_Meter_Ratio, 
        tileNode->getBoundingBox().size.height/Pixel_To_Meter_Ratio); 

auto tileBody = physicsWorld->CreateBody(tileBodyDef); 
// This can be used later on when you want to have different reactions for different collisions.  
tileBody->SetUserData("CollidableTile"); 

这将创建和放置这些对象在你的物理世界,让在那里的其他机构与它相撞。如果您的球员在世界上有自己的身体,基本的碰撞将为您处理。

我使用cocostudio作为比UI工具,这将完全涵盖这更写一篇博客文章。我希望这可以帮助,请让我知道这个解决方案是你在找什么。