鱼C论坛

 找回密码
 立即注册
查看: 1730|回复: 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()函数,并在适当的位置调用该函数来创建地图并更新显示。

修改后的代码示例:
import sysimport pygameimport randomclass Bird(object):    '''定义一个鸟类'''    def __init__(self):        pass    def bridupdate(self):        passclass Guandao(object):    '''定义一个管道类'''    def __init__(self):        '''定义初始化方法'''        pass    def updateGuandao(self):        '''水平移动'''        passdef createMap():    '''定义创建地图的方法'''    screen.fill((255, 255, 255))         # 填充颜色    screen.blit(background, (0, 0))      # 填入到背景    pygame.display.update()              # 更新显示if __name__ == '__main__':    '''主程序'''    pygame.init()    size = width, height = 400, 720    screen = 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()
请尝试以上修改,并确认createMap()函数是否已正确定义和实现。如果问题仍然存在,请提供完整的错误消息或其他相关信息,以便我能够更好地帮助你解决问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

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

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

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

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

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

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

使用道具 举报

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

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

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

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

解决方案:

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

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

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

修改后的代码示例:
import sysimport pygameimport randomclass Bird(object):    '''定义一个鸟类'''    def __init__(self):        pass    def bridupdate(self):        passclass Guandao(object):    '''定义一个管道类'''    def __init__(self):        '''定义初始化方法'''        pass    def updateGuandao(self):        '''水平移动'''        passdef createMap():    '''定义创建地图的方法'''    screen.fill((255, 255, 255))         # 填充颜色    screen.blit(background, (0, 0))      # 填入到背景    pygame.display.update()              # 更新显示if __name__ == '__main__':    '''主程序'''    pygame.init()    size = width, height = 400, 720    screen = 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()
请尝试以上修改,并确认createMap()函数是否已正确定义和实现。如果问题仍然存在,请提供完整的错误消息或其他相关信息,以便我能够更好地帮助你解决问题。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

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

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

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

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

解决方案:

根据以上分析,我对你提供的代码进行了修正。修正后的代码如下:
import sysimport pygameimport randomclass Bird(object):    '''定义一个鸟类'''    def __init__(self):        pass    def bird_update(self):        passclass Guandao(object):    '''定义一个管道类'''    def __init__(self):        '''定义初始化方法'''        pass    def update_guandao(self):        '''水平移动'''        passdef create_map():    '''定义创建地图的方法'''    screen.fill((255, 255, 255))              # 填充颜色    screen.blit(background, (0, 0))           # 填入到背景    pygame.display.update()                   # 更新显示if __name__ == '__main__':    '''主程序'''    pygame.init()                               # 初始化 pygame    size = width, height = 400, 720              # 设置窗口大小    screen = pygame.display.set_mode(size)       # 显示窗口    clock = pygame.time.Clock()                  # 设置时钟    guandao = Guandao()                          # 实例化管道    bird = Bird()                                # 实例化鸟    background = pygame.image.load('女孩.jpg')    create_map()    # 执行死循环,确保窗口一直显示    while True:        clock.tick(60)        # 轮询事件        for event in pygame.event.get():            if event.type == pygame.QUIT:                pygame.quit()                sys.exit()        guandao.update_guandao()         # 更新管道位置        bird.bird_update()               # 更新鸟的位置        create_map()                     # 更新地图
修正后的代码中,使用正确的变量名screen来显示窗口。同时在主循环中调用了guandao.update_guandao()方法和bird.bird_update()方法来更新管道和鸟的位置。最后,调用create_map()函数来更新地图。

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

如果回答对你有帮助,请给我一个最佳答案!
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-9-22 04:17

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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