我正在使用 pygame 制作游戏,但遇到了一些问题。游戏经常无缘无故地变慢,所以我尝试使用 python 中内置的跟踪模块来跟踪它。然而,由于某种原因,当我用
正常执行它时,它工作得很好py main.py
但是当我这样做时
py -m trace --trace main.py
它给了我以下错误:
File "F:\Downloads\Tanks (2)\Tanks\Tanks\Scripts\render.py", line 13, in load_UI
play_online_button = pgGui.elements.UIButton(pg.Rect((362 * main.res_multiplier, 200 * main.res_multiplier), (300 * main.res_multiplier, 60 * main.res_multiplier)), "Speel Online", main.UI_manager)
AttributeError: module '__main__' has no attribute 'res_multiplier'
虽然,如下所示,属性 res_multiplier 显然是在 load_UI() 运行之前创建的。可能是因为我正在导入其他脚本?
以下是相关的代码段:
import Scripts.render as render
def start_game():
WIDTH = 1024
HEIGHT = 576
global res_multiplier
res_multiplier = WIDTH / 1024
#I skipped a bunch of stuff here
render.load_UI()
while running:
#main game loop
if __name__ == __main__:
start_game()
以及相关函数:
def load_UI():
global fullscreen
fullscreen = False
#Startmenu
global play_local_button, play_online_button, res_menu, quit_button
play_online_button = pgGui.elements.UIButton(pg.Rect((362 * main.res_multiplier, 200 * main.res_multiplier), (300 * main.res_multiplier, 60 * main.res_multiplier)), "Speel Online", main.UI_manager)
play_local_button = pgGui.elements.UIButton(pg.Rect((362 * main.res_multiplier, 290 * main.res_multiplier), (300 * main.res_multiplier, 60 * main.res_multiplier)), "Speel Lokaal", main.UI_manager)
res_menu = pgGui.elements.UIDropDownMenu(["1920x1080","1600x900","1366x768","1280x720", "1024x576"], "1024x576", pg.Rect((700 * main.res_multiplier, 20 * main.res_multiplier), (300 * main.res_multiplier, 30 * main.res_multiplier)), main.UI_manager)
quit_button = pgGui.elements.UIButton(pg.Rect((0 * main.res_multiplier, 0 * main.res_multiplier), (140 * main.res_multiplier, 40 * main.res_multiplier)), "Spel verlaten", main.UI_manager)
#Onlinemenu
global ip_text_entry, port_text_entry, connect_button, back_button, connect_error_text, client_port_text_entry
ip_text_entry = pgGui.elements.UITextEntryLine(pg.Rect((362 * main.res_multiplier, 200 * main.res_multiplier), (300 * main.res_multiplier, 20 * main.res_multiplier)), main.UI_manager)
ip_text_entry.set_text("127.0.0.1")
port_text_entry = pgGui.elements.UITextEntryLine(pg.Rect((362 * main.res_multiplier, 240 * main.res_multiplier), (300 * main.res_multiplier, 20 * main.res_multiplier)), main.UI_manager)
port_text_entry.set_text("1234")
client_port_text_entry = pgGui.elements.UITextEntryLine(pg.Rect((362 * main.res_multiplier, 280 * main.res_multiplier), (300 * main.res_multiplier, 20 * main.res_multiplier)), main.UI_manager)
client_port_text_entry.set_text("1235")
connect_button = pgGui.elements.UIButton(pg.Rect((362 * main.res_multiplier, 320 * main.res_multiplier), (300 * main.res_multiplier, 50 * main.res_multiplier)), "Verbinden & Spelen", main.UI_manager)
back_button = pgGui.elements.UIButton(pg.Rect((0 * main.res_multiplier, 0 * main.res_multiplier), (260 * main.res_multiplier, 40 * main.res_multiplier)), "Terug naar het startmenu", main.UI_manager)
connect_error_text = pgGui.elements.UITextBox("We kunnen geen verbinding maken met de server. Controleer of de server op het goede ip en poort is ingesteld en of je ze hier goed hebt ingevuld.", pg.Rect((690 * main.res_multiplier, 200 * main.res_multiplier), (300 * main.res_multiplier, 130 * main.res_multiplier)), main.UI_manager)
hide_list = [ip_text_entry, port_text_entry, connect_button, back_button, connect_error_text, client_port_text_entry]
for x in hide_list:
x.hide()
答案 0 :(得分:2)
您应该将 res_multiplier
作为参数传递:
#main
render.load_UI(res_multiplier)
#render
def load_UI(res_multiplier):
global fullscreen
fullscreen = False
#Startmenu
global play_local_button, play_online_button, res_menu, quit_button
play_online_button = pgGui.elements.UIButton(pg.Rect((362 * res_multiplier, 200 * res_multiplier), (300 * res_multiplier, 60 * res_multiplier)), "Speel Online", main.UI_manager)