Python 如何在Pygame中创建弹出式径向菜单?
我想知道是否有人能给我一些建议,告诉我如何创建一个径向菜单,当你点击游戏中的某个对象时,会自动弹出“攻击”、“交谈”等选项。。。有点像许多策略/RPG游戏中使用的放射状菜单等 我是Python/Pygame新手,所以请尽可能详细地解释 提前感谢,,Python 如何在Pygame中创建弹出式径向菜单?,python,menu,popup,pygame,radial,Python,Menu,Popup,Pygame,Radial,我想知道是否有人能给我一些建议,告诉我如何创建一个径向菜单,当你点击游戏中的某个对象时,会自动弹出“攻击”、“交谈”等选项。。。有点像许多策略/RPG游戏中使用的放射状菜单等 我是Python/Pygame新手,所以请尽可能详细地解释 提前感谢,, Ilmiont我最近在我正在编程的一个游戏中实际使用了它。 因此,您通常需要检查精灵/对象的单击 #example def make_popup(self): popupSurf = pygame.Surface(width, height)
Ilmiont我最近在我正在编程的一个游戏中实际使用了它。 因此,您通常需要检查精灵/对象的单击
#example
def make_popup(self):
popupSurf = pygame.Surface(width, height)
options = ['Attack',
'Talk']
for i in range(len(options)):
textSurf = BASICFONT.render(options[i], 1, BLUE)
textRect = textSurf.get_rect()
textRect.top = self.top
textRect.left = self.left
self.top += pygame.font.Font.get_linesize(BASICFONT)
popupSurf.blit(textSurf, textRect)
popupRect = popupSurf.get_rect()
popupRect.centerx = SCREENWIDTH/2
popupRect.centery = SCREENHEIGHT/2
DISPLAYSURFACE.blit(popupSurf, popupRect)
pygame.display.update()
好,现在来解释一下这一切,以及它是如何运作的
带有popupSurf=pygame.Surface的线创建popupSurf作为绘制对象的曲面
选项是不言自明的。然后我们有一个for循环,它将接受所有选项并单独显示每个选项。接下来是textSurf=BASICFONT。。。BASICFONT是您在一开始创建的字体,我个人最喜欢使用SysFont,因为它很容易与py2exe一起使用
然后是textRect,它创建了一个rect,用于在屏幕上快速显示文本。然后将顶部坐标更改为当前顶部坐标。然后在左边做同样的动作。但是,下一行“self.top+=…”将针对之前在屏幕上显示的文本进行调整,这样您就不会以文本对文本的方式结束。
然后你就把它放到popupSurf
在每个选项被blit到popupSurf后,您需要将popupSurf blit到主曲面,该主曲面是使用程序开头的“pygame.display.set_mode”创建的。根据您提供的所有信息,假设您希望弹出窗口显示在屏幕中央,因此我将centerx和centery放在屏幕中央。然后,剩下要做的就是将其显示在屏幕上并更新显示。如果您不完全理解,请发表评论。要做到这一点,只需在
循环时不断检查鼠标的位置,然后检查鼠标是否被单击。单击鼠标后,检查选择的选项,如果选项为None
,则退出弹出菜单
#example
def doPopup(self):
#popup loop
while True:
#draw the popup
make_popup(self)
#check for keyboard or mouse events
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
elif event.type == MOUSEMOTION:
#update mouse position
self.mousex, self.mousey = event.pos
#check for left click
elif event.type == MOUSEBUTTONDOWN and event.button == 1:
OPTION = option_selected(self)
if OPTION != None:
return OPTION'
else:
return None
FPSCLOCK.tick(FPS)
def option_selected(self):
popupSurf = pygame.Surface(width, height)
options = ['Attack',
'Talk']
#draw up the surf, but don't blit it to the screen
for i in range(len(options)):
textSurf = BASICFONT.render(options[i], 1, BLUE)
textRect = textSurf.get_rect()
textRect.top = self.top
textRect.left = self.left
self.top += pygame.font.Font.get_linesize(BASICFONT)
popupSurf.blit(textSurf, textRect)
if textSurf.collidepoint(self.mousex, self.mousey):
return options[i]
popupRect = popupSurf.get_rect()
popupRect.centerx = SCREENWIDTH/2
popupRect.centery = SCREENHEIGHT/2
在Pygame中,没有制作GUI和任何菜单的功能,因此您必须自己完成所有事情-绘制菜单、捕捉鼠标单击等。可能一些外部库(如)可以帮助您,但我不确定。非常感谢,但是您如何检测何时关闭弹出窗口。。。i、 e.当您单击窗口上的其他位置时?