#python
#python
Вопрос:
Обычно я бы создал функцию или оператор if, например:
def home_screen():
# code
if condition:
game()
def game():
# code
home_screen()
или что-то вроде:
game = 1
if game == 1:
# code for home screen
if condition:
game = 2
if game == 2:
# code for game
if game == 3:
# so on
Для последнего нужна глобальная переменная с классом, что для меня нормально. Однако в Ursina ни одна из них не работает, либо функция обновления останавливается на первом, либо color.red, color.blue и т. Д. Перестают работать из ниоткуда, либо второй оператор if просто не выполняется. У кого-нибудь есть альтернатива? Я подумываю о том, чтобы просто создать home_screen.py файл полностью, но это не принесет большой пользы, и я все равно не уверен, как это можно реализовать.
Редактировать: циклы while также, похоже, не работают
Ответ №1:
Создать функциональное игровое меню на самом деле не так просто.
Вы могли бы создать функцию, которая загружает все игровые модели с уровня, функцию, которая показывает меню, и последнюю, которая показывает экран загрузки.
Загрузить уровень :
def loadLevel():
global loading_screen
ground = Entity(model='quad', scale=10, y=-2, collider='box') # dummy entities
player = FirstPersonController()
player_model = Entity(model='player', parent=player)
building = Entity(model='building', collider='box')
destroy(loading_screen) # delete the loading screen when finished
Показать меню :
def showMenu():
play = Button('Play', on_click=showLoadingScreen) # A play button that show the loading menu when clicked
Показать экран загрузки :
from direct.stdpy import thread # we need threading to load entities in the background (this is specific to ursina, standard threading wouldn't work)
def showLoadingScreen():
global screen
screen = Entity(model='quad', texture='loading_image')
thread.start_new_thread(function=loadLevel, args='') # load entities in the background
Остальная часть файла :
from ursina import *
if __name__ == '__main__':
app = Ursina()
screen = None # for global statement
showMenu()
app.run()
Редактировать : базовый пример доступен здесь.