Задать вопрос
@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()
  • Вопрос задан
  • 1061 просмотр
Подписаться 1 Простой 5 комментариев
Решения вопроса 1
@Span4ev Автор вопроса
Разобрадся. Для тех, кто столкнётся с той же ситуацией, вот пояснение:

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

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

Похожие вопросы