Задать вопрос
@Span4ev

Почему игра на pygame тормозит?

Делаю игру по книге Метиза (с которой, наверное, уже всех достали))
И вроде бы всё хорошо, но результат отображается с... не знаю... 10 фпс? Пять? Два?
Вот и интересно, дело в питоне или во мне? Может я код как-то не так с книги переписал, который, тем не менее, работает? Дело в цикле? Может драйвера на видюху нужно свежие поставить ))
может дело в 4770к, 1070, 16RAM и нужно выкинуть это на помойку и купить что-то посерьёзней?
Но если серьёзно, то это так работает питон + пайгейм с простой анимацией? Если так, то это печально и уже нет смысла учить пайтон и брать для мотивации игры.
Или я всё же цикл как-то криво переписал? Ну переписал бы криво - не работал бы, вероятно. Может ли быть, что какая-то скобка не в том месте (как пример) так влиять? Отсебятины я не добавлял, я не знаю ни пайтон, ни пайгейм на таком уровне, чтобы в импровизацию в таких вещах.

Вот видео, как это выглядит.
https://youtu.be/EK6q-e2Bh3k
Запись экрана ни коим образом не повлияла на кол-во фпс.
Сам Метиз не балуется модными штуками, вроде:

fpsClock = pg.time.Clock()
fpsClock.tick(360)


Но я попробовал - особо не повлияло. Разве что если установить fpsClock.tick(60000) - то чуть чуть пободрее будет. +- 3 фпс

Весь код я кидать не стал - много кода. Да и думаю, тут уже каждый знаток наизусть знает эту игру по книге из-за бесчисленных вопросов таких людей, как я.
Но есть надо, скину, что попросите.

До этого всё "летало" и без fpsClock = pg.time.Clock(). Очевидно, что цикл так нагружает. Но я просто не знаю, может оно так и должно быть, поэтому спрашиваю у вас.

Проблема была в основном цикле. Если кратко, то было так:

def start():

	pg.init()
	settings = Settings()
	screen = pg.display.set_mode((settings.screen_width, settings.screen_height))
	pg.display.set_caption('Space Inv version 2')
	ship = Ship(settings, screen)
	bullets = Group() 
	aliens = Group() 
	
	while True:
		
		engine.check_events(settings, screen, ship, bullets)
		ship.update_ship_pos()
		engine.update_bullets(bullets)
		# Вызываю метод создания армии пришельцев постоянно
		engine.create_aliens_army(settings, screen, ship, aliens)
		engine.update_screen(settings, screen, ship, aliens, bullets)

start()


А надо так:

def start():

	pg.init()
	settings = Settings()
	screen = pg.display.set_mode((settings.screen_width, settings.screen_height))
	pg.display.set_caption('Space Inv version 2')
	ship = Ship(settings, screen)
	bullets = Group() 
	aliens = Group()
	# Метод создания армии пришельцев нужно вызывать только один раз
	engine.create_aliens_army(settings, screen, ship, aliens)
	
	while True:
		
		engine.check_events(settings, screen, ship, bullets)
		ship.update_ship_pos()
		engine.update_bullets(bullets)
		engine.update_screen(settings, screen, ship, aliens, bullets)

start()
  • Вопрос задан
  • 1275 просмотров
Подписаться 1 Простой 5 комментариев
Помогут разобраться в теме Все курсы
  • Нетология
    Python-разработчик: расширенный курс + нейросети
    12 месяцев
    Далее
  • Яндекс Практикум
    Python-разработчик
    10 месяцев
    Далее
  • Skillbox
    Профессия Python-разработчик + ИИ
    10 месяцев
    Далее
Решения вопроса 1
@Span4ev Автор вопроса
Разобрадся. Для тех, кто столкнётся с той же ситуацией, вот пояснение:

Медленный здесь только я, потому что функцию создания пришельцев
engine.create_aliens_army(settings, screen, ship, aliens) я запускал в основном цикле While, из-за чего все остальные циклы выполнялись каждую наносекунду. Я перенёс вызов создания армии из основного цикла и всё стало хорошо.
Следите за тем, где вы вызываете методы.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
ITK academy Краснодар
от 220 000 до 300 000 ₽
ITK academy Краснодар
от 75 000 ₽
DimaTech Ltd Краснодар
от 140 000 до 140 000 ₽