【问题标题】:Cocos2d/Box2d. How to generate a physics body from a tilemap .tmx?Cocos2d/Box2d。如何从 tilemap .tmx 生成物理体?
【发布时间】:2016-01-03 19:21:58
【问题描述】:

我是游戏开发的新手。

我要做的是将我从 Tiled 创建的 .tmx tilemap 作为物理体加载到我的游戏中,我使用的是 C++ 和 Boxd2。我的 tilemaps 只显示我想要碰撞的图块,比如地板和一些平台。

请务必注意,我正在为 windows 编程,我发现的所有文档都是关于 IOS 或旧版本的,b2BodyDef bodyDef 之类的某些功能似乎不起作用。

【问题讨论】:

  • 如何创建身体? Tiled 本身不会生成物理 - 您只需创建一些形状,然后在您的应用程序中基于此创建物理

标签: c++ cocos2d-x box2d cocos2d-x-3.0 tmx


【解决方案1】:

我目前正在做你在我的最新游戏中描述的事情,唯一的区别是我使用 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 工具的博文,其中将准确涵盖这一点。我希望这会有所帮助,如果您正在寻找此解决方案,请告诉我。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2013-01-06
    • 1970-01-01
    • 2017-05-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多