我正在制作一个带有开始和帮助菜单以及其他功能的程序。 “主菜单”上的按钮可以正常工作,但是一旦进入“帮助”菜单,为屏幕导航编程的按钮将无法正常工作。请随时查看下面的代码。我不断收到错误消息,提示“未定义BackHelpRect”。 BackHelpRect是我在图像按钮周围绘制的矩形(对于所有其他按钮),以检测鼠标何时触摸它们。它适用于主菜单按钮,但是一旦进入帮助菜单,这些按钮的矩形就会“消失”。如果您有解决方案,请回复,我们将不胜感激。 :)
对不起,我已经附加了完整的代码,但是所有内容都在其他函数中调用,并且它们彼此之间都同步工作。抱歉,如果很长。
const pattern = /(\*\*)([^\*\*]*)(\*\*)/g;
let str = `* abc **
* **def****yo**
*`
const replacer = function(match, first, inner, last){
return "<b>"+inner+"</b>"
}
str = str.replace(pattern, replacer)
console.log(str)
谢谢。
答案 0 :(得分:0)
问题在于主循环在定义之前先引用BackHelpRect
。复制此代码很容易,只需在第一个屏幕上选择“后退”菜单选项即可。为了调试此问题,我在print( "BackHelp Defined HERE" )
函数中添加了BackHelp()
。并非总是事先调用它。
要解决此问题,也许您的代码可以在菜单处理开始之前立即定义所有这些Image和Rect。像这样:
def preloadButtons():
global HelpButton, HelpButtonRect
global BackHelpButton, BackHelpRect
# etc. etc.
HelpButton = pygame.image.load('button.jpg') # Open the custom button design.
HelpButton = pygame.transform.scale(HelpButton, (151, 51))
HelpButtonRect = HelpButton.get_rect()
HelpButtonRect.topleft = (335, 415)
BackHelpButton = pygame.image.load('button.jpg') # Open the custom button design.
BackHelpButton = pygame.transform.scale(BackHelpButton, (235, 84))
BackHelpButtonRect = BackHelpButton.get_rect()
BackHelpButtonRect.topleft = (45, 490)
将所有这些按钮存储为单独的全局变量并不是一个很好的设计,并且已经在整个程序的其余部分引起了绘图和事件测试的复杂性。最好将按钮的所有属性(图像,大小,位置,矩形)打包到数据结构中。不必一定是Python class
,只需将每个按钮的属性放到list
中就可以了,然后将所有这些列表放到一个all_buttons
列表中。
例如,在这里我们定义按钮属性列表,然后遍历这些属性以创建按钮名称/图像/矩形的更简单列表。
help_button = [ 'help', 'help_button.jpg', (151, 51), (335, 415) ]
back_help_button = [ 'back', 'back_button.jpg', (235, 84), ( 45, 490) ]
# ... TODO: rest of buttons
all_buttons_properties = [ help_button, back_help_button ]
# Initialise buttons
all_buttons = []
for butt in all_button_properties:
button_image = pygame.image.load( butt[1] ) # load
button_image = pygame.transform.scale( button_image, butt[2] ) # resize
button_rect = button_image.get_rect()
button_rect.topleft = butt[3] # move
all_buttons.append( butt[0], button_image, button_rect )
这为您提供了一个简单的all_buttons
列表列表[按钮名称,调整大小的按钮图像,预定位置的按钮矩形]。
也许您想要if
... elif
...用于这些按钮测试,而不是if
... if
...:
if event.type == pygame.MOUSEBUTTONDOWN:
if NextHelpRect.collidepoint(event.pos): # Button navigaton.
if MenuStatus == "Help menu 1":
MenuStatus = "Help menu 2"
Help()
if MenuStatus == "Help menu 2":
MenuStatus = "Help menu 3"
Help()
当MenuStatus
等于“帮助菜单1”时,会发生什么->它变成“帮助菜单2”,但是接下来的if
再次将此 更改为“帮助”菜单3”