Я натрапив на це питання, коли розробляв відеоігри на 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
технології :)