Я столкнулся с этим вопросом, когда разрабатывал видеоигру на C #.
Если мы рассмотрим такие игры, как Battlefield или Call of Duty , сотни или даже тысячи пуль летят одновременно. События запускаются постоянно, и, насколько я знаю, это отнимает много вычислительной мощности ... или нет? Я хочу знать, как различные разработчики игр управляют пулями (2D и 3D) и каков наиболее эффективный метод для каждого из них.
Я прочитал вопрос Как моделируются пули в видеоиграх? но это не касается того, как пули работают с точки зрения разработки программы.
У меня было пара идей, но у каждого есть свои недостатки:
Самый эффективный метод, который я мог придумать (для 2D-игр):
Скажем, я должен был создать класс с именем Bullet, и как бы долго пользователь ни удерживал кнопку, каждые 0,01 секунды будет создаваться объект Bullet. Эта пуля имеет:
1 Скорость
2 Начальная позиция того места, откуда он стреляет
3 спрайт текстуры
4 Эффект удара
Поскольку пуля была бы своего собственного класса, она могла бы управлять слушателями рисования, перемещения и действия.
Не будет ли трудно процессору обрабатывать тысячи таких объектов, которые создаются, а затем уничтожаются (когда срабатывает эффект при попадании)? ОЗУ?
Эффективный метод для 3D-игр. У меня была еще одна мысль:
Допустим, я создаю класс оружия. Это оружие имеет различные особенности, некоторые из которых:
1 Определите, куда направлено оружие, и определите, смотрит ли оно на цель
2 Запустите анимацию стрельбы из пистолета.
3 Имеет метод doDamage (), который указывает что-то, чтобы вычесть здоровье из того, на что направлено оружие
4 Уведомляет класс анимации маркера при нажатии кнопки
Затем я мог бы создать статический класс, скажем BulletAnimation, который мог бы получать уведомление о том, где находится пистолет, на который он был направлен, куда направлено это оружие (для пункта назначения пули), и информацию о соответствующем спрайте и скорости, которые будут использоваться для пули. , Затем этот класс рисует спрайты (возможно, в новом потоке, idk), основываясь на обеих позициях и желаемом спрайте, для имитации пули, выпущенной из оружия.
Последнее кажется гораздо сложнее в кодировании, и не потребуется ли много вычислительной мощности, чтобы постоянно вызывать статические переменные, чтобы сделать это для тысяч пуль одновременно? Получение постоянных обновлений как на начальной, так и на конечной позициях также будет сложным.
У меня вопрос, как разработчики игр наиболее эффективно это делают? Меняется ли этот метод с 2D на 3D игры?
pew-pew-pew
технологии :)