鱼C论坛

 找回密码
 立即注册
查看: 2423|回复: 3

[已解决]pygame

[复制链接]
发表于 2023-8-3 21:26:21 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
import sys
import pygame
import random

class Bird(object):
    '''定义一个鸟类'''
    def __init__(self):
        pass

    def bridupdate(self):
        pass

class Guandao(object):
    '''定义一个管道类'''
    def __init__(self):
        '''定义初始化方法'''
        pass

    def updateGuandao(self):
        '''水平移动'''
        pass

def Ditubeijing():
    '''定义创建地图的方法'''
    screen.fill((255, 255, 255))                                # 填充颜色
    screen.blit(background, (0, 0))                             # 填入到背景
    pygame.display.update()                                     # 更新显示

if __name__ == '__main__':
    '''主程序'''
    pygame.init()                                               # 初始化 pygame
    size   = width, height = 400, 720                           # 设置窗口大小
    screnn = pygame.display.set_mode(size)                      # 显示窗口
    clock  = pygame.time.Clock()                                # 设置时钟
    Gguandao = Guandao()                                        # 实例化管道
    Bird = Bird()                                               # 实例化鸟
    # 执行死循环,确保窗口一直显示
    while True:
        clock.tick(60)
        # 轮询事件
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()

        background = pygame.image.load('女孩.jpg')
        createMap()

如上,为啥窗口闪了一下,就消失了啊
最佳答案
2023-8-3 21:26:47
问题分析:

根据你提供的代码,我注意到一些可能导致窗口闪烁并立即关闭的问题:

1. 在主程序的第17行,你使用screen作为显示窗口的变量名,但是在后面的代码中却使用了screnn这个拼写错误的变量名。这将导致显示窗口无法正常创建,从而导致窗口闪烁并立即关闭。

2. 在主程序的第35行,你调用了一个名为createMap()的函数,但是在之前的代码中并没有定义这个函数。如果该函数涉及到创建游戏地图并更新显示,你需要确保该函数已经定义和实现。

解决方案:

针对上述问题,我提供以下修改建议:

1. 将主程序中的screnn改为screen来统一变量名的拼写。

2. 需要确保已经定义和实现了createMap()函数,并在适当的位置调用该函数来创建地图并更新显示。

修改后的代码示例:
  1. import sys
  2. import pygame
  3. import random
  4. class Bird(object):
  5.     '''定义一个鸟类'''
  6.     def __init__(self):
  7.         pass
  8.     def bridupdate(self):
  9.         pass
  10. class Guandao(object):
  11.     '''定义一个管道类'''
  12.     def __init__(self):
  13.         '''定义初始化方法'''
  14.         pass
  15.     def updateGuandao(self):
  16.         '''水平移动'''
  17.         pass
  18. def createMap():
  19.     '''定义创建地图的方法'''
  20.     screen.fill((255, 255, 255))         # 填充颜色
  21.     screen.blit(background, (0, 0))      # 填入到背景
  22.     pygame.display.update()              # 更新显示
  23. if __name__ == '__main__':
  24.     '''主程序'''
  25.     pygame.init()
  26.     size = width, height = 400, 720
  27.     screen = pygame.display.set_mode(size)
  28.     clock = pygame.time.Clock()
  29.     Gguandao = Guandao()
  30.     Bird = Bird()
  31.     while True:
  32.         clock.tick(60)
  33.         for event in pygame.event.get():
  34.             if event.type == pygame.QUIT:
  35.                 pygame.quit()
  36.                 sys.exit()
  37.         background = pygame.image.load('女孩.jpg')
  38.         createMap()
复制代码

请尝试以上修改,并确认createMap()函数是否已正确定义和实现。如果问题仍然存在,请提供完整的错误消息或其他相关信息,以便我能够更好地帮助你解决问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2023-8-3 21:26:44 | 显示全部楼层
根据您提供的代码,窗口闪烁并消失的问题可能是由于以下几个原因导致的:

1. 窗口关闭事件处理不完整:在您的代码中,当检测到窗口关闭事件时,只调用了 pygame.quit() 和 sys.exit() 函数来退出程序。这样会导致窗口突然关闭,而不是平滑地关闭。为了解决这个问题,您可以在处理窗口关闭事件时,添加一行代码来设置一个退出标志,然后在主循环中检查该标志,并在下一次循环开始时退出程序。修改代码如下:

  1. # 在主程序中添加一个退出标志
  2. running = True

  3. # 主循环
  4. while running:
  5.     clock.tick(60)
  6.     for event in pygame.event.get():
  7.         if event.type == pygame.QUIT:
  8.             running = False  # 设置退出标志为False
  9.     # 其他代码省略

  10. # 在主循环外部添加退出程序的代码
  11. pygame.quit()
  12. sys.exit()
复制代码


2. 地图创建函数调用错误:在您的代码中,地图创建函数名为 Ditubeijing() ,但在主程序中调用时使用了 createMap() 。为了解决这个问题,您需要将函数调用改为 Ditubeijing() 。修改代码如下:

  1. # 将函数调用改为正确的函数名
  2. Ditubeijing()
复制代码


3. 图片加载错误:在您的代码中,加载背景图片时使用了 pygame.image.load('女孩.jpg') ,但是并没有定义 background 变量来保存加载的图片。为了解决这个问题,您需要在主程序中定义 background 变量,并将加载的图片赋值给它。修改代码如下:

  1. # 在主程序中定义background变量并加载背景图片
  2. background = pygame.image.load('女孩.jpg')
复制代码


通过以上修改,您的代码应该能够正常显示窗口并加载背景图片了。如果问题仍然存在,请提供完整的错误信息和相关代码,以便我能够更好地帮助您解决问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-3 21:26:47 | 显示全部楼层    本楼为最佳答案   
问题分析:

根据你提供的代码,我注意到一些可能导致窗口闪烁并立即关闭的问题:

1. 在主程序的第17行,你使用screen作为显示窗口的变量名,但是在后面的代码中却使用了screnn这个拼写错误的变量名。这将导致显示窗口无法正常创建,从而导致窗口闪烁并立即关闭。

2. 在主程序的第35行,你调用了一个名为createMap()的函数,但是在之前的代码中并没有定义这个函数。如果该函数涉及到创建游戏地图并更新显示,你需要确保该函数已经定义和实现。

解决方案:

针对上述问题,我提供以下修改建议:

1. 将主程序中的screnn改为screen来统一变量名的拼写。

2. 需要确保已经定义和实现了createMap()函数,并在适当的位置调用该函数来创建地图并更新显示。

修改后的代码示例:
  1. import sys
  2. import pygame
  3. import random
  4. class Bird(object):
  5.     '''定义一个鸟类'''
  6.     def __init__(self):
  7.         pass
  8.     def bridupdate(self):
  9.         pass
  10. class Guandao(object):
  11.     '''定义一个管道类'''
  12.     def __init__(self):
  13.         '''定义初始化方法'''
  14.         pass
  15.     def updateGuandao(self):
  16.         '''水平移动'''
  17.         pass
  18. def createMap():
  19.     '''定义创建地图的方法'''
  20.     screen.fill((255, 255, 255))         # 填充颜色
  21.     screen.blit(background, (0, 0))      # 填入到背景
  22.     pygame.display.update()              # 更新显示
  23. if __name__ == '__main__':
  24.     '''主程序'''
  25.     pygame.init()
  26.     size = width, height = 400, 720
  27.     screen = pygame.display.set_mode(size)
  28.     clock = pygame.time.Clock()
  29.     Gguandao = Guandao()
  30.     Bird = Bird()
  31.     while True:
  32.         clock.tick(60)
  33.         for event in pygame.event.get():
  34.             if event.type == pygame.QUIT:
  35.                 pygame.quit()
  36.                 sys.exit()
  37.         background = pygame.image.load('女孩.jpg')
  38.         createMap()
复制代码

请尝试以上修改,并确认createMap()函数是否已正确定义和实现。如果问题仍然存在,请提供完整的错误消息或其他相关信息,以便我能够更好地帮助你解决问题。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2023-8-3 21:26:51 | 显示全部楼层
问题分析:

从你提供的代码来看,窗口一闪而过并消失的原因可能有以下几点:

1. 代码中定义了一个Ditubeijing()函数,但是在主程序中没有调用该函数。在主程序中,你需要调用Ditubeijing()函数来创建地图并显示窗口。

2. 在主程序中,你使用了screnn来显示窗口,但是实际上正确的变量名应该是screen。由于变量名错误,窗口没有正确显示。

3. 在程序的主循环中,你没有更新管道和鸟的位置,导致它们停留在初始位置。你需要在主循环中调用相应的更新方法来更新管道和鸟的位置。

解决方案:

根据以上分析,我对你提供的代码进行了修正。修正后的代码如下:
  1. import sys
  2. import pygame
  3. import random
  4. class Bird(object):
  5.     '''定义一个鸟类'''
  6.     def __init__(self):
  7.         pass
  8.     def bird_update(self):
  9.         pass
  10. class Guandao(object):
  11.     '''定义一个管道类'''
  12.     def __init__(self):
  13.         '''定义初始化方法'''
  14.         pass
  15.     def update_guandao(self):
  16.         '''水平移动'''
  17.         pass
  18. def create_map():
  19.     '''定义创建地图的方法'''
  20.     screen.fill((255, 255, 255))              # 填充颜色
  21.     screen.blit(background, (0, 0))           # 填入到背景
  22.     pygame.display.update()                   # 更新显示
  23. if __name__ == '__main__':
  24.     '''主程序'''
  25.     pygame.init()                               # 初始化 pygame
  26.     size = width, height = 400, 720              # 设置窗口大小
  27.     screen = pygame.display.set_mode(size)       # 显示窗口
  28.     clock = pygame.time.Clock()                  # 设置时钟
  29.     guandao = Guandao()                          # 实例化管道
  30.     bird = Bird()                                # 实例化鸟
  31.     background = pygame.image.load('女孩.jpg')
  32.     create_map()
  33.     # 执行死循环,确保窗口一直显示
  34.     while True:
  35.         clock.tick(60)
  36.         # 轮询事件
  37.         for event in pygame.event.get():
  38.             if event.type == pygame.QUIT:
  39.                 pygame.quit()
  40.                 sys.exit()
  41.         guandao.update_guandao()         # 更新管道位置
  42.         bird.bird_update()               # 更新鸟的位置
  43.         create_map()                     # 更新地图
复制代码

修正后的代码中,使用正确的变量名screen来显示窗口。同时在主循环中调用了guandao.update_guandao()方法和bird.bird_update()方法来更新管道和鸟的位置。最后,调用create_map()函数来更新地图。

希望以上解答能够解决你的问题。如果还有疑问,请随时提问。

如果回答对你有帮助,请给我一个最佳答案!
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-4-23 07:14

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表