gpt4 book ai didi

python - 如何在 python/pygame 中制作按钮?

转载 作者:太空狗 更新时间:2023-10-29 22:13:54 48 4
gpt4 key购买 nike

我正在用 pygame 制作游戏,我希望在第一个屏幕上有按钮,您可以按这些按钮来 (i) 开始游戏,(ii) 加载带有说明的新屏幕,以及 (iii) 退出程序。

我在网上找到了这个制作按钮的代码,但我不是很懂(我不太擅长面向对象的编程)。如果我能得到一些关于它在做什么的解释,那就太好了。此外,当我使用它并尝试使用文件路径在我的计算机上打开文件时,我收到错误 sh: filepath :Permission denied,我不知道如何解决。

#load_image is used in most pygame programs for loading images
def load_image(name, colorkey=None):
fullname = os.path.join('data', name)
try:
image = pygame.image.load(fullname)
except pygame.error, message:
print 'Cannot load image:', fullname
raise SystemExit, message
image = image.convert()
if colorkey is not None:
if colorkey is -1:
colorkey = image.get_at((0,0))
image.set_colorkey(colorkey, RLEACCEL)
return image, image.get_rect()
class Button(pygame.sprite.Sprite):
"""Class used to create a button, use setCords to set
position of topleft corner. Method pressed() returns
a boolean and should be called inside the input loop."""
def __init__(self):
pygame.sprite.Sprite.__init__(self)
self.image, self.rect = load_image('button.png', -1)

def setCords(self,x,y):
self.rect.topleft = x,y

def pressed(self,mouse):
if mouse[0] > self.rect.topleft[0]:
if mouse[1] > self.rect.topleft[1]:
if mouse[0] < self.rect.bottomright[0]:
if mouse[1] < self.rect.bottomright[1]:
return True
else: return False
else: return False
else: return False
else: return False
def main():
button = Button() #Button class is created
button.setCords(200,200) #Button is displayed at 200,200
while 1:
for event in pygame.event.get():
if event.type == MOUSEBUTTONDOWN:
mouse = pygame.mouse.get_pos()
if button.pressed(mouse): #Button's pressed method is called
print ('button hit')
if __name__ == '__main__': main()

感谢任何能帮助我的人。

最佳答案

我没有适合您的代码示例,但我会怎么做:

  1. 创建一个 Button 类,将按钮上的文本作为构造函数参数
    1. 创建一个 PyGame 表面,可以是图像或填充的 Rect
    2. 使用 Pygame 中的 Font.Render 渲染文本
  2. Blit 到游戏屏幕,保存该区域。
  3. 在鼠标单击时检查 mouse.get_pos() 是否与通过按钮 blit 返回到主表面的矩形中的坐标相匹配。

这与您的示例所做的类似,尽管仍然不同。

关于python - 如何在 python/pygame 中制作按钮?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10168447/

48 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com