Я использую Tiled (http://www.mapeditor.org) для создания своих карт и TiledSharp (https://github.com/marshallward/TiledSharp) для загрузки и рисования моей карты.MonoGame + TiledSharp Collision
Пока все хорошо. Карта рисуется правильно (в правильных слоях), и движение героя верное.
То, что я не получаю. Как проверить конфликт между игроком и объектами?
В моем Update() У меня есть что-то вроде
if (ks.IsKeyDown(Keys.W))
{
playerMovement += new Vector2(0, -2);
curAnimation = "Walk_North";
}
...
if (playerMovement.Length() != 0)
player.MoveBy(playerMovement);
Проверки .tmx файл на карту, есть моя группа с объектом я могу столкнуться с:
<objectgroup name="Collision">
<properties>
<property name="collision" type="bool" value="true"/>
</properties>
<object id="1" x="1089" y="1118" width="62" height="65"/>
<object id="2" x="801" y="1026" width="61" height="60"/>
</objectgroup>
Что я теперь что-то вроде
If(tileAt(player.Position + playerMovement).Properties.Collision)
playerMovement = Vector2.Zero();
Я думаю, все, что мне нужно, есть, и мне просто не хватает си (
Любые предложения или примеры будут оценены по достоинству. (Может быть, нужно просто вычислить его самостоятельно в простой метод ...)
во-первых, вы должны не добавлять Еогеасп внутри Draw(). в этом случае вы добавляете все collisionObjects 60 раз в секунду (@ 60FPS), что совершенно безумно;) Я добавил foreach в конструктор TileMap, так как вам нужно заполнить объект столкновения только один раз на карту (при условии, что вы загружаете карту сразу) Второе: Проверьте .tmx файл для следующих <идентификатор объекта = "1" х = "96" у = "1054,67" ширина = "96" высота = «64.3333» /> <объект id = "2" x = "479" y = "1119,5" width = "68" height = "66.5" /> и т. Д. objectgroup> Название группа чувствительна к регистру! –