Как переключаться между разными модулями(сценами) в Pygame?

Есть 3 файла:
- main.py - откуда вызывается mainMenu как главное меню
- mainMenu.py - откуда вызывается game при нажатии на кнопку "Play"
- game.py - откуда вызывается mainMenu при нажатии на кнопку выхода на главное меню

Хотелось бы сделать возможность возвращаться обратно на главный экран(mainMenu.py), например, при нажатии ESCAPE.
В результате получилось примерно так:

main.py:
import pygame
from pygame.locals import *

pygame.init()

screen = pygame.display.set_mode((1024, 576))
pygame.display.set_caption("game")
pygame.mouse.set_visible(False)
clock = pygame.time.Clock()

if __name__ == '__main__':
	from mainMenu import mainMenu
	mainMenu()

mainMenu.py:
import pygame
from pygame import QUIT
from button import Button
from game import game
from main import screen,clock
def mainMenu():
	bt = Button(разные аргументы)
	while 1:
		clock.tick(75)
		screen.fill((28, 21, 53))

		# ...

		for event in pygame.event.get():
			if event.type == pygame.MOUSEBUTTONDOWN:
				if bt.collision_mouse:
					game()
			if event.type == QUIT:
				exit()
		
        bt.render()
		
		pygame.display.update()

game.py:
import pygame
from pygame.locals import *
from main import screen,clock,cursor
from mainMenu import mainMenu
def game():
	while 1:
		clock.tick(60)
		screen.fill((51, 153, 218))

        # ...

		for event in pygame.event.get():
			if event.type == KEYDOWN:
				if event.key == K_ESCAPE:
					mainMenu()
			elif event.type == KEYUP:
				# ...
				pass
			if event.type == QUIT:
				exit()

        # ...
		pygame.display.update()

Все модули сильно сокращены чтобы показать главные проблемные места.

При попытке запустить игру появляются ошибки, связанные с круговым импортом(circular import).
Как можно решить данную проблему?
  • Вопрос задан
  • 334 просмотра
Решения вопроса 1
Fire_Fall
@Fire_Fall Автор вопроса
Решил проблему, переместив все импорты в сами функции, чтобы импорт происходил только когда мы вызываем сцену.
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

Войти через центр авторизации
Похожие вопросы
19 апр. 2024, в 03:01
1000 руб./за проект
18 апр. 2024, в 21:56
2000 руб./за проект
18 апр. 2024, в 21:00
150 руб./за проект