m0_48537856 2020-09-24 15:49 采纳率: 0%
浏览 369

想用pygame做一个简单的文字游戏,在做游戏按钮的时候遇到了一个很麻烦的问题,按钮不灵!求大佬指点!

主要应该是做按钮时鼠标位置监测的问题,我一共做了四个按钮,每个对应一个窗口,四个按钮鼠标位置监测部分的代码都是一样的,因为我想让按钮每次出现时在游戏画面上的位置一样,但测试时点击总会莫名其妙地跳过甚至直接结束。。。
代码如下

import pygame
pygame.init()
ck = pygame.display.set_mode((800,600))   #  游戏窗口
pygame.display.set_caption("我的游戏")    #  给窗口取个名 
clock = pygame.time.Clock()                         #  游戏刷新速度(我这么理解)
start_ck = pygame.Surface(ck.get_size())    #   开始界面的画布
start_ck.fill((0,0,0))  # 白色画布1(开始界面用的)
white=255,255,255  #定义一下颜色

#加载素材。jixu就是'continue',继续,是我用格式为png的艺术字图片充当的游戏界面上的按钮,jixu到jixu1c分别是白、蓝、绿、黄色,而jixu2是红色的,想做出的效果是鼠标移动到字上面时会变成红色
jixu1= pygame.image.load(r'F:\python 练习\jixu1.png')
jixu1.convert()
jixu1a= pygame.image.load(r'F:\python 练习\jixu1a.png')
jixu1a.convert()
jixu1b=pygame.image.load(r'F:\python 练习\jixu1b.png')
jixu1b.convert()
jixu1c=pygame.image.load(r'F:\python 练习\jixu1c.png')
jixu1c.convert()
jixu2=pygame.image.load(r'F:\python 练习\jixu2.png')
jixu2.convert()




#接下来我想做四个游戏窗口,每一个窗口上都会有一个continue,我想做出的效果是鼠标移动上去会变红色,点击就会跳转到下一个窗口,四个事件用n1到n4标明
#第一个窗口(白色按钮),没有问题,移动上去会变色,点击也会跳转
n1 = True
while n1:
    #鼠标检测程序
    clock.tick(30)
    buttons = pygame.mouse.get_pressed()
    x1, y1 = pygame.mouse.get_pos()
    if x1 >= 227 and x1 <= 555 and y1 >= 501 and y1 <=567:
        start_ck.blit(jixu2, (260, 480))
        if buttons[0]:
            n1 = False
    else:
        start_ck.blit(jixu1, (260, 480))            
    ck.blit(start_ck,(0,0))
    pygame.display.update()
    #这里在窗口上写一个标记
    myfont=pygame.font.SysFont("SimHei",20)#这里如果只用Font的话中文会显示不出来
    textImage=myfont.render("第一窗口",True,white)
    start_ck.blit(textImage,(600,560))
    # 下面是监听退出动作
    # 监听事件
    for event in pygame.event.get():
        # 判断事件类型是否是退出事件
        if event.type == pygame.QUIT:
            print("游戏退出...")
            # quit 卸载所有的模块
            pygame.quit()
            # exit() 直接终止当前正在执行的程序
            exit()



#第二个窗口(蓝色按钮),问题来了,点击完第一个窗口以后,第二个窗口永远出不来,大部分情况下是直接跳到第三个或者第四个窗口,再点就程序结束,有时候中间的窗口会闪一下就过去,还有几次是第一次点完就直接结束程序了,一直解决不了。。我在想这是不是鼠标位置的问题…………
n2 = True
while n2:
    #鼠标监测程序
    clock.tick(30)
    buttons = pygame.mouse.get_pressed()
    x1, y1 = pygame.mouse.get_pos()
    if x1 >= 227 and x1 <= 555 and y1 >= 501 and y1 <=567:
        start_ck.blit(jixu2, (260, 480))
        if buttons[0]:
            n2 = False
    else:
        start_ck.blit(jixu1a, (260, 480))            
    ck.blit(start_ck,(0,0))
    pygame.display.update()
    #这里在窗口上写一个标记
    myfont=pygame.font.SysFont("SimHei",20)#这里如果只用Font的话中文会显示不出来
    textImage=myfont.render("第二窗口",True,white)
    start_ck.blit(textImage,(600,560))    
    # 下面是监听退出动作
    # 监听事件
    for event in pygame.event.get():
        # 判断事件类型是否是退出事件
        if event.type == pygame.QUIT:
            print("游戏退出...")
            # quit 卸载所有的模块
            pygame.quit()
            # exit() 直接终止当前正在执行的程序
            exit()





#第三个窗口(绿色按钮)
n3 = True
while n3:
    #鼠标监测程序
    clock.tick(30)
    buttons = pygame.mouse.get_pressed()
    x1, y1 = pygame.mouse.get_pos()
    if x1 >= 227 and x1 <= 555 and y1 >= 501 and y1 <=567:
        start_ck.blit(jixu2, (260, 480))
        if buttons[0]:
            n3 = False
    else:
        start_ck.blit(jixu1b, (260, 480))            
    ck.blit(start_ck,(0,0))
    pygame.display.update()
    #这里在窗口上写一个标记
    myfont=pygame.font.SysFont("SimHei",20)#这里如果只用Font的话中文会显示不出来
    textImage=myfont.render("第三窗口",True,white)
    start_ck.blit(textImage,(600,560))
    # 下面是监听退出动作
    # 监听事件
    for event in pygame.event.get():
        # 判断事件类型是否是退出事件
        if event.type == pygame.QUIT:
            print("游戏退出...")
            # quit 卸载所有的模块
            pygame.quit()
            # exit() 直接终止当前正在执行的程序
            exit()




#第四个窗口,黄色按钮
n4 = True
while n4:
    #鼠标监测程序
    clock.tick(30)
    buttons = pygame.mouse.get_pressed()
    x1, y1 = pygame.mouse.get_pos()
    if x1 >= 227 and x1 <= 555 and y1 >= 501 and y1 <=567:
        start_ck.blit(jixu2, (260, 480))
        if buttons[0]:
            n4 = False
    else:
        start_ck.blit(jixu1c, (260, 480))            
    ck.blit(start_ck,(0,0))
    pygame.display.update()
    #这里在窗口上写一个标记
    myfont=pygame.font.SysFont("SimHei",20)#这里如果只用Font的话中文会显示不出来
    textImage=myfont.render("第四窗口",True,white)
    start_ck.blit(textImage,(600,560))
    # 下面是监听退出动作
    # 监听事件
    for event in pygame.event.get():
        # 判断事件类型是否是退出事件
        if event.type == pygame.QUIT:
            print("游戏退出...")
            # quit 卸载所有的模块
            pygame.quit()
            # exit() 直接终止当前正在执行的程序
            exit()                                
  • 写回答

1条回答 默认 最新

  • threenewbee 2020-09-24 19:35
    关注

    你把界面放大,看看问题是否缓解,感觉和鼠标坐标定位有关,因为延迟的关系,导致鼠标指针移动和用户操作不同步,所以没有点在你的区域内

    评论

报告相同问题?

悬赏问题

  • ¥15 程序不包含适用于入口点的静态Main方法
  • ¥15 素材场景中光线烘焙后灯光失效
  • ¥15 请教一下各位,为什么我这个没有实现模拟点击
  • ¥15 执行 virtuoso 命令后,界面没有,cadence 启动不起来
  • ¥50 comfyui下连接animatediff节点生成视频质量非常差的原因
  • ¥20 有关区间dp的问题求解
  • ¥15 多电路系统共用电源的串扰问题
  • ¥15 slam rangenet++配置
  • ¥15 有没有研究水声通信方面的帮我改俩matlab代码
  • ¥15 ubuntu子系统密码忘记