0 / 0 / 0
Регистрация: 24.07.2017
Сообщений: 6
1

Создание физических барьеров в 2д игре с видом сверху

08.09.2017, 21:36. Показов 3559. Ответов 2

Author24 — интернет-сервис помощи студентам
Создаю игру как написано выше. Не могу придумать как сделать физические ограничения передвижения игрока(барьеры). OpenGL
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
08.09.2017, 21:36
Ответы с готовыми решениями:

Вспышка после выстрела в TDS игре на Unity2D (игра с видом сверху)
Я хочу сделать вспышку после выстрела в игре. Но не знаю как это реализовать и не знаю где брать...

Управление с видом сверху (2D)
я новичок как сделать управление с видом сверху для танка(хочу сделать типа Battle City)

RPG с видом сверху
Привет=) Посоветуйте игры жанра РПГ 2012/2011 года, с видом сверху (например Dragon Age, Diablo)...

Unity2D, Стрельба с видом сверху
Всем привет, кто знает как сделать стрельбу с видом сверху, вот как на этом видео, 1:23 мин....

2
0 / 0 / 0
Регистрация: 24.07.2017
Сообщений: 6
09.09.2017, 13:39  [ТС] 2
А с чем сравнивать параметры (координаты игрока) вызывая функцию проверки? И что такое коллизии(я приблизительно знаю что туда будет посылаться координаты(два входных блока)).
0
Каждому свое
533 / 219 / 81
Регистрация: 05.08.2013
Сообщений: 1,614
10.09.2017, 10:41 3
Лучший ответ Сообщение было отмечено TerminatOS как решение

Решение

TerminatOS, нельзя просто взять, и написать то, чего ты хочешь. Нужна правильно организованная структура внутренностей кода, на котором ты пишешь игру. Эти внутренности и есть - игровой движок. Вопрос только в том, ты используешь готовый игровой движок( Unity3d, Unreal Engine, CryEngine и др. ) или все таки свой? Если свой, то повторюсь, нужно понять структуру твоего движка, как реализовываются сущности в твоем движке, как происходят апдейты и др. Много чего нужно знать. У меня например в моем движке, который был написал с архитектурой Entity Component System было организовано следующем образом:
1. Делаю первую сущность( барьер ). Это просто сущность, она из себя ничего не представляет, максимум что она умеет, так это находится в где-то в пространстве, тоесть имеет положение/вращение/маштабирование. И может хранить список компонентов, которые привязаны к ней.
Компоненты - это строительные блоки, которые привязываются к той или иной сущности для того, чтобы она представляла из себя "что-то". Какие компоненты нужно привязать к этой сущности? Ну соответственно компонент MeshRendererComponent можно привязать. Этот компонент будет конкретно отвечать за сетку( вершины, индексы, текстурные координаты, можно материал в него запихнуть, хотя я бы его в отдельный компонент поместил ). Так вот, когда мы добавили MeshRendererComponent, мы должны соответственно привязать к нему какую-нибудь сетку, а именно сетку нашего барьера, которая была ранее загружена с помощью какого-нибудь класса загрузчика, к примеру AssetsLoader. Итак, что же должен делать наш движок? Движок должен во-первых делиться на несколько частей, в минимальном раскладе это - обработка звука, обработка физики, обработка графики, обработка логики. Так вот движок обработки графики должен знать о всех MeshRendererComponent компонентов сцены. Он, каждый кадр, перебирает все MeshRendererComponent и просто рисует их средствами OpenGL или DirectX или еще чем, это не важно.
Итак, барьер мы расположили в пространстве и натянули на него сетку. Какой же еще компонент нужен для барьера? Правильно. Физический коллайдер. Коллайдер - это физическая форма, которая может принимать на себя столкновения( коллизии ) с другими физическими коллайдерами. Назовем этот компонент PhysicsColliderComponent. Я бы произвел наследование от этого компонента, чтобы иметь разные формы коллайдеров - BoxColliderComponent, SphereColliderComponent, MeshColliderComponent. Для барьера нам скорее всего подойдет MeshColliderComponent. Этот коллайдер будет принимать в параметре сетку, для того, чтобы организовать физическую форму нашего барьера, для дальнейших соударений. Кто же должен обрабатывать коллайдеры? Ну естественно другая часть нашего движка - обработчик физики. Он, также как и обработчик графики, каждый кадр пробегает по всем PhysicsColliderComponent сцены, и пересчитывает всю физику, оценивает ситуацию, когда два коллайдера столкнулись, и что нужно сделать при этом. Все, наш барьер готов.
C++
1
2
3
4
5
6
7
8
9
10
GameObject* barrier = scene.createGameObject<GameObject>( "Barrier1" );
barrier -> setPosition( 3.0f, 5.0f, 1.0f );
{
    Mesh mesh = AssetsLoader :: getMesh( "BarrierMesh" );
    auto meshRendererComponent = barrier -> addComponent<MeshRendererComponent>();
    meshRendererComponent -> setMesh( mesh );
 
    auto meshColliderComponent = barrier -> addComponent<MeshColliderComponent>();
    meshColliderComponent -> setMesh( mesh );
}
2. Теперь игрок. Не буду расписывать все подробно, как это я сделал выше. Все тоже самое. Игрок - это игровая сущность.
Нужны компоненты - MeshRendererComponent для прорисовки сетки игрока; MeshColliderComponent для физических коллизий; CharacterControllerComponent - компонент, который будет отвечать за управление игроком на сцене. Можно сделать так, чтобы все компоненты, которые наследуются от LogicsComponent, обновлялись в части движка - обработчик логики. CharacterControllerComponent - замечательный кандидат для наследования от LogicsComponent.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
GameObject* charanter = scene.createGameObject<GameObject>( "Character" );
barrier -> setPosition( 0.0f, 0.0f, 0.0f );
{
    Mesh mesh = AssetsLoader :: getMesh( "CharacterMesh" );
    auto meshRendererComponent = charanter -> addComponent<MeshRendererComponent>();
    meshRendererComponent -> setMesh( mesh );
 
    auto meshColliderComponent = charanter -> addComponent<MeshColliderComponent>();
    meshColliderComponent -> setMesh( mesh );
 
    auto characterControllerComponent = charanter -> addComponent<CharacterControllerComponent >();
    characterControllerComponent -> setSpeed( 10.0f );
}
На самом деле, это я рассказал только 1% из того, что нужно знать для организации игрового движка. Скорее всего Вы его будете делать дольше, чем саму игру.

Поэтому легче взять готовый игровой движок - для новичков Unity3d подойдет, и писать игру на нем. Там есть замечательный пользовательский интерфейс для организации быстрого скелета игры, и потом уже код, на C# или JavaScript, причем только логика.
0
10.09.2017, 10:41
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
10.09.2017, 10:41
Помогаю со студенческими работами здесь

NavMesh в Unity2D (игра с видом сверху
У меня проблема! Я хочу сделать чтобы враги обходили стены. Но я не знаю как это реализовать. На...

Наведения врага на игрока оружием в TDS ( игра с видом сверху) в Unity2D
Я хочу сделать чтобы враг наводился на игрока за которого я управляю и начинал стрелять! Но не знаю...

Проблема стрельбы врагов через стены по игроку в TDS Unity2D (игра с видом сверху)
Здравствуйте уважаемые знатоки). У меня враги стреляют в меня через стены, а мне этого не надо. Я...

Дистанция стрельбы в TDS игре на unity2D (вид сверху)
Я хочу сделать так, чтобы когда игрок приближался на определенную дистанцию к врагу, то он начинал...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru