Cocos2d / Box2D. Как сгенерировать физическое тело из тайлакарты .tmx?

Я новичок в разработке игр.

То, что я пытаюсь сделать, это загрузить мозаичную карту .tmx, которую я создал из Tiled, в свою игру в качестве физического тела, я использую C ++ и Boxd2. Мои карты отображают только те плитки, которые я хочу создать, например, пол и некоторые платформы.

Важно отметить, что я программирую для Windows, и вся найденная мною документация касается IOS или более старой версии, некоторые функции, такие как b2BodyDef bodyDef, похоже, не работают.

0

Решение

В настоящее время я делаю то, что вы описываете в моей последней игре, с той лишь разницей, что я использую cocostudio для создания всего в моей игре, включая мои карты. Причина, по которой я это сделал, состояла в том, чтобы я мог контролировать все, что мне было нужно, я использую заранее определенные соглашения об именах, чтобы указать физические ребра, которые я затем считал, и определить их размеры и построить тела ребер.

Обзор высокого уровня

Перед тем, как продолжить, я сделаю предположение о вашей карте .tmx. У вас есть уникальные идентификаторы для объектов, которые вы хотели бы создать как физический объект
(что-то в его названии, которое вы можете использовать, чтобы вытащить и осмотреть это).

  1. Прочитайте в файле .tmx и передайте его в ваш файл.
  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 как о чем-то большем, чем инструмент для пользовательского интерфейса, который точно расскажет об этом. Я надеюсь, что это поможет, пожалуйста, дайте мне знать, если это решение — то, что вы ищете.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]