Делаю игру по книге Метиза (с которой, наверное, уже всех достали))
И вроде бы всё хорошо, но результат отображается с... не знаю... 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()