|
0 / 0 / 1
Регистрация: 24.02.2017
Сообщений: 62
|
||||||
Придумать алгоритм пересечения игрока с пулей в игре05.04.2017, 21:24. Показов 5039. Ответов 31
Метки нет (Все метки)
Всем привет! Если в кратце то нужно придумать алгоритм пересечения игрока с пулей. Существует массив PictureBox Игроков и аналогично пуль для каждого игрока. Вот пример этого алгоритма.
0
|
||||||
| 05.04.2017, 21:24 | |
|
Ответы с готовыми решениями:
31
Получить id игрока во флеш-игре.
Панель игрока в игре русская рыбалка |
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|
| 07.04.2017, 01:13 | |
|
Nik_33, Тормозит скорее всего не алгоритм а шарп. распределение кучи и потом ее уборка сборщиком мусора довольно тормозные операции. у вас же в каждом проходе распределяется на куче 3 объекта. На плюсах в 3D при 100+ целях и 2000+ активных пуль у подобного алгоритма ни малейшего намека на тормоза. При этом пули и цели создаются один раз к примеру при выстреле и один же раз удаляются при попадании/вылете за пределы моделируемой области/взрыве и т.п. А координаты коллайдеров и пуль апдейтятся во время движения а не пересаздаются постоянно.
1
|
|
|
0 / 0 / 1
Регистрация: 24.02.2017
Сообщений: 62
|
|||
| 07.04.2017, 20:41 [ТС] | |||
|
Добавлено через 1 минуту
0
|
|||
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
|||
| 07.04.2017, 21:18 | |||
|
0
|
|||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||||||||
| 07.04.2017, 21:38 | ||||||||||
|
Кстати одна из причин тормозов может крыться в отрисовке через PictureBox. Далеко не самый быстрый способ отрисовки. такая:
Опять же многое зависит от того как игра организована. Если карта тайловая то можно в тайлах помечать какие персонажи/подвижные объекты в нем находятся и при полете просчитывать через какие тайлы она прошла и проверять пересечеия только с объектами зарегистрироваными в этих тайлах. Плюсы метода - очень быстрый отсев того с кем не пересечется. Минусы - фактически дробление шага по времени, плюс есть сложность что если объект занимает тайл не полностью при этом объект большой и пуля с ним не пересеклась сложно отсеять проверку с ним в следующем тайле, т.е возможен вариант когда с большми объектами пересечение будет проверяться неколько раз. Строить же ннеравномерную сетку индексации имеет смысл только для неподвижных объектов. Для подвижных перестроение сетки скорее всего будет не быстрее чем перебор каждого с каждым. При этом пользуемый у вас алгоритм AABB коллизий настолько быстр что его пользуют для предотсечения - т.е. сначала сравнивая каждого с каждым таким алгоритмом а потом уже только для песекшихся проводят более сложные расчеты пересечения их геометрии. Добавлено через 2 минуты Опять же многое зависит от того насколько предсказуемо поведение цели. Если цель не управляется игроком и/или ИИ , т.е. не может самопроизвольно менять параметры своей траектории то попадет или нет и в какой момент времени попадет можно вычислить в момент выстрела. Добавлено через 3 минуты Если может но не существенно по отношению к скорости пули то можно вычислить с какого по какой момент времени (интервал в котором вероятно попадание)нужна проверка. Добавлено через 2 минуты Вообще задача столкновения подвижных объектов корректно решается только в 4D пространстве. Ну для 2D игры соответсвенно в 3D Добавлено через 8 минут
1
|
||||||||||
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
|
| 07.04.2017, 21:52 | |
|
0
|
|
|
0 / 0 / 1
Регистрация: 24.02.2017
Сообщений: 62
|
|||
| 07.04.2017, 21:53 [ТС] | |||
|
Добавлено через 40 секунд
0
|
|||
| 07.04.2017, 22:08 | |
|
Не по теме: Fulcrum_013, а вы, кстати, знаете почему эта программа на C# работает быстрее аналогичной программы на С++?
0
|
|
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 07.04.2017, 22:10 | ||
|
Поэтому и говорю - чем раньше на плюсы переключитесь тем лучше, это именно так дикая огнедышущая кобылица которая нужна в геймдейве, при это освоить любой другой промышленный язык зная плюсы - вопрос прочтения мануала. Правда неумелых наездников сбросит затопчет и съест. Посему привыкать мыслить категориями этой штуки лучше чем раньше тем лучше. Вообще игры это как ни крути а реалтаймовая задача. Ну скажем в следствие никакой ответсвенности расчетов околореалтаймовая (таки не станом прокатным крутить и не реактор ядерный качегарить), но тем не менее винда а особенно .Net для реалтаймовых задач не предназначены что у майкрософта чуть ли не на каждом заборе написано.
1
|
||
|
0 / 0 / 1
Регистрация: 24.02.2017
Сообщений: 62
|
|
| 07.04.2017, 22:14 [ТС] | |
|
0
|
|
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 07.04.2017, 22:18 | ||
потому как вот эта программа https://ideone.com/H18WBR работает в огромное количество раз быстрее. А все потому что распределение/уборка кучи даже в пуле все равно на порядки медленнее чем распределение/откат стека. А это именно то что пытался сделать в своем алгоритме ТС
0
|
||
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
|||
| 07.04.2017, 22:35 | |||
|
Добавлено через 4 минуты
0
|
|||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||
| 07.04.2017, 23:02 | ||
|
0
|
||
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
||
| 07.04.2017, 23:07 | ||
|
Я всего лишь сказал, что весь цикл заменяется компилятором на одну инструкцию присваивания и поэтому программа работает мгновенно.
0
|
||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
||||
| 07.04.2017, 23:12 | ||||
|
Добавлено через 2 минуты
0
|
||||
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
|||||
| 08.04.2017, 05:12 | |||||
|
Во-вторых, мне вполне известно, что C++ работает быстрее C#, а сравнение программ, которое я привёл, было сделано с целью показать, что выделение мелких недолгоживущих объектов в куче происходит весьма шустро.
0
|
|||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||||
| 08.04.2017, 15:26 | |||||
|
Для игрового клиента это может и не очень критично, но для игрового сервера уже критично. Добавлено через 4 минуты Добавлено через 2 минуты
0
|
|||||
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
|||||
| 08.04.2017, 15:46 | |||||
|
0
|
|||||
|
2083 / 1575 / 169
Регистрация: 14.12.2014
Сообщений: 13,614
|
|||||||||||||
| 08.04.2017, 16:47 | |||||||||||||
|
Из него четко видно что распределение памяти под промежуточные данные в шарпе требует в 10 раз больше времени чем сам расчет. Добавлено через 4 минуты Добавлено через 3 минуты Добавлено через 8 минут Добавлено через 38 минут При этом потомок такого компонента может иметь примерно такое поведение:
0
|
|||||||||||||
|
907 / 664 / 318
Регистрация: 23.10.2016
Сообщений: 1,543
|
|||
| 08.04.2017, 17:55 | |||
|
Ещё раз повторю, я не спорю, что C++ быстрее C#. А что ваш пример демонстрирует? Деструктор это тот же метод, можно аналогичный Dispose в C# написать. А то, что память не переиспользуется пока не возникнет необходимость, мне лично глаз не режет. Если объектов Tmissile планируется очень много, то лучше будет создать пул этих объектов. И тогда никакого delete this не будет, что в С++, что в C# объекты будут удаляться пачками.
0
|
|||
| 08.04.2017, 17:55 | |
|
Помогаю со студенческими работами здесь
20
Перемещение игрока в сетевой игре пс использованием джойстика Вывести ник игрока, одержавшего победу в игре
Всех тех противников в игре заменить на одного противника-игрока Задержка перед ходом Компьютера и Игрока в игре крести-нолики Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2).
Унарный минус обозначается как !
*/
#include <iostream>
#include <stack>
#include <cctype>. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|