|
403 / 19 / 5
Регистрация: 17.01.2017
Сообщений: 572
|
||||||
Как сделать столкновение объектов?24.03.2024, 21:02. Показов 6352. Ответов 70
Метки нет (Все метки)
Здравствуйте мне нужно сделать столкновение объектов через функцию. Вот пример варианта, что нужно получить.
Я для этого специально написала функцию hitTest. Выше пример это обычный вариант где сравниваются по оси координат столкновения граней. Через hitTest у меня фиксируется только столкновение когда объект находиться внутри. Пример на gif-анимации. Как проверять грани и запускать hitTest? В прошлый раз мне не ответили поэтому я код изменила и сделала более легкую версию. Здесь используются функции - Transform - setTransform. Все это важно для проверки столкновения. Вот код, чтобы протестировать достаточно скопировать, сохранить в html файл и загрузить в браузере. Никакие библиотеки дополнительно подключать не нужно.
0
|
||||||
| 24.03.2024, 21:02 | |
|
Ответы с готовыми решениями:
70
Непростое столкновение объектов на Canvas Как определить столкновение объектов Столкновение объектов |
| 15.04.2024, 15:16 | ||||||||||||
|
Для начала, надо как-то добавить прямоугольники (статические платформы) в статическую группу. У вас есть такой код:
0
|
||||||||||||
| 15.04.2024, 15:22 | |
|
0
|
|
| 15.04.2024, 16:53 | ||||||
|
Следующим образом можно сделать статическую платформу из прямоугольника:
0
|
||||||
| 15.04.2024, 20:29 | |
|
Перенёс в песочницу все 10 примеров из уроков туториала по платформеру: Making your first Phaser 3 game
Примеры залил на GitHub и добавил в README.md инструкцию по сборке примеров на Rollup.
0
|
|
|
403 / 19 / 5
Регистрация: 17.01.2017
Сообщений: 572
|
||||||
| 16.04.2024, 21:18 [ТС] | ||||||
|
8Observer8, я все равно не понимаю как это сделать столкновение на Phaser, зато я хорошо разбираюсь в библиотеке EaselJS. Это библиотека как и Phaser разработана для создания игр. Только более легковесная. Вообщем на EaselJS я сделала свой пример.
В EaselJS есть функция hitTest для столкновения объектов только я непоняла как ей пользоваться и написала свою функцию. Назвала hitTestPoint – так же как на Flash. Пример кода.
Game.zip P.S. На мой взгляд библиотека EaselJS очень удобная, единственный недостаток, отсутствует функция для подгона размера под мобильная устройства, т.е. адаптивности как таковой нет, по крайне мере я ее не нашла пока изучала библиотеку, придется позже самой написать. Все остальное есть для создания браузерных игр: добавление графики, звуков, прогресс бара.
0
|
||||||
|
403 / 19 / 5
Регистрация: 17.01.2017
Сообщений: 572
|
|||||||||||
| 06.05.2024, 18:03 [ТС] | |||||||||||
|
8Observer8, еще обнаружила небольшую ошибку при столкновении объектов прежде чем сделать прыжок на следующую платформу герой выезжает за край предыдущей платформы. Ширина смешения равна ширины героя, чтобы этого избежать нужно в столкновениях вычесть ширину героя "arr1[i].width-guy2.width".
0
|
|||||||||||
| 06.05.2024, 21:24 | |
|
Phaser использует собственный физический движок Arcade Physics для определения столкновений. Физический движок Box2D является более продвинутым, распространённым и универсальным. То есть Arcade Physics может быть использован только вместе с Phaser, а Box2D можно использовать с любыми игровыми фреймворками. Даже можно использовать Box2D вместе Three.js в 3D. В таком платформере объекты можно сделать 3D, а физику 2D. Я запускал Box2D (точнее порты на JS: box2d/core и Box2D-WASM) на серверной части на Node.js на бесплатном хостинге https://render.com/ Можно сделать физику на стороне сервера, а игру с мультиплеером.
Заменил Arcade Physics на @box2d/core в примерах туториала Making your first Phaser 3 game Ссылки на примеры в песочнице:
GitHub репозиторий с руководством на Rollup А также заменил Arcade Physics на Box2D-WASM. Мне этот порт больше понравился. Точнее, это не порт, а сборка С++ исходников Box2D в WebAssembly с помощью Emscripten. Понравилась эта сборка тем, что класс, которые отвечает за отрисовку коллайдеров предоставляет координаты вершин коллайдеров напрямую, а box2d/core использует save/restore. Я экспериментировал с передачей координат вершин коллайдеров от сервера клиентам через вебсокеты, чтобы проще было отлаживать демки с мультиплеером с физикой на серверной части. Ссылки на примеры в песочнице:
GitHub репозиторий с руководством на Rullup
0
|
|
| 07.05.2024, 11:42 | |||||||||||||||||
|
index.html
0
|
|||||||||||||||||
| 07.05.2024, 12:23 | |||||||||||||||||||||
|
Почему-то сегодня очень долго загружается файл "phaser.esm.min.js" из "jsdelivr", поэтому заменил на "unpkg":
index.html
0
|
|||||||||||||||||||||
| 07.05.2024, 12:38 | |||||||||||||||||||||
|
Земля и статическая платформа
В примере выше я активировал внутренний физический движок Arcade Physics путём добавления следующего кода в "config":
Я добавил землю и платформу в функции "create":
index.html
0
|
|||||||||||||||||||||
| 07.05.2024, 13:19 | ||||||||||||||||
|
Добавление главного героя (ГГ) и управления героем с помощью клавиш-стрелок: влево, вправо, вверх (прыжок)
На основе примера Part 07. Controlling the player with the keyboard из этого урока сделал пример с квадратами и прямоугольниками. ГГ может двигаться с помощью клавиш-стрелок и прыгать за счёт установки линейной скорости тела:
0
|
||||||||||||||||
| 07.05.2024, 13:37 | |||||||||||||||||||||||||||||||
|
Определение столкновений
На основе примера Part 08. Stardust из этого урока, где ГГ собирает звёзды, сделал пример, где ГГ касается двух кубиков, а в консоль выводится к какому кубу прикоснулся игрок: к правому или к левому Создаём в функции "create" левый и правый кубики:
0
|
|||||||||||||||||||||||||||||||
| 07.05.2024, 15:09 | |||||||||
0
|
|||||||||
| 10.05.2024, 12:25 | ||||||||||||||||||||||
|
Например, так можно подключить Phaser 3 и Box2D-WASM со своего сайта:
0
|
||||||||||||||||||||||
| 13.05.2024, 21:18 | ||||||||||||
Поэтому другое решение дополнить библиотеку Easelj используя extend и добавить новые функции. Вот пример 3 разных способа столкновения (можно просто скопировать код в html и запустить через браузере). Особое внимание следует обратить на функции hitRect и hitTestPoint, они наследуют функцию Shape из библиотеки Easeljs.
0
|
||||||||||||
| 14.05.2024, 10:22 | |
|
Взяв за основу столкновение объектов из 25 поста я сделала небольшой платформер. Здесь один уровень, но есть трамплин, который увеличивает дальность прыжка.
Вот исходники. Анимация трамплина находитя в папке assets. Platformer.zip
1
|
|
| 14.05.2024, 18:56 | |
|
Доделал демку на Phaser 3 и JavaScript по глобальной сети с мультиплеером. Можно походить и попрыгать в браузере: https://walk-and-jump-with-mul... glitch.me/ Сервер авторитарный. На сервере физика на Box2D-WASM и вся игровая логика, а клиент просто отображает картинки и спрайтовую анимацию. На клиенте может быть что-угодно: EaselJS, Phaser, Three.js, libGDX, SFML, Godot, Unity, Unreal Engine и т.д. Туториал по платформеру на Phaser 3 на официальном сайте: Making your first Phaser 3 game
Исходники сервера и клиента на бесплатном хостинге Glitch
2
|
|
|
403 / 19 / 5
Регистрация: 17.01.2017
Сообщений: 572
|
|
| 22.05.2024, 11:41 [ТС] | |
|
8Observer8, я еще не использовала JavaScript для написания игры с мультиплеерном режимом. Зато использовала пример платформер который привели в 36 посте. Сделала игру.
Код не слишком складно написано, в функциях много разных ненужных свойств. Это все потому, что при написании я меняла структуру добавляя новые возможности. Перепишу код позже. Описание игры: Два игрока на одной локации, почти как в посте выше (37 пост). Только без мультиплеера. Игра на одном компьютере. Два робота стреляют смертельным лазером способный за один залп уничтожить технику врага. Управление: Игрок 1: Стрелки – перемещение. Стрельба – пробел. Игрок 2: WASD – перемещение. Стрельба – клавиша F, от слова (Fire). Особенности. Луч стреляет вперед, вверх под углом 45 градусов. Это сделано на тот случай если противник будет в прыжке и чтобы его ЭФФЕКТНО сбить. Чтобы направить луч в определенную сторону, нужно удерживать клавишу управление например: стрелка вверх и огонь у “игрока 1” луч будет направлен в потолок. Под углом 45 градусов: вверх + вправо + огонь. Как в файтинги, типа Mortal Kombat, для выполнения крутого удара нужно нажать комбинацию клавиш. Собственно вот пример игры (анимация) который выполнен с библиотекой Easeljs. А вот код. Он слишком объемный (почти 1500 строк) поэтому опубликую как файл. PlatformerForTwo.zip
1
|
|
| 22.05.2024, 16:34 | |
|
Я вчера доделал игру с мультиплеером. Смысл её в том, чтобы набрать звёзд больше, чем соперники. Нужно было бы ещё вывести рекордный счёт на сеанс, чтобы было видно, кто набрал больше всех. Когда все звёзды собраны, то падают новые, а ещё появляется бомба, которая летает по всему экрану и если игрок с ней столкнётся, то он потеряет все очки и ему придётся собирать их заново. В этой игре нет предсказаний на клиенте и интерполяции других клиентов, а вообще надо. Для предсказаний клиента надо, чтобы на клиенской части тоже была запущена игра на Box2D-WASM, а спустя промежутки проводилась синхронизация с сервером. Но я решил пока не тратить на это время. Лучше подераю игровые демки для тренировки без предсказаний на клиенте и интерполяции других игроков.
На Node.js сервере использую библиотеку "ws": ws: a Node.js WebSocket library. Это невероятно популярная библиотека. За неделю её скачивают 74 милиона раз! Игра на бесплатном хостинге Node.js Glitch и исходники:
Игра получилась в результате перевода следующиго туториала на Box2D-WASM и мультиплеер: Making your first Phaser 3 game
1
|
|
| 22.05.2024, 17:44 | |
|
Следующую демку с Марио на бесплатных ассетах я написал на С++ на чистом OpenGL ES 2.0 с использованием C++-фреймворка Qt 6. Собрал исполняемые файлы для Android, Windows и WebAssembly (для запуска в браузере). В демке использую Box2D для: передвижения, прыжка, определения столкновений и пуска лучей. Добавил Box2D в проект прямо исходниками. Box2D имеет класс b2Draw переопределив методы которого можно рисовать коллайдеры имея координаты вершин, которые выдают методы класса b2Draw. Добавление Box2D исходниками позволяет собирать из одной кодовой базы для Android, Desktop и APK. Подключил библиотеку OpenAL-Soft для музыки и звуков. Подключил OpenAL-Soft для Desktop можно собрать в WebAssembly и будет работать на Web - видимо OpenAL транслируется в Web Audio API. На OpenAL и Web Audio API можно делать 3D звуки, то есть можно слышать где находится источник звука в том числе на Android если телефон поддерживает стерио - особенно это хорошо работает в наушниках. Спрайты упаковал в один атлас с помощью бесплатной программы Free Texture Packer (сайт открывается через VPN), а карту нарисовал и расставил статические коллайдеры в бесплатном редакторе игровых карт Tiled Map Editor. Очень рекомендую скачать эти программы. Особенно Tiled - очень упращает и ускоряет создание игровых уровней. Их можно использовать для любых игровых библиотек, фреймворков и движков. Эти программы экспортируют в JSON, для которого есть встроенный парсер в Qt. Кнопки нарисовал на чистом OpenGL ES 2.0. Шрифт тоже рисуется на чистом OpenGL ES 2.0. Здесь текст с distance field. Можете в YouTube набрать "thinmatrix distance field" и найдете следующие видео: OpenGL 3D Game Tutorial 33: Distance Field Text Rendering, в начале которого на первых нескольких минутах поймёте, что это. Выводится текст на английском руссском и китайском языках.
Для записи gif-анимации вывел экран телефона на ноутбук с помощью бесплатной программы scrcpy, а анимацию записал с помощью бесплатной программы ScreenToGif В демке используются бесплатные ассеты:
1
|
|
| 22.05.2024, 17:44 | |
|
Столкновение объектов на странице JavaScript: столкновение объектов Как сделать столкновение объектов? Как сделать, чтобы столкновение объектов было абсолютно неупругим Столкновение объектов. Как правильно реализовать? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
сукцессия 25. Хронология ошибок
anaschu 12.07.2026
# От 50-тонного гриба до устойчивого леса: хроника ошибок при построении модели вековой сукцессии микоризы
## О чём эта статья
В процессе построения ОДУ-модели (система дифференциальных. . .
|
сукцессия 24. Промежуточное общее описание модели
anaschu 12.07.2026
Хендофф: модель АМ→ЭКМ сукцессии микоризы (ризосфера, 50 лет)
Содержание проекта
Симуляция вековой (50 лет) экологической сукцессии в почве леса
Основные участники: АМ-гриб, ЭКМ-гриб,. . .
|
сукцессия 23. Более физиологичная физиология, более экологичная экология, более диффурные диффуры.
anaschu 12.07.2026
Что реально нашли и починили за эти 5 часов
Правило Линдемана (КПД конверсии сахара в тело, kEff) — раньше 100% полученного углерода шло прямо в биомассу гриба; теперь только kEff=0. 5 (после. . .
|
сукцессия 22. От артефактов к физиологии: калибровка агентной модели грибной сукцессии для воспроизведения сезонной динамики и pH-плато
anaschu 11.07.2026
Аннотация
В данной работе представлена калибровка агентной модели динамики грибных сообществ (fungal-succession), направленная на устранение нефизичных артефактов (коллапс биомассы, мгновенное. . .
|
|
Сукцессия 20. Война автоботов. Делаем ставки. Лёд против "пш-пш!".
anaschu 11.07.2026
Битва ИИ в ризосфере: Как мы скрестили жесткие ОДУ, закон Фика и «подземный шантаж»
Уважаемые коллеги!
Хочу поделиться уникальным опытом ведения междисциплинарной компьютерной разработки. Прямо. . .
|
Сукцессия 19. Какие выводы я сделал из модели? Часть 2.Внутримикоризный стехиометрический буфер и хроно-дискретные зоны экспансии
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы
Математический аппарат моделирования
|
Сукцессия 18. Какие выводы я сделал из войны грибов с деревьями? Часть 1- рассказ и немного про термины
anaschu 11.07.2026
Био-Инженерный Ликбез: Архитектура Модели Ризосферы
Математический аппарат моделирования
Система ОДУ описывает динамику изменения массы различных компонентов системы во времени. Ключевой. . .
|
Просветление в 5 секунд
kumehtar 10.07.2026
Андрей Веретенников выдал фразу недавно: "Вам не обязательно кем-то себя считать"
|