Введение в физику — Документация Godot Engine (stable) на русском языке
При разработке игры часто нужно знать, когда два объекта в игре пересекаются или сталкиваются. Это называется обнаружением столкновений. При обнаружении столкновения, как правило, требуется, чтобы что-либо произошло. Это называется реакцией на столкновение.
Godot предлагает ряд объектов столкновений в 2D и 3D как для обнаружения столкновений, так и для реагирования на них. Определение, какие из них использовать в Вашем проекте, может оказаться сложным. Избежать проблем и упростить разработку можно, если понимать, как работает каждый из них и каковы его достоинства и недостатки.
В этом руководстве вы узнаете:
Четыре типа объектов столкновений в Godot
Как работает каждый объект столкновений
Когда и почему выбирать один тип среди других
Примечание
В примерах этого документа будут использоваться 2D объекты.
Каждый 2D физический объект и форма столкновений имеют прямой эквивалент в 3D и в большинстве случаев работают одинаковыми способами.
Объекты столкновений
Godot предлагает четыре вида физических тел, расширяющих CollisionObject2D:
Остальные три тела расширяют PhysicsBody2D:
Физический материал
Static bodies and rigid bodies can be configured to use a physics material. This allows adjusting the friction and bounce of an object, and set if it’s absorbent and/or rough.
Виды и формы коллизий (столкновений)
Физическое тело может содержать любое количество Shape2D объектов в качестве потомков. Эти формы используются для определения границ столкновения объекта и обнаружения контакта с другими объектами.
Примечание
Чтобы обнаруживать столкновения, объекту должен быть назначен хотя бы один .
Наиболее распространенным способом назначения формы является добавление CollisionShape2D или CollisionPolygon2D как дочернего элемента объекта.
Такие узлы позволят Вам рисовать форму непосредственно в рабочем пространстве редактора.
Важно
Будьте осторожны и никогда не масштабируйте формы столкновений в редакторе. Свойство «Масштаб» в инспекторе должно оставаться (1, 1). При изменении размера формы столкновения всегда следует использовать параметры размера, а не параметры масштаба Node2D
Обратный вызов для физических процессов
The physics engine may spawn multiple threads to improve performance, so
it can use up to a full frame to process physics. Because of this, the value
of a body’s state variables such as position or linear velocity may not be accurate for the current frame.
Чтобы избежать этой проблемы, любой код, которому требуется доступ к свойствам тела, должен выполняться в обратном вызове Node._physics_process(), который вызывается перед каждым шагом расчёта физики с постоянной частотой кадров (по умолчанию 60 раз в секунду).
delta, являющимся числом с плавающей запятой, равным времени, прошедшему в секундах с момента последнего шага. При использовании частоты обновления физики по умолчанию 60 Гц она обычно будет равна 0,01666... (но не всегда, см. ниже).Примечание
Рекомендуется всегда использовать параметр delta в Ваших физических вычислениях, чтобы игра вела себя правильно, если Вы измените скорость обновления физики, или если устройство игрока будет тормозить.
Слои и маски столкновений
Одной из самых мощных, но часто неправильно понимаемых возможностей в системе столкновений является система слоёв столкновений. Она позволяет создавать сложные взаимодействия между различными объектами. Ключевыми понятиями являются CollisionObject2D имеет 20 различных физических слоев, с которыми он может взаимодействовать.
Рассмотрим каждое из свойств по очереди:
Эти свойства можно настроить с помощью кода или путем их редактирования в инспекторе.
Отслеживать, для чего используется каждый слой, может быть затруднительно, поэтому может оказаться полезным назначить имена используемым слоям. Имена можно присвоить в меню Настройки проекта — > Имена слоев.
Пример GUI
В игре есть четыре типа узлов: «Стены», «Игрок», «Враг» и «Монета». И Игрок, и Враг должны сталкиваться со стенами. Узел Игрок должен обнаруживать столкновения как с Враг, так и с Монета, но Враг и Монета должны игнорировать друг друга.
Начните с именования слоев 1-4: «walls», «player», «enemies» и «coins» и поместите каждый тип узла в соответствующий слой с помощью свойства «Слой». Затем задайте свойство «Маска» каждого узла, выбрав слои, с которыми он должен взаимодействовать. Например, настройки игрока будут выглядеть следующим образом:
Пример кода
В вызовах функций слои задаются как битовая маска. Если функция включает все слои по умолчанию, маска слоя будет задана как . Код может использовать двоичное, шестнадцатеричное или десятичное представление для масок слоев в зависимости от предпочтений пользователя.
(4-1)) = 1 + 4 + 8 = 13
pow(2, 1) + pow(2, 3) + pow(2, 4)
Area2D
Узлы областей обеспечивают обнаружение ** и **влияние. Они могут обнаруживать перекрытия объектов и испускать сигналы при входе или выходе тел. Области также могут использоваться для переопределения физических свойств, таких как сила тяжести или упругости в определенной области.
Есть три основных варианта использования Area2D:
Переопределение физических параметров (таких как гравитация) в данной области.
Обнаружение, когда другие тела входят или выходят из области или какие тела находятся в настоящее время в области.
Проверка других областей на перекрытие.
По умолчанию области также получают ввод с помощью мыши и сенсорного экрана.
StaticBody2D
Статическое тело — это тело, которое не перемещается физическим движком. Оно участвует в обнаружении столкновений, но не движется в ответ на столкновение. Однако, оно может передавать движение или вращение столкнувшемуся телу, как если бы оно двигалось, используя его свойства«constant_linear_velocity« и .
Узлы StaticBody2D чаще всего используются для объектов, которые являются частью среды, или которым не требуется какое-либо динамическое поведение.
Примеры использования StaticBody2D:
RigidBody2D
Реализует симуляцию 2D-физики. Вы не управляете RigidBody2D напрямую. Вместо этого к нему применяются силы, и физический движок вычисляет результирующее движение, включая столкновения с другими телами и реакции на столкновения, такие как отскок, поворот и т.д.
Поведение твёрдого тела можно изменить с помощью таких свойств, как «Масса», «Трение» или «Отскок», которые можно задать в инспекторе.
На поведение тела также влияют свойства мира, заданные в Свойства проекта — > Физика, или вход в Area2D, переопределяющего глобальные свойства физики.
Когда твёрдое тело находится в состоянии покоя и какое-то время не двигалось, оно «засыпает». Спящее тело ведёт себя как статическое тело, и его силы не рассчитываются физическим движком.
Тело будет просыпаться либо при приложении сил, либо при столкновении, либо при помощи кода.
Режимы твёрдого тела
Твёрдое тело может быть установлено в один из четырех режимов:
Твёрдое — тело ведет себя как физический объект. Оно сталкивается с другими телами и реагирует на приложенные к нему силы. Это режим по умолчанию.
Статичное — тело ведет себя как StaticBody2D и не двигается.
Персонаж — аналогично режиму «Твёрдое», но тело не может вращаться.
Кинематическое — Тело ведет себя как KinematicBody2D и должно перемещаться кодом.
Использование RigidBody2D
Одним из преимуществ использования жесткого тела является то, что различные поведения можно получить «бесплатно», без написания какого-либо кода. Например, если бы Вы делали игру в стиле «Angry Birds» с падающими блоками, Вам нужно было бы просто создать различные RigidBody2D и скорректировать их свойства.
Однако, если вы хотите иметь некоторый контроль над телом, Вам следует быть осторожным — изменение position, linear_velocity или других физических свойств твёрдого тела может привести к неожиданному поведению. Если необходимо изменить какое-либо из связанных с физикой свойств, следует использовать обратный вызов _integrate_forces() <class_RigidBody2D_method__integrate_forces>`вместо «_physics_process ()`. В этом обратном вызове вы имеете доступ к Physics2DDirectBodyState тела, что позволяет безопасно изменять свойства и синхронизировать их с физическим движком.
Например, вот код космического корабля в стиле «Asterioids»:
extends RigidBody2D
var thrust = Vector2(0, 250)
var torque = 20000
func _integrate_forces(state):
if Input.is_action_pressed("ui_up"):
applied_force = thrust.rotated(rotation)
else:
applied_force = Vector2()
var rotation_dir = 0
if Input.
is_action_pressed("ui_right"):
rotation_dir += 1
if Input.is_action_pressed("ui_left"):
rotation_dir -= 1
applied_torque = rotation_dir * torque
Обратите внимание, что мы не устанавливаем свойства linear_velocity или angular_velocity напрямую, а, скорее, прикладываем силы (thrust и torque) к телу и позволяем физическому движку рассчитать результирующее движение.
Примечание
Когда жесткое тело переходит в спящий режим, функция _integrate_forces() не вызывается. Чтобы переопределить это поведение, необходимо сохранить тело в рабочем состоянии, создав столкновение, применив к нему силу или отключив свойство can_sleep. Помните, что это может негативно сказаться на производительности.
Отслеживание контактов
По умолчанию твёрдые тела не отслеживают контакты, поскольку это может потребовать огромного объема памяти, если в сцене находится много тел. Чтобы включить отслеживание контактов, задайте для свойства contacts_reported ненулевое значение.
Контакты могут быть получены через Physics2DDirectBodyState.get_contact_count() и связанные с ним функции.
Мониторинг контактов через сигналы можно включить с помощью свойства contact_monitor. Список доступных сигналов см. в разделе RigidBody2D.
KinematicBody2D
KinematicBody2D обнаруживают столкновения с другими телами, но на них не влияют физические свойства, такие как гравитация или трение. Вместо этого они должны управляться пользователем через код. Физический движок не будет перемещать кинематическое тело.
При перемещении кинематического тела не следует устанавливать его position непосредственно. Вместо этого используются методы move_and_collide() или move_and_slide(). Эти методы перемещают тело по заданному вектору, и оно мгновенно останавливается, если обнаруживается столкновение с другим телом. После того как тело столкнулось, любая реакция на столкновение должна быть закодирована вручную.
Реакция кинематического тела на столкновение
После столкновения тело может отскочить, начать скользить по стене или изменить свойства объекта, в который оно попало.
Способ обработки реакции на столкновение зависит от способа перемещения KinematicBody2D.
move_and_collide
При использовании move_and_collide() функция возвращает объект KinematicCollision2D, который содержит информацию о столкновении и столкнувшемся теле. Эту информацию можно использовать для определения реакции.
Например, если нужно найти точку в пространстве, где произошло столкновение:
extends KinematicBody2D
var velocity = Vector2(250, 250)
func _physics_process(delta):
var collision_info = move_and_collide(velocity * delta)
if collision_info:
var collision_point = collision_info.position
Или отскочить от объекта, с которым столкнулись:
extends KinematicBody2D
var velocity = Vector2(250, 250)
func _physics_process(delta):
var collision_info = move_and_collide(velocity * delta)
if collision_info:
velocity = velocity.bounce(collision_info.normal)
move_and_slide
Скольжение является общей реакцией на столкновение; представьте себе игрока, движущегося вдоль стен в игре с видом сверху, или бегающего вверх и вниз по склонам в платформере.
Хотя этот ответ и можно закодировать самостоятельно после использования move_and_collide(), move_and_slide() обеспечивает более удобный способ реализации скользящего движения без написания большого количества кода.
Предупреждение
move_and_slide() автоматически включает временной интервал в свои расчеты, поэтому не умножайте вектор скорости на delta.
Например, используйте следующий код для создания персонажа, который может ходить по земле (включая уклоны) и прыгать, когда стоит на земле:
extends KinematicBody2D
var run_speed = 350
var jump_speed = -1000
var gravity = 2500
var velocity = Vector2()
func get_input():
velocity.x = 0
var right = Input.is_action_pressed('ui_right')
var left = Input.is_action_pressed('ui_left')
var jump = Input.is_action_just_pressed('ui_select')
if is_on_floor() and jump:
velocity.y = jump_speed
if right:
velocity.x += run_speed
if left:
velocity.
x -= run_speed
func _physics_process(delta):
velocity.y += gravity * delta
get_input()
velocity = move_and_slide(velocity, Vector2(0, -1))
Дополнительные сведения по использованию move_and_slide() см. в разделе Кинематический персонаж (2D), включая демонстрационный проект с подробным кодом.
Особенности занятий хореографией
Существует множество разнообразных танцевальных направлений, отличающихся друг от друга темпом, ритмом, настроением и множеством других признаков. Однако основой всех без исключения танцев является хореография. На занятиях по хореографии дети учатся правильно воспринимать музыку и совмещать ее со своими движениями, приобретают базовые навыки грации и пластичности, укрепляют свое здоровье, причем как физическое, так и психическое.
Хореография для малышей преподносится в доступной и увлекательной форме, для детей постарше занятия имеют уже более сложную структуру. На этих уроках дети выполняют упражнения, направленные на гармоничное развитие всех групп мышц.
Помимо укрепления здоровья и приобретения красивого тела, уроки хореографии корректируют и характер. Устраняются капризы, неуверенность, излишняя робость и приобретается ответственность и самоорганизация, уверенность в себе и своих силах. Кроме того, занимаясь с другими ребятами, ребенок развивает и свои коммуникативные навыки.
Уроки хореографии состоят из трех основных составляющих:
- Элементы классического танца.
- Импровизация.
- Балетная гимнастика.
Уроки хореографии дают базовые навыки, составляющие основу всех без исключения танцев, они учат правильно двигаться и чувствовать музыку. Совмещая уроки танцев с уроками хореографии можно добиться максимальной результативности и эффективности. Или в последствии серьезные занятия классической хореографией могут перерасти в профессиональную деятельность, когда ребенок поступает в балетное училище и посвящает выбранному делу все свое время.
Основу занятий по хореографии составляет обучение классическому танцу, который помогает вникнуть во все тонкости танцевального искусства, научиться правильно и гармонично двигаться и чувствовать музыку. Занятия проходят у хореографического станка, а навыки закрепляются регулярными тренировками. Такие уроки развивают у детей гибкость, выносливость, координацию, укрепляют мышцы и опорно-двигательный аппарат, формируют общую культуру движений и позволяют выполнять любые танцевальные движения красиво и уверенно. Занятия по классическому танцу формируют красивую, ровную осанку, корректируют легкие случаи искривления позвоночника, развивают мускулатуру и выворотность ног, эластичность стоп. На уроках дети учатся постановке рук и головы, приобретают способность правильно держать корпус, грамотно распределяя вес на ногах, тем самым тренируя устойчивость и ловкость и приобретая подтянутую, красивую фигуру. На тренировках развивается ритмичность движений, способность двигаться вместе с ритмом музыки, выдерживая разный ее темп.
Помимо элементов классического танца важной составляющей уроков хореографии является импровизация. Кроме обучения танцевальной технике детям прививают умение фантазировать и экспериментировать во время исполнения танца, не боясь выходить за границы правил и норм. Умение импровизировать заключается в том, чтобы уверенно танцевать, избегая заученных схем, связок и комбинаций. Однако при этом любая импровизация строится на технике классического танца, чтобы выглядеть органично друг с другом. Техника и импровизация должны дополнять друг друга, гармонируя и сочетаясь, иначе импровизационные моменты будут смотреться непрофессионально и неуместно.
Используя полученные навыки танцор способен раскрепостить свои движения и тело в целом, разнообразя картину танцы и делая ее более интересной и захватывающей. Грамотно построенная импровизация способна обогатить танец и сделать его более зрелищным. Полученные на уроках навыки очень сильно развивают фантазию и воображение, стимулируют абстрактное мышление.
Не менее важной составляющей уроков является балетная гимнастика — комплексная программа упражнений, направленная на укрепление мышц, выправление осанки, приобретение тонуса тела, развитие грации и гармоничности движений. Балетная гимнастика включает в себя множество упражнений, направленных на развитие всех частей тела. Отдельные упражнения укрепляют спину и выравнивают осанку, развивают и укрепляют пресс, помогают выворотности и профилактики плоскостопия. Этот комплекс помогает получить красивую, стройную фигуру, укрепить здоровье и улучшить самочувствие, а учитывая, тот факт, что тренировки проходят без каких-либо тренажеров и поднятий тяжестей, исключается чрезмерная нагрузка на позвоночник и суставы. Все виды упражнений выполняются на полу и снимают тем самым нагрузку со спины, позволяя сосредоточиться на проработке определенных групп мышц. Регулярные тренировки помогают приобретению хорошей растяжки и развитых сильных мышц.
Уроки хореографии дают базовые навыки, составляющие основу всех без исключения танцев, они учат правильно двигаться и чувствовать музыку.
Совмещая уроки танцев с уроками хореографии можно добиться максимальной результативности и эффективности. Или в последствии серьезные занятия классической хореографией могут перерасти в профессиональную деятельность, когда ребенок поступает в балетное училище и посвящает выбранному делу все свое время. Если вы хотите видеть своего ребенка подтянутым, красивым, здоровым и успешным, уроки хореографии — это то, что нужно!
Комфортные условия
Ваш выбор — в пользу нашей школы танцев и спорта!
У нас 3 современных танцевальных зала, отдельные раздевалки, зона для ожидания
Бесплатные занятия
Пробное занятие бесплатно по КАЖДОМУ направлению. 100% Ваш правильный выбор!
Множество стилей
Мы предлагаем различные популярные направления для всей семьи
Выступления
Вас ждут — отчетные уроки, концерты, соревнованиях и другие мероприятия
Заботливые тренеры
Занятия проводят профессионалы именно в своем направлении. Вы в надежных руках!
Достижения учеников
Наши воспитанники — победители и призеры соревнований различного уровня
Бесплатный пробный урок по каждому направлению — выбери свой стиль!
Записаться
Получить консультацию
Архив учебных пособий, советов и бесплатных материалов
Курсы
Научитесь рисованию одежды для начинающих с курсом «Бумажные куклы для взрослых» — теперь он-лайн!
Если вы давно хотели научиться рисованию одежды для начинающих, чтобы создать свой любимый гардероб, этот курс для вас! MyBodyModel’s
Подробнее »
Курсы
Объявляем школу иллюстрированного стиля: онлайн-курсы бодипозитивного модного рисунка и дизайна!
Вы ждали онлайн-курсы рисования моды от MyBodyModel? Ожидание закончилось! Я взволнован (и, признаться, чертовски нервничаю)
Читать дальше »
Учебники, советы и бесплатные подарки
Как рисовать волосы: 5 советов по рисованию модных эскизов
Зачем рисовать волосы на иллюстрациях к моде? Нарисуйте волосы на своем теле.
Шаблоны модных кроки помогут вам почувствовать себя
Подробнее »
Учебники, советы и бесплатные подарки
Приложения для дизайна одежды для начинающих 3: Использование слоев для наброска нарядов
Готовы ли вы к повысить свои навыки работы с приложением для дизайна одежды и поиграть с комбинациями нарядов на модели вашего тела? Доктор Т делится, как сделать
Подробнее »
Учебники, советы и бесплатные материалы
Приложения для дизайна одежды для начинающих 2: Procreate
На прошлой неделе Doctor T поделился подробным пошаговым руководством в разделе «Приложения для дизайна одежды для начинающих, часть 1: Adobe». Фреска». Во второй части этой серии
Подробнее »
Учебники, советы и бесплатные материалы
Приложения для дизайна одежды для начинающих 1: Adobe Fresco
планы гардероба с MyBodyModel. Теперь она разделяет
Читать дальше »
Учебники, советы и бесплатные материалы
Часто задаваемые вопросы: обновления версии 2.
0 MyBodyModelСпасибо за прекрасные отзывы о новых возможностях MyBodymodel 2.0! Людям нравятся новые дополнительные настройки и новая функция «рука-на-бедре»
Подробнее »
Учебники, советы и бесплатные
Обзор: 9 приложений для рисования для цифровой иллюстрации моды с помощью MyBodyModel от Doctor T
Есть много цифровых приложения для рисования, которые вы можете использовать для иллюстрации моды с MyBodyModel. Доктор Т опробовала девять различных приложений для рисования на своей девятке.0003
Подробнее »
Учебники, советы и бесплатные материалы
5 лучших советов по устранению неполадок при создании модели тела, которая вам понравится . С момента запуска MyBodyModel я получил SO
Читать больше »
Учебные пособия, советы и бесплатные данные
FAQ: MyBodyModel Version 1.0 Обновления
Ниже приведены ответы на некоторые часто задаваемые вопросы, касающиеся обновления приложения от Beta Beta MyBodeModel в версию 1.
0. Веб-приложение MyBodyModel будет обновляться с версии 9.0003
Подробнее »
Обучающие материалы, советы и бесплатные подарки
Раскрашивание кроки: оттенки кожи, часть 1 – выпуск маркеров
оттенок кожи может сделать
Подробнее »
Учебники, советы и бесплатные материалы
Преодоление мышления «Я не умею рисовать», Джейлин
наверное мягко сказано. Когда я впервые увидел приложение MyBodyModel
Подробнее »
Обучающие материалы, советы и бесплатные подарки
Эскизы одежды для начинающих. Часть 3. Рисование рукавов Новички». Это видео является продолжением первых двух
Подробнее »
Учебные пособия, советы и бесплатные материалы
Эскизы одежды для начинающих, часть 2: рисование вырезов
Учебное пособие «Рисование вырезов» — это вторая часть нашего шага.
пошаговая серия «Модный скетчинг для начинающих». Это видео является продолжением первого видео
Подробнее »
Учебники, советы и бесплатные
Часто задаваемые вопросы: Часто задаваемые вопросы о бета-версии MyBodyModel
Вот некоторые часто задаваемые вопросы о бета-версии веб-приложения MyBodyModel. Что означает «бета»? «Бета-версия» означает, что мы тестируем приложение и собираем отзывы по номеру
Подробнее »
Учебные пособия, советы и бесплатные подарки
Эскизы одежды для начинающих, часть 1: Начало работы
Вам нравится идея создания набросков шитья? или планы по вязанию, но не знаете, с чего начать? Я создал серию пошаговых видео под названием «Модный скетчинг 9».0003
Подробнее »
Готовы сделать модель собственного тела?
Хотите быть в курсе событий?
Подпишитесь на обновления и инсайдерские скидки и получите бесплатный мгновенный доступ к нашему набору из 3 видео «Рисование одежды для начинающих»!
Facebook-f Instagram Twitter Youtube Pinterest
Цель: 31 день набросков нарядов без повторения
Это была любовь с первого взгляда, когда Кэти Кортман из @
Вот вопрос 🤔 Планируете ли вы свой m
«Привет, меня зовут Танди, и у меня пышные формы с e
После того, как я не шила почти 10 лет, когда Pam pic
Мы ЛЮБИМ большой швейный проект.
