Форум программистов, компьютерный форум, киберфорум
Игровые движки
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.78/9: Рейтинг темы: голосов - 9, средняя оценка - 4.78
0 / 0 / 0
Регистрация: 31.01.2018
Сообщений: 16

Godot Оптимизация 2D

10.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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.02.2023, 10:05
Ответы с готовыми решениями:

Типы оптимизация: черная оптимизация, серая оптимизация и белая оптимизация
Много много лет назад, на заре становления профессии "оптимизатора" в какой то умной книжке был создан миф. Это миф о цветовой индефикации...

Godot AcceptWindow
Всем доброго дня, разрабатываю приложение на Годоте, нужно реализовать запрос подтверждения действия через системное всплывающее окно. ...

Godot. Движение игрока
Добрый вечер всем. Пытаюсь сейчас делать движение персонажа. Передвижение вправо срабатывает как надо, а вот если делаю ровно то же самое...

2
9036 / 2937 / 493
Регистрация: 05.10.2013
Сообщений: 7,960
Записей в блоге: 216
10.02.2023, 14:42
Где-то когда-то я нашёл этот клон танчиков на PyGame. Почти всё реализовано точно также как в оригинальной игре. Здесь все исходники в одном файле tanks.py - 2100 строк кода. Если вы Python никогда не изучали, то ничего страшного, потому что GDScript - это почти тоже самое, что и Python, а в PyGame почти всё интуитивно понятно, а если что, то можно документацию почитать, правда, через VPN. О том, что GDScript почти тоже самое, что и Python в документации на GDScript написано:

GDScript is a high-level, dynamically typed programming language used to create content. It uses a syntax similar to Python (blocks are indent-based and many keywords are similar). Its goal is to be optimized for and tightly integrated with Godot Engine, allowing great flexibility for content creation and integration.
Translate Google:

GDScript — это высокоуровневый язык программирования с динамической типизацией, используемый для создания контента. Он использует синтаксис, аналогичный Python (блоки основаны на отступах и многие ключевые слова похожи). Его цель состоит в том, чтобы быть оптимизированным и тесно интегрированным с Godot Engine, что обеспечивает большую гибкость для создания и интеграции контента.
Я вам очень советую поиграть в эту демку. Для её запуска нужно скачать и установить интерпретатор Python: https://www.python.org/downloads/ и установить PyGame, скачав Release: https://github.com/pygame/pygame/releases и установить командой:

pip install pygame-2.1.2-cp38-cp38-win_amd64.whl
Потом зайти в директорию проекта и кликнуть два раза по скрипту tansk.py. Прикрепил архив с проектом.

Скопировал код tanks.py на Gist
Вложения
Тип файла: zip battle-city-tanks-pygame.zip (132.3 Кб, 2 просмотров)
1
0 / 0 / 0
Регистрация: 31.01.2018
Сообщений: 16
10.02.2023, 18:45  [ТС]
ОТВЕЧАЮ САМ ДЛЯ ДРУГИХ ИСКАТЕЛЕЙ

Еще пол дня копался и наконец нашел в чем дело!

Каждый шаг танчик генерирует спрайт следов от гусениц, который в последующем с помощью Tween растворяется в течении 6 секунд и удаляется. Так вот как только я отключил генерацию следов - все просто начало летать, с оптимизацией другого кода и многопоточностью ПК стал показывать 70-75 фпс из 60 возможных..

Поэтому когда у танчика была маленькая скорость или он вообще не двигался фпс был гораздо выше - следов генерировалось гораздо меньше.

Сейчас буду разбираться дело в том, что я использую Tween или в том что слишком много объектов..
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.02.2023, 18:45
Помогаю со студенческими работами здесь

GODOT AudioStreamPlayer html5
Добрый день! Возникла проблема с проигрыванием звука в экспортированном экземпляре игры. Звук проигрывается с помощью ноды...

Cocos2d-x или Godot
Не могу определиться с игровым движком. Сначала cocos заинтересовал но у меня с ним много вопросов, а godot вроде проще во многом но не...

Java в ядре Godot 2 d
Пожалуйста напишите код для предмета который всегда будет телепортировать игрока в 1 точку при прикосновении в 2D пространстве.

Godot масштабирование элементов
Добрый день! Создаю андроид приложение в Godot с вертикальной ориентацией. В приложении используются только ноды типа Control. ...

Godot - звуки перемещения
Доброго времени суток всем участникам форума! Хочу узнать ваше мнение. Во время разработки игры на Godot Engine, жанра платформер,...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Новые блоги и статьи
Новый ноутбук
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
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru