加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Python > 正文

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

发布时间:2020-12-16 23:15:40 所属栏目:Python 来源:网络整理
导读:我正在pygame制作一个游戏,在第一个屏幕上我希望有按钮可以按下(i)启动游戏,(ii)加载带有说明的新屏幕,以及(iii)退出程序. 我已经在网上找到了这个用于按钮制作的代码,但我并不是真的理解它(我在面向对象编程方面并不擅长).如果我能得到一些关于它正在做什么
我正在pygame制作一个游戏,在第一个屏幕上我希望有按钮可以按下(i)启动游戏,(ii)加载带有说明的新屏幕,以及(iii)退出程序.

我已经在网上找到了这个用于按钮制作的代码,但我并不是真的理解它(我在面向对象编程方面并不擅长).如果我能得到一些关于它正在做什么的解释那将是伟大的.此外,当我使用它并尝试使用文件路径在我的计算机上打开文件时,我得到错误sh:filepath:权限被拒绝,我不知道如何解决.

#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()

感谢能帮助我的人.

解决方法

我没有你的代码示例,但我将如何做到:

>创建一个Button类,将文本作为构造函数参数放在按钮上

>创建一个PyGame表面,可以是图像,也可以是填充的Rect
>使用Pygame中的Font.Render填充文本

> Blit到游戏屏幕,保存那个rect.
>单击鼠标,检查mouse.get_pos()是否与矩形中的坐标相匹配,该坐标由按钮的blit返回到主曲面.

这与你的例子正在做的类似,尽管仍然不同.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读