资讯

精准传达 • 有效沟通

从品牌网站建设到网络营销策划,从策略到执行的一站式服务

PyGame之怎么打开一个窗口

这篇文章主要介绍“PyGame之怎么打开一个窗口”,在日常操作中,相信很多人在PyGame之怎么打开一个窗口问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PyGame之怎么打开一个窗口”的疑惑有所帮助!接下来,请跟着小编一起来学习吧!

创新互联公司主要从事网站建设、成都网站建设、网页设计、企业做网站、公司建网站等业务。立足成都服务叶集,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220

导入和运行pygame

    你可以创建一个python文件,比如mygame1.py。然后在文件开头写入

import pygame

pygame.init()

好的,运行它。没有变化?那就对了,现在也就是控制台有几行输出。

Screen、Surface和Background

    pygame运行的时候显示的最大的那个窗口就是screen,比如你运行LOL,哪个窗口最大应该很好确定。通过pygame,我们可以在screen中创建和控制很多长方形的区域,这些区域叫做surface。我们会用一个surface作为背景,这个surface就是background。接下来我们创建一个background并把它添加到screen中。

screen = pygame.display.set_mode((640,480))     # 设置窗口的大小
background = pygame.Surface(screen.get_size())  # 创建一个surface,名字叫background,大小和screen一样
background.fill((255,255,255))                  # 用白色填充background;255,255,255是RGB的白色
background = background.convert()               # 对background进行convert(),可以加快后面添加时速度

把background添加(blit)到screen

    运行你的程序。什么?只看到一个黑窗口一闪而过?那又对了~

    到目前为止,我们只是在内存中创建了background,还没有把background添加到screen中,所以我们是看不到白背景的。

screen.blit(background, (0, 0))    # 把background添加到screen中,(0, 0)表示把background的左上角放到screen的左上角

    在很多游戏框架中,当然pygame也是,坐标原点在窗口左上角的顶点处,就是这个样子

PyGame之怎么打开一个窗口

主循环和事件处理

    主循环就是一个近乎无限的循环,只有你要退出游戏时主循环才停止。

mainloop = True

while mainloop:
    for event in pygame.event.get():         # 这一部分就是事件处理
        if event.type == pygame.QUIT:        # 如果按下右上角的叉叉
            mainloop = False                 # 退出主循环
        elif event.type == pygame.KEYDOWN:   # 如果按下了键盘
            if event.key == pygame.K_ESCAPE: # 而且按下的还是ESC键
                mainloop = False             # 退出主循环

    # 在这里做一些游戏相关的运算,这里暂时省略

    pygame.display.flip()                    # 刷新显示

Ok,再次运行你的游戏~ 这时你将得到一个白色的窗口。下面我们将在窗口里显示一些东西。

显示帧率

帧率就是游戏每秒运行的帧数,简称FPS,玩过游戏你一定知道FPS。帧率越高,游戏就越流畅。我们可以这样获得帧率

clock = pygame.time.Clock()     # 创建clock对象

clock.get_fps()                 # 获得帧率

现在我们把显示帧率的逻辑加入到主循环中

clock = pygame.time.Clock()     # 创建clock对象 
FPS = 30                        # 定义帧率的上限,就是帧率的最大值

mainloop = True

while mainloop:
    clock.tick(FPS)                          # 设置最大帧率 
    
    for event in pygame.event.get():         # 这一部分就是事件处理
        if event.type == pygame.QUIT:        # 如果按下右上角的叉叉
            mainloop = False                 # 退出主循环
        elif event.type == pygame.KEYDOWN:   # 如果按下了键盘
            if event.key == pygame.K_ESCAPE: # 而且按下的还是ESC键
                mainloop = False             # 退出主循环

    # 在这里做一些游戏相关的运算,这里暂时省略
    text = "FPS: {0:.2f}".format(clock.get_fps())  
    pygame.display.set_caption(text)
    
    pygame.display.flip()                    # 刷新显示

运行你的代码~ 帧率可以显示了

PyGame之怎么打开一个窗口

退出pygame

    程序结束时,需要退出pygame以释放申请的计算资源。

pygame.quit()

完整的代码

import pygame

pygame.init()

screen = pygame.display.set_mode((640,480))     # 设置窗口的大小
background = pygame.Surface(screen.get_size())  # 创建一个surface,名字叫background,大小和screen一样
background.fill((255,255,255))                  # 用白色填充background;255,255,255是RGB的白色
background = background.convert()               # 对background进行convert(),可以加快后面添加时速度
screen.blit(background, (0, 0))

clock = pygame.time.Clock()     # 创建clock对象 
FPS = 30                        # 定义帧率的上限,就是帧率的最大值

mainloop = True

while mainloop:
    clock.tick(FPS)                          # 设置最大帧率 
    
    for event in pygame.event.get():         # 这一部分就是事件处理
        if event.type == pygame.QUIT:        # 如果按下右上角的叉叉
            mainloop = False                 # 退出主循环
        elif event.type == pygame.KEYDOWN:   # 如果按下了键盘
            if event.key == pygame.K_ESCAPE: # 而且按下的还是ESC键
                mainloop = False             # 退出主循环

    # 在这里做一些游戏相关的运算,这里暂时省略
    text = "FPS: {0:.2f}".format(clock.get_fps())  
    pygame.display.set_caption(text)
    
    pygame.display.flip()                    # 刷新显示

pygame.quit()

到此,关于“PyGame之怎么打开一个窗口”的学习就结束了,希望能够解决大家的疑惑。理论与实践的搭配能更好的帮助大家学习,快去试试吧!若想继续学习更多相关知识,请继续关注创新互联网站,小编会继续努力为大家带来更多实用的文章!


文章标题:PyGame之怎么打开一个窗口
浏览地址:http://cdkjz.cn/article/ppohso.html
多年建站经验

多一份参考,总有益处

联系快上网,免费获得专属《策划方案》及报价

咨询相关问题或预约面谈,可以通过以下方式与我们联系

大客户专线   成都:13518219792   座机:028-86922220