当前位置: 首页 > 知识库问答 >
问题:

Pygame游戏菜单问题

鞠修雅
2023-03-14

所以我正在用Pygame制作一个游戏,我需要一个菜单,让玩家在不同的游戏类型之间进行选择。我试着让它在显示指令时,玩家可以使用键盘选择类型;然而,当我这样做的时候,游戏就会出错。指示将保留在屏幕上(有时会绘制平面精灵)。当按下'e'时,我添加了一行代码来打印shell中的某些内容,但没有打印任何内容。

def instructions(score):
    pygame.display.set_caption("Mail Pilot!")

    plane = Plane()
    ocean = Ocean()

    allSprites = pygame.sprite.Group(ocean, plane)
    insFont = pygame.font.SysFont(None, 50)
    insLabels = []
    instructions = (
    "Mail Pilot.     Last score: %d" % score ,
    "Instructions:  You are a mail pilot,",
    "delivering mail to the islands.",
    "",
    "Fly over an island to drop the mail,",
    "but be careful not to fly too close",    
    "to the clouds. Press 'e' for",
    "endless",
    "",
    "good luck!",
    "",
    "click to start, escape to quit..."
    )

    for line in instructions:
        tempLabel = insFont.render(line, 1, (255, 255, 0))
        insLabels.append(tempLabel)

    keepGoing = True
    clock = pygame.time.Clock()
    pygame.mouse.set_visible(False)
    while keepGoing:
        clock.tick(30)
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                keepGoing = False
                donePlaying = True
                pygame.display.quit()
                pygame.quit()
                sys.exit()
##            if event.type == pygame.MOUSEBUTTONDOWN:
##                keepGoing = False
##                donePlaying = False
            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_e:
                    gameType = "endless"
                    keepGoing = False
                    donePlaying = False
                elif event.key == pygame.K_ESCAPE:
                    keepGoing = False
                    pygame.display.quit()
                    pygame.quit()
                    sys.exit()
                    donePlaying = True

        allSprites.update()
        allSprites.draw(screen)

        for i in range(len(insLabels)):
            screen.blit(insLabels[i], (50, 30*i))

        pygame.display.flip()

    plane.sndEngine.stop()    
    pygame.mouse.set_visible(True)
    return donePlaying

def main():
    gameType = ""
    donePlaying = False
    score = 0
    while not donePlaying:
        donePlaying = instructions(score)
        if not donePlaying:
            if gameType == "endless":
                score = gameEndless()


if __name__ == "__main__":
    main()

注释掉的部分是启动游戏的原始代码。

共有2个答案

宋望
2023-03-14

这也是我鄙视“全方位适用”事件驱动编程的另一个原因。虽然看起来你已经找到了解决办法,但我相信找到mousex和mousey最好的方法就是打电话

mousex,mousey = pygame.mouse.get_pos()

在事件循环之外。尽管MOUSEBUTTONUP当然适合它的使用,但在这种情况下,鼠标坐标的查找并不需要基于事件。

乜烨霖
2023-03-14

感谢@furas帮助我认识到这个问题!

为了修复程序,我在instructions类的if循环中添加了对游戏的直接调用。

if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_e:
                    gameType = "endless"
                    keepGoing = False
                    donePlaying = False
                    score = gameEndless()

然后在底部返回分数

return donePlaying, score

主循环不再调用游戏,而是在完成时调用指令

def main():
    donePlaying = False
    score = 0
    while not donePlaying:
        donePlaying = instructions(score)

这样,我可以绕过主循环问题,并添加一个更精简的方法,而不是在主、插图和游戏类型之间跳跃。

 类似资料:
  • 本文向大家介绍pygame实现打字游戏,包括了pygame实现打字游戏的使用技巧和注意事项,需要的朋友参考一下 本文实例为大家分享了pygame实现打字游戏的具体代码,供大家参考,具体内容如下 1.基本代码 下面的代码完成了每一秒在界面的顶部随机生成一个新的字母 2.移动字母 先增加一个定时器,设定字母20毫秒移动一格 在主循环中加入移动的代码 3.消除字母 在事件的处理代码中加入对键盘字母的判断

  • 本文向大家介绍python pygame实现2048游戏,包括了python pygame实现2048游戏的使用技巧和注意事项,需要的朋友参考一下 实现2048相对来说比较简单,用4*4的二维数组保存地图,pygame.key.get_pressed()获取键盘操作,详见代码。 效果图 代码 后续可以考虑实现动画和AI。 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程

  • 您好,我正在中制作一个游戏,我想知道如何以及最好的方式是在屏幕上添加游戏。以下是玩家健康状况小于或等于0的代码: 我不确定该怎么做,因为我试图使用另一个py呼叫游戏,但玩家死亡的时间被重置为0并返回,所以玩家死亡的地方可能发生任何事情吗?

  • 本文向大家介绍pygame游戏之旅 如何制作游戏障碍,包括了pygame游戏之旅 如何制作游戏障碍的使用技巧和注意事项,需要的朋友参考一下 本文为大家分享了pygame游戏之旅的第6篇,供大家参考,具体内容如下 定义一个障碍模型函数: 在游戏循环中调用: 障碍消失之后修改x值: 全部代码: 结果图: 以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持呐喊教程。

  • 所以我对Python、PyGame和任何编程都是全新的。我遵循了在PyGame中制作蛇游戏的教程。现在一切都结束了,但为了给自己一个挑战,我正试图改变一下比赛。首先我想添加边界,但我真的迷路了。我试过看其他教程,但它们的图像似乎有所不同。这是我的代码(因为我不知道什么可以帮助你帮助我,所以我把它全部发送了): 基本上,我希望当我的蛇撞到边界时发生的事情和它撞到自己时发生的事情是一样的。如果你能帮助

  • 我已经开发了一个2D侧滚动平台一段时间了。这是我的第一场正式比赛,快结束了。到目前为止,我还没有过多考虑过决议。 我的游戏是基于瓷砖的,大多数瓷砖和玩家精灵都是。尺寸为40x40像素的PNG文件。默认屏幕高度和宽度为1280x720。据我所知,现在的大多数游戏都有很多不同的分辨率选择和不同的纵横比。 我想给玩家几个分辨率的选择,比如800x600、1024x768和1280x720。这需要这样做,