Форум программистов, компьютерный форум, киберфорум
Python: PyGame
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.95/40: Рейтинг темы: голосов - 40, средняя оценка - 4.95
11 / 11 / 2
Регистрация: 13.07.2014
Сообщений: 420

Pygame. Маленький FPS

07.06.2018, 21:21. Показов 8381. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Добрый вечер. Немного практикую сабж.

В общем делаю примитивную недоигру.

Танк имеется. Едет вперёд (строго вперёд) по дороге асфальтовой, она представляет собой текстуру 200 килобайт png. И таких список из 4 стоящих в ряд, типа тайлов, иллюзия одной длинной дороги. Когда нижняя заходит за границу экрана, она переносится на самый вверх и так по кругу. Вот и бесконечная дорога готова.

Тут и проблем нет.
Проблемы начинаются с другой текстурой. Травой. Она около мегабайта размером, jpg. Их я 6 использую для полного заполнения экрана (с запасом) и так же перекидываю их снизу вверх для имитации бесконечности.

ТАК ВОТ, когда я убираю эту текстуру травы из рендера, ФПС 60 равен. Но когда на экране фигурирует эта текстура травы, ФПС падает до 13-20! Что для меня шок, ведь я делаю примитивную игру, а не Крайзис. Тем более с моими i5 3550, 16г ОЗУ и RX480 как никак.

Думал, что дело в формате (jpg), но менял я на png, увы.

Краем глаза видел про некую функцию convert(), которая убирает альфу и ФПС вырастает в разы. Но пока не получилось использовать её.
Пока делаю так (я новичёк в Питоне, и в Пайгейме).
global Map
Конструктор:
self.Map = [pygame.image.load(os.path.join('D:\Tanki ', 'grass.png'))] * 6 # Создаю куски карты.
Map_coordinat = [а тут всякие значение для всех этих кусков общей карта травы]

А вот уже игровой цикл:
Python
1
2
3
self.Window.fill((0,0,0))
for i in range(6):
     self.Window.blit(self.Map[i], (self.Map_coordinat[i][0],self.Map_coordinat[i][1]))

Остальное не стал показывать, основное лишь показать, остальное не суть важно я думаю.

Заодно прикладываю скрины текстуры этой травы и в целом скрин из этой "недоигры".

Так что я не так делаю? Загрузку текстур я делаю не в игровом цикле...

Хотя бы скажите пожалуйста, дело не в самом языке Python? Реально на нём хотя бы 2D игры делать с хорошим FPS?
Миниатюры
Pygame. Маленький FPS   Pygame. Маленький FPS  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
07.06.2018, 21:21
Ответы с готовыми решениями:

При импорте pygame пишет что нет модуля pygame.base
Устанавливаю для kivy.Всё есть (sython,gsstreamer,kivy,pyscripter,python) , а вот фраем. pygame не работает.Почему?Что ещё надо для работы...

Ошибка в pygame AttributeError: 'pygame.Rect' object has no attribute 'blit'
Создаю игру, крестики нолики Почему возникает ошибка и как ее исправить? AttributeError: 'pygame.Rect' object has no attribute 'blit' ...

Pygame ошибка module ‘pygame’ has no ‘init’ member
Всем здравствуйте. Недавно начал работать с VS code и выдает такая ошибка. Прикрепляю полностью скрин. Нашел решение перед каждой...

8
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
07.06.2018, 23:24
Используйте convert

Python
1
image = pygame.image.load("grass.png").convert()
На встроенной видеокарте intel поднимает fps с 25 до 300
1
11 / 11 / 2
Регистрация: 13.07.2014
Сообщений: 420
07.06.2018, 23:59  [ТС]
Цитата Сообщение от ТабуретY Посмотреть сообщение
Используйте convert
Спасибо, вот тоже обратил на это внимание. Но дело в том, что когда я пробую так делать, появляется ошибка: pygame.error: No video mode has been set, хотя без этого вызова converta всё включается и работает.
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
08.06.2018, 00:43
Цитата Сообщение от Masai Посмотреть сообщение
появляется ошибка: pygame.error: No video mode has been set
так установите video mode

Python
1
screen = pygame.display.set_mode((800, 600))
1
11 / 11 / 2
Регистрация: 13.07.2014
Сообщений: 420
08.06.2018, 01:51  [ТС]
Цитата Сообщение от ТабуретY Посмотреть сообщение
так установите video mode
Спасибо, заработало!

Я в принципе делал это self.Window = pygame.display.set_mode([1920, 1080])
Но почему-то это не помогало от той ошибки. И я сделал отдельно просто строку pygame.display.set_mode((800,600)).

Если не затруднит, не скажите, в чём там всё таки фишка с этим convert? По этой теме материала мало, загуглить не так и просто, а хочется осознать в чём дело. Почему с альфой этой такие просадки. Как я понимаю дело не в самом языке, язык не такой уж и тормознутый
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
08.06.2018, 04:18
Лучший ответ Сообщение было отмечено Masai как решение

Решение

Для отрисовки pygame использует surface, это структура которая содержит список пикселей, вот эта команда
Python
1
pygame.display.set_mode((800,600))
Создает список пикселей окна и при отрисовке окна информация о цвете пикселя берется из этого списка, команда
Python
1
pygame.image.load("grass.png")
Создает surface со списком пикселей изображения, а команда blit, переносит этот список в основной surface, но есть проблема, при чтении файла пиксели будут записаны так как они записаны в файле, а при команде blit сначала список пикселей из файла приводится к формату списка пикселей в основном surface, а затем записываются в основной surface и при этом, естественно, сильно падает fps. Команда convert переводит список пикселей в формат списка пикселей основного surface при загрузке и это позволяет быстро сделать blit.
1
11 / 11 / 2
Регистрация: 13.07.2014
Сообщений: 420
08.06.2018, 11:53  [ТС]
Ещё раз огромное спасибо, ТабуретY!
Приятно увидеть того кто в ПайГейме разбирается.

У меня правда ещё вопрос был по поводу Rotation (башню на танке поворачивать). В sfml я это делал вознёй с origin, а потом поворачивал.
А в Пайгейме как-то иначе это делается. pygame.transform.rotate поворачивает объект не по своей оси, ещё и коверкает изображение.
Мне новую тему создать для этого вопроса?
0
1741 / 913 / 480
Регистрация: 05.12.2013
Сообщений: 3,074
08.06.2018, 11:59
Цитата Сообщение от Masai Посмотреть сообщение
Мне новую тему создать для этого вопроса?
Лучше новую тему
0
9 / 9 / 3
Регистрация: 05.01.2016
Сообщений: 17
11.06.2018, 17:46
Примеры приличных игр смотри на pyweek.org
От 2d, до псевдо-3д и 3д. Хотя конёк питона это, конечно же, 2д.
Из названий добротно написаных , по памяти, помню Sky Eraser. Дома собрал для себя список качественно написаных игр, если надо, могу попозже скинуть.
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
11.06.2018, 17:46
Помогаю со студенческими работами здесь

pygame.error: cannot convert without pygame.display initialized
Только начал изучать спрайты Выдаёт ошибку: Traceback (most recent call last): File "D:/project1/OCode.py", line 18, in...

В играх маленький FPS
Системные параметры:Nvidia GeForce 9800GT(1GB), Pentium(R) Dual-Core E5400 2.70GHz , ОЗУ:2GB , Windows 7(32-x) Тестировал в 3Dmark 06 ...

Маленький fps в играх с DirectX11
Здраствуйте. Появилась проблема. В играх(Пример: dota 2, TES skyrim, Escape From Tarkov, Astroneer и т.д) где используется DirectX11...

Скачет загрузка GPU и маленький FPS
Всем привет. Столкнулся с такой проблемой кто знает прошу подскажите. Название видеокарты Sapphire rx 480 8 gb nitro +oc, блок питания...

Игра в окне MMORPG-онлайн, fps порой маленький
Играя в оконном режиме в MMORPG-онлайн, переключаюсь на рабочий стол или браузер, потом снова на игру. Замечаю порой не плавность картинки,...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
модель ЗдравоСохранения 5. Меньше увольнений- больше дохода!
anaschu 24.03.2026
Теперь система здравосохранения уменьшает количество увольнений. 9TO2GP2bpX4 a42b81fb172ffc12ca589c7898261ccb/ https:/ / rutube. ru/ video/ a42b81fb172ffc12ca589c7898261ccb/ Слева синяя линия -. . .
Midnight Chicago Blues
kumehtar 24.03.2026
Такой Midnight Chicago Blues, знаешь?. . Когда вечерние улицы становятся ночными, а ты не можешь уснуть. Ты идёшь в любимый старый бар, и бармен наливает тебе виски. Ты смотришь на пролетающие. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru