python - PyGame 主菜单错误
问题描述
首先对我糟糕的英语感到抱歉。我想用pygame做一个乒乓球比赛。我做这些:单人模式,双人模式,主菜单和暂停菜单。我可以在玩游戏时进入暂停菜单,这里没有问题。我可以继续游戏,这里也没有问题。但我无法进入主菜单。当我单击主菜单按钮时,我进入双人模式。
如果声明:
if 462+225 > mouse[0] > 462 and 363+100 > mouse[1] > 363:
pygame.draw.rect(display,(250,250,250), (462,363,225,100))
mainmenutext=font.render("Main Menu", True, (0,0,0))
mainmenutextRect=mainmenutext.get_rect()
mainmenutextRect.center=(575, 410)
display.blit(mainmenutext, mainmenutextRect)
if click[0]==1
mainmenu()
我正在尝试使用此代码返回主菜单,但它不工作它是输入 doubleplayer() 函数,我找不到错误。
这是主菜单功能:
def mainmenu():
while menu:
for event in pygame.event.get():
#print(event)
if event.type==pygame.QUIT:
pygame.quit()
quit()
display.fill((0,0,0))
largefont=pygame.font.Font('data/BalooBhai-Regular.ttf',50)
maintext=largefont.render("Ping Pong", True, (255,255,255))
maintextRect=maintext.get_rect()
maintextRect.center=(400,200)
display.blit(maintext, maintextRect)
#Button
mainmenuoptionsfont=pygame.font.Font(None,30)
pygame.draw.rect(display, (255,255,255), (100,350,250,125))
pygame.draw.rect(display, (0,0,0), (112,363,225,100))
singletext=mainmenuoptionsfont.render("Single Player", True, (255,255,255))
singleRect=singletext.get_rect()
singleRect.center=(225,410)
display.blit(singletext, singleRect)
pygame.draw.rect(display,(255,255,255), (450,350,250,125))
pygame.draw.rect(display,(0,0,0), (462,363,225,100))
dobuletext=mainmenuoptionsfont.render("Double Player", True, (255,255,255))
doubletextRect=doubletext.get_rect()
doubletextRect.center=(575, 410)
display.blit(doubletext, doubletextRect)
mouse=pygame.mouse.get_pos()
#print(mouse)
click=pygame.mouse.get_pressed()
#print(click)
if 112+225 > mouse[0] > 112 and 363+100 > mouse[1] > 363: #on hover
pygame.draw.rect(display, (250,250,250), (100,350,250,125))
singletext=mainmenuoptionsfont.render("Single Player", True, (0,0,0))
singleRect=singletext.get_rect()
singleRect.center=(225,410)
display.blit(singletext, singleRect)
if click[0]==1: #if click
singleplayer()
if 462+225 > mouse[0] > 462 and 363+100 > mouse[1] > 363: #on hover
pygame.draw.rect(pencere,(250,250,250), (462,363,225,100))
doubletext=mainmenuoptionsfont.render("Double Player", True, (0,0,0))
doubletextRect=doubletext.get_rect()
doubletextRect.center=(575, 410)
display.blit(doubletext, doubletextRect)
if click[0]==1: #if click
doubleplayer()
pygame.display.update()
对不起,我的英语不好 :(
解决方案
我认为你处理这个有点不必要的复杂。我做菜单按钮的方式是这样的:
创建按钮文本,然后在其周围创建一个矩形(可见或不可见,无关紧要)。这是最简单的使用
self.button1 = pygame.Rect(x, y, w, w)
.Blit 屏幕上的按钮和文本。
然后在事件循环中检查事件点击,如下所示:
for event in pygame.event.get(): if event.type == pygame.MOUSEBUTTONDOWN: pos = pygame.mouse.get_pos() if self.button1.collidepoint(pos): print('Do what the button is supposed to do')
您还复制了很多代码。创建一个处理文本/按钮的函数,如下所示。“boxed”属性提供了一个选项,可以在文本周围创建一个可见的矩形。
def create_button(self, text, font, color, x, y, boxed):
text = font.render(text, True, color)
rect = text.get_rect()
rect.center = (x, y)
if boxed:
box = (rect[0] - PADDING, rect[1] - PADDING/2, rect[2] + PADDING*2, rect[3] + PADDING)
pygame.draw.rect(self.win, WHITE, box, int(PADDING/2))
self.win.blit(text, rect)
return rect
然后,您只需使用以下代码创建按钮:
self.button1 = self.create_button('Text 1', FONT, COLOR, X-COORDINATE, Y-COORDINATE, True)
self.button2 = self.create_button('Text 2', FONT, COLOR, X-COORDINATE, Y-COORDINATE, True)
推荐阅读
- spring-boot - spring data rest中如何实现基于字段的访问控制?
- python - Python Pandas 数据转换
- amazon-web-services - 如何将配置文件添加到 AWS 应用程序负载均衡器?
- javascript - 定位列表中的所有元素,但单击除外
- android - 如何让 Android 将应用数据存储在用户的 Google 帐户中,以便在新设备上安装时恢复
- python - 不和谐机器人上的 Heroku 的 MyAnimeList api 问题
- css - 部署后背景图像不起作用
- android - 浓缩咖啡,如何滚动到回收站视图的底部和空闲状态
- mysql - 使用 MySQL 从 IMDB 数据库查询
- c++ - 如何打印 std::vector<>::size_type?