|
0 / 0 / 0
Регистрация: 31.01.2018
Сообщений: 16
|
|
Godot Оптимизация 2D10.02.2023, 10:05. Показов 2079. Ответов 2
Метки игровые движки (Все метки)
Всем доброго дня!
Столкнулся с серьезной проблемой, которую пытаюсь решить уже несколько дней. Создаю игру танчики, игровое поле разделено на клетки 32х32 пикселя. Танчик передвигается по клеткам - одна клетка за один шаг. (передвижение не резкое, а плавное с дельтой и заданой скорость. Есть счетчик, который следит сколько пикселей пройдено и когда танк прошел больше 32пикселей, он останавливаеся и центрируется по клетке ) Вся механика управления. передвижения и т.д. Создал массив в котором хранится информация какие клетки заняты всеми танчиками. Когда танчик хочет сделать шаг, он смотрит этот массив со смещением по X и Y, +1 и -1, проверяя есть ли занятые клетки слева, справа, сверху , снизу. Исходя из результатов проверки танчик выбирает куда поедет и сразу ставит отметку "занято" на эту клетку в массиве, если направление отличается проигрывается анимация поворота и танчик делает шаг в нужную сторону. По окончании шага, танчик освобождает ранее занимаемую им клетку в массиве. ШАГ состоит из трех основных частей: - определяется расстояние "микрошага" в этой итерации в соответствии с дельтой - это расстояние прибавляется к счетчику, который проверяет что танчик не прошел более 32 пикселей - Это расстояние прибавляется к позиции танчика Если счетчик становится более 32 Пикселей, шаг считается завершенным и танчик снова проверяет массив и цикл повторяется. ПРОБЛЕМА: при запуске с телефона 100 таких танчиков - фпс улетает до 30 и меньше. При запуске на пк 400-500 таких танчиков фпс проседает до 5-10 Для решения пробовал: - Сделать так, чтобы танчики за пределами экрана передвигались не плавно, а сразу на 32 пикселя - не помогло, лишние вычисления даже сделали хуже - Загрузить обработку движения танчика в новый виртуальный поток - не помогло, ФПС низкий, хоть и игра стала ощущаться плавнее из-за того что основной поток этим не грузится, но слайдшоу осталось - Загрузить обработку движения танчика в свой собственный виртуальный поток (создать кучу потоков в надежде, что система их сама равномерно распределит между ядрами процессора) - результат аналогичен предыдущему - Вручную поставить значение дельты на 1 или 0.1 - не помогло - вручную поставить значение дельты на 0.01 - ПОМОГЛО! фпс теперь 40-50 НО танчики движутся как черепахи и это не подходи, но читайте дальше.. - Закомментировать строчку отвечающую за прибавление ""микрошага" к позиции танчика - ПОМОГЛО! фпс 55-60, каждый танчик отрабатывает полный цикл проверки свободного места и делает шаг с прибавление "микрошагов" и расчетами с реальной дельтой - только он никуда не двигается. ФАКТЫ: - Думаю, версию с слишком тяжелой обработкой каждого шага можно откинуть, потому, что без команды прибавления микрошага к позиции все остальное танчик обрабатывал, он крутился, он занимал и освобождал клетки, он проверял сколько ему осталось до конца шага. Он просто при этом стоял на месте. - Считаю что искать проблему нужно именно от фактического изменения положения объекта танчика. Потому что замедление скорости его движения или остановка - приводит повышению фпс. НЫНЕШНИЕ ГИПОТЕЗЫ: Предположение сейчас только одно - чем быстрее танчик движется, тем чаще он заканчивает ход и начинает все эти проверки, тем больше выполняется операций. Но оно рушится сразу же, потому что с закомментированной строчкой движения танчик выполнял все операции с такой-же частотой, потому что дельта в расчетах никак не изменилась просто не прибавлялась к его положению. КОНЕЦ Очень жду советов и подсказок - спасибо!
0
|
|
| 10.02.2023, 10:05 | |
|
Ответы с готовыми решениями:
2
Типы оптимизация: черная оптимизация, серая оптимизация и белая оптимизация Godot AcceptWindow Godot. Движение игрока |
| 10.02.2023, 14:42 | ||||
|
Где-то когда-то я нашёл этот клон танчиков на PyGame. Почти всё реализовано точно также как в оригинальной игре. Здесь все исходники в одном файле tanks.py - 2100 строк кода. Если вы Python никогда не изучали, то ничего страшного, потому что GDScript - это почти тоже самое, что и Python, а в PyGame почти всё интуитивно понятно, а если что, то можно документацию почитать, правда, через VPN. О том, что GDScript почти тоже самое, что и Python в документации на GDScript написано:
Скопировал код tanks.py на Gist
1
|
||||
|
0 / 0 / 0
Регистрация: 31.01.2018
Сообщений: 16
|
|
| 10.02.2023, 18:45 [ТС] | |
|
ОТВЕЧАЮ САМ ДЛЯ ДРУГИХ ИСКАТЕЛЕЙ
Еще пол дня копался и наконец нашел в чем дело! Каждый шаг танчик генерирует спрайт следов от гусениц, который в последующем с помощью Tween растворяется в течении 6 секунд и удаляется. Так вот как только я отключил генерацию следов - все просто начало летать, с оптимизацией другого кода и многопоточностью ПК стал показывать 70-75 фпс из 60 возможных.. Поэтому когда у танчика была маленькая скорость или он вообще не двигался фпс был гораздо выше - следов генерировалось гораздо меньше. Сейчас буду разбираться дело в том, что я использую Tween или в том что слишком много объектов..
0
|
|
| 10.02.2023, 18:45 | |
|
Помогаю со студенческими работами здесь
3
GODOT AudioStreamPlayer html5 Cocos2d-x или Godot Java в ядре Godot 2 d Godot масштабирование элементов Godot - звуки перемещения Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|