我最近开始学习Python3,我试图通过导入onload
来使用Python3制作游戏。我试着做一个菜单,我正在努力解决它。我只是试图让它看起来像一个按钮,当你将鼠标悬停在它上面时让矩形改变颜色,但它不起作用。我已经尝试了一些东西,但它不起作用。无论如何这里是完整的代码:hastebin link.
这是我尝试制作按钮的部分:
pygame
答案 0 :(得分:2)
这里的问题是你只在函数开始时进行一次鼠标悬停测试。如果鼠标稍后移动到您的矩形中,则无关紧要,因为您再也不会进行测试。
您要做的是将其移至事件循环中。 PyGame事件循环中的一个棘手问题是每个事件要运行一次的代码(内部for event in…
循环),并且每个批次只需要运行一次(外部while intro
循环)。在这里,我假设您希望每次活动都这样做一次。所以:
def game_intro():
intro = True
# ... other setup stuff
while intro:
for event in pygame.event.get():
if event.type == pygame.QUIT:
quit()
mouse = pygame.mouse.get_pos()
if 150+100 > mouse[0] > 150 and 430+50 > mouse[1] > 430:
pygame.draw.rect(gameDisplay, bright_green, (150,430,100,50))
else:
pygame.draw.rect(gameDisplay, green, (150, 430, 100, 50))
看起来你做的其他一些东西也只属于循环内部,所以你的游戏可能仍有一些问题。但这应该会让你超越你所困扰的障碍,并向你展示如何开始解决其他问题。
答案 1 :(得分:1)
这是一个符合您需求的按钮:
class Button(object):
global screen_width,screen_height,screen
def __init__(self,x,y,width,height,text_color,background_color,text):
self.rect=pygame.Rect(x,y,width,height)
self.x=x
self.y=y
self.width=width
self.height=height
self.text=text
self.text_color=text_color
self.background_color=background_color
def check(self):
return self.rect.collidepoint(pygame.mouse.get_pos())
def draw(self):
pygame.draw.rect(screen, self.background_color,(self.rect),0)
drawTextcenter(self.text,font,screen,self.x+self.width/2,self.y+self.height/2,self.text_color)
pygame.draw.rect(screen,self.text_color,self.rect,3)
使用绘图功能绘制按钮,并使用检查功能查看按钮是否被按下。
实现为主循环:
button=Button(x,y,width,height,text_color,background_color,text)
while not done:
for event in pygame.event.get():
if event.type==QUIT:
terminate()
elif event.type==pygame.MOUSEBUTTONDOWN:
if button.check():
#what to do when button is pressed
#fill screen with background
screen.fill(background)
button.draw()
pygame.display.flip()
clock.tick(fps)
答案 2 :(得分:1)
This is what i did and it works now:
def game_intro():
intro = True
while intro:
for event in pygame.event.get():
# print(event)
if event.type == pygame.QUIT:
pygame.quit()
quit()
gameDisplay.fill(white)
largeText = pygame.font.Font('freesansbold.ttf', 90)
TextSurf, TextRect = text_objects("Run Abush Run!", largeText)
TextRect.center = ((display_width / 2), (display_height / 2))
gameDisplay.blit(TextSurf, TextRect)
mouse = pygame.mouse.get_pos()
# print(mouse)
if 150 + 100 > mouse[0] > 150 and 450 + 50 > mouse[1] > 450:
pygame.draw.rect(gameDisplay, bright_green, (150, 450, 100, 50))
else:
pygame.draw.rect(gameDisplay, green, (150, 450, 100, 50))
pygame.draw.rect(gameDisplay, red, (550, 450, 100, 50))
pygame.display.update()
clock.tick(15)
Thank you for the help @abarnert