Вторник, 19 Марта 2024, 07:08

Приветствую Вас Гость

Меню сайта
Категории каталога
Создание игр [354]
Статьи об общих понятиях связанных с созданием игр.
Программирование [82]
Гайды по программированию на разных ЯП.
Движки и Гейммейкеры [144]
Статьи о программах для создания игр, уроки и описания.
Софт [39]
Различные программы, в том числе в помощь игроделам.
2D-графика [14]
Уроки по рисованию, растр, пиксель-арт, создание спрайтов и пр.
3D-графика [16]
Уроки по моделированию, ландшафт, модели, текстурирование и пр.
Моддинг игр [5]
Модификация компьютерных игр, создание дополнений, перевод, хакинг.
Игры [160]
Статьи об играх, в том числе и сделанных на гейммейкерах.
Разное [128]
Статьи, которые не вошли в определённые разделы.
Наш опрос
Какие жанры компьютерных игр вы предпочитаете?
Всего ответов: 2043
Главная » Статьи » Движки и Гейммейкеры

BlendElf - Урок 4: Физика и столкновения
Урок 4: Физика и столкновения

В этом уроке мы научим взаимодействовать друг с другом объекты на нашем игровом уровне.

Шаг 1: Имена объектов

На данный момент мы не используем никаких объектов, кроме камеры. Для начала давайте возьмем парочку и установим для них физические настройки.

У всех объектов на уровне есть свое имя, и именно по нему мы будем обращаться к ним. На картинке ниже показаны имена, которые мы будем использовать:

Почему же шар называется Cube.002? Это долгая история, и пока что это абсолютно не важно...

Итак, теперь мы знаем имена двух объектов. Они и будут взаимодействовать друг с другом в дальнейшем.

Шаг 2: Физические примитивы и масса

Давайте вернемся к коду из первого урока:

scn = elf.LoadScene("level1.pak")
while elf.Run() == true do
end

Нам требуется изменить код, добавить две строчки после elf.LoadScene. Если добавить их до этой строки, то мы получим ошибку, т.к. переменная scn не будет ничего содержать.
Наконец, обратимся к нашим двум объектам и запишем их в переменные ent1 и ent2:

scn = elf.LoadScene("level1.pak")

ent1 = elf.GetEntityByName(scn, "Plane")
ent2 = elf.GetEntityByName(scn, "Cube.002")

while elf.Run() == true do
end

Функция elf.GetEntityByName берет со сцены, которая является первым агрументом, объекты под нужным именем, которое, соответственно, является вторым аргументом этой функции. Вот мы "захватили" нашу сферу и пол и можем установить для них физику:

scn = elf.LoadScene("level1.pak")

ent1 = elf.GetEntityByName(scn, "Plane")
ent2 = elf.GetEntityByName(scn, "Cube.002")

elf.SetActorPhysics(ent1, elf.MESH, 0.0)
elf.SetActorPhysics(ent2, elf.SPHERE, 1.0)

while elf.Run() == true do
end

Первый аргумент функции SetActorPhysics - тот объект, который мы "обучаем" физическим законам, второй аргумент - тип физического примитива. А третий это масса. В BlendElf все статические объекты, например пол, обладают нулевой массой.

Что такое физический примитив?

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

elf.BOX - обыкновенная коробка\куб
elf.SPHERE - шар\сфера
elf.MESH - модель, столкновения с которой происходят по ее полигонам. Лучше всего подходит для статических объектов, вроде пола\стен.
elf.CAPSULE_X - Капсула (элипс, овал) с концами по оси X
elf.CAPSULE_Y - Капсула (элипс, овал) с концами по оси Y
elf.CAPSULE_Z - Капсула (элипс, овал) с концами по оси Z
elf.CONE_X - Конус с углом по оси X
elf.CONE_Y - Конус с углом по оси Y
elf.CONE_Z - Конус с углом по оси Z

Размеры примитива, как правило, определяются автоматически (для объектов, подчиняющихся физике, естественно), так что можете об этом не беспокоиться. Но на всякий случай вы сами можете определить размеры вашего тела функцией elf.SetActorBoundingLengths.
Для elf.MESH вычисление размеров не требуется, т.к. информация о нем уже загружена в BlendElf и может спокойно использоваться в физическом движке.

Запустите игру. Мои поздравления, теперь ваш шар падает вниз и катится по полу.

Шаг 3: Добавим "интересностей"

Падающий шар не очень интересен, давайте добавим ему немного начальной скорости.

scn = elf.LoadScene("level1.pak")

ent1 = elf.GetEntityByName(scn, "Plane")
ent2 = elf.GetEntityByName(scn, "Cube.002")

elf.SetActorPhysics(ent1, elf.MESH, 0.0)
elf.SetActorPhysics(ent2, elf.SPHERE, 1.0)
elf.SetActorLinearVelocity(ent2, 0.0, 0.0, 6.0)

while elf.Run() == true do
end

Первый аргумент новой функции elf.SetActorLinearVelocity это объект, который мы хотим ускорить, остальные три - скорость в определенном направлении: по x, y, z.

Источник: КЛИК»

Категория: Движки и Гейммейкеры | Добавил: KpoJIuk (11 Марта 2011)
Просмотров: 11138 | Комментарии: 4 | Рейтинг: 5.0/4 |
Теги: Physics, физика, движок, программирование, BlendELF, ЯП, C++, LUA, 3D
Дополнительные опции:
Также если вы считаете, что данный материал мог быть интересен и полезен кому-то из ваших друзей, то вы бы могли посоветовать его, отправив сообщение на e-mail друга:

Игровые объявления и предложения:
Если вас заинтересовал материал «BlendElf - Урок 4: Физика и столкновения», и вы бы хотели прочесть что-то на эту же тему, то вы можете воспользоваться списком схожих материалов ниже. Данный список сформирован автоматически по тематическим меткам раздела. Предлагаются такие схожие материалы: Если вы ведёте свой блог, микроблог, либо участвуете в какой-то популярной социальной сети, то вы можете быстро поделиться данной заметкой со своими друзьями и посетителями.

Всего комментариев: 4
+1-
4 nik3392   (15 Марта 2011 18:32) [Материал]
nik3392Жду новых статей, + за статью

+0-
3 SlavyanOOs   (12 Марта 2011 18:18) [Материал]
SlavyanOOsЗачет! Отличные уроки! smile

+0-
1 BASS   (12 Марта 2011 17:06) [Материал]
BASSВесьма благодарен. Отличные уроки. Буду рад, если продолжишь в том же духе. biggrin

+0-
2 KpoJIuk   (12 Марта 2011 17:32) [Материал]
постараюсь. перевожу в свободное время, когда не лень, так что не могу обещать частого появления новых уроков. думаю, когда-нибудь допереведу все smile

Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск по сайту
10 случ. движков
  • CYOA Factory
  • Flickgame
  • GameBryo
  • Mortal Szombat
  • LuxRender
  • RPG Tools
  • Phaser
  • Game Hammer 2
  • Eternity
  • Doomsday
  • Друзья сайта
    Игровой форум GFAQ.ru Перевод консольных игр
    Все права сохранены. GcUp.ru © 2008-2024 Рейтинг