参考文献
1、 | pygame教程(非常详细):Pygame教程(非常详细)-CSDN博客 |
---|---|
2、 | python --Tkinter详解:python --Tkinter详解_python tkinter-CSDN博客 |
3、 |
(建议结合pygame教程来看)
(正文:
时至今日,python已然风靡全世界,不只是因为它适合初学者,功能繁而不杂,还有功能强大的pip,让人第一次用就爱上,更是因为python众多的扩展库
至今,pygame都是python上有名的python扩展库,大家用它开发了众多游戏
它是个搭建python游戏的好手。那么这个博客,就让我们一起来用pygame搭建游戏框架
1、引用扩展库
首先,在cmd中将pygame,random(如果你还没有)这些可能用得上的下载了
C:\Users\dilon>pip install pygame
C:\Users\dilon>pip install random
然后,在程序中引用它们
import pygame
import random
2、制作框架
1、初始化
1、pygame初始化
我们编写pygame的时候,首先要干嘛?
那当然是初始化了!
那初始化怎样写呢?
首先要初始化pygame,它自己的语句是pygame.init()
pygame.init
是的,就这么一行
别看他只有一行,要说起它的功能来,那可真是短小精悍。这是整个程序中的首句代码,它的初始化作用是自动检测pygame软件包是否正常可用,并检查电脑的硬件调用接口、基础功能是否存在问题。同时,它会完成pygame中所有模块的初始化操作,比如display、font、mixer等。除此之外,还有一些基本功能需要其他语句解决。
那还要干嘛呢
2、Surface对象
当然是创造surface对象,没纸你怎么画精灵图!
创建第一个surface对象,和tkinter中的***=tkinter.Tk()。顺带一嘴,tkinter(Tk interface)是Python的标准GUl库,支持跨平台的GUl程序开发。tkinter适合小型的GUl程序编写,也特别适合初学者学习GUl编程。
那Surface怎么创建呢?
很简单,像这样:
pygame.display.set_mode((大小)) | 设置特定大小的屏幕 |
pygame.image.load("图片路径") | 设置有图片的屏幕 |
pygame.Surface((大小),flags,depth) | (depth为可选)创造一个有大小、功能标志位、深度的Surface对象 |
我选择了第一种,及设定一个有特定大小的屏幕
pygame.display.set_mode((400,400))
好了,现在我们成功得到了一个屏幕,该对它做点什么了
我使用了fill语句填充了它的颜色,然后使用set_caption语句写入了标题,我命名它为坦克乱世
并且要用flip语句更新
全部代码:
import pygame
import random
pygame.init()
sn = pygame.display.set_mode((400,400))
sn.fill((127,127,127))
pygame.display.set_caption('坦克乱世')
pygame.display.flip()
这就是运行结果(见图二),看到没,写着标题“坦克乱世”的灰色屏幕
2、主循环(事件监听)
我们想要开发的游戏大致来讲是由动画和人机交互的体验两部分构成,其中动画则是由一系列连续静止的图片,这串图片被称为精灵,经过一定频率的刷新构成的,这个频率被称为FPS,每秒帧率。如果频率值越大则画面越流畅;如果频率值越小则画面会出现卡顿的感受,在游戏过程中一般人能接受的最低FPS约为30Hz,如果想要画面流畅则FPS要大于60Hz(Js1000Hz都不在话下)
FPS越高,细节越好,体验也越好,但是文件容量也越大,就连帧率也会被文件管理器拉下去
动画保证了玩家的视觉体验,而人机交互则是操作上的体验。通过移动和点击鼠标、按下键盘上的技能键,或是滑动手机屏幕等操作来实现人机交互,这些与游戏程序交互的操作被称为事件
如果您接触过JavaScript,那么您对于“事件”这一名词,一定不会陌生,就连本人都经常用到。
Pygame作为一个游戏开发库,同样具有设置和监听事件的功能。它提供了一个enevt事件模块,这个模块中包含了所有常用到游戏事件,像js中一样
w = True
while w:
for event in pygame.event.get():
event.get就像是js中的event,遍历它可以遍历出所有可能性
让我们编写出第一个事件监听,pygame.QUIT
这个事件就是点击右上角那个×,那意味着什么呢?当然是关闭了!
首先将循环的w设为False,然后break以减少缓存,最后当while编译完最后一行代码后,写上一行pygame.quit,就是将pygame.init加载的所有项都重置
w = True
while w:
for event in pygame.event.get():
if event.type == pygame.QUIT:
w = False
break
pygame.quit
还差一步,之前说到要用flip更新,那么,现在就要在while中更新
如果不更新的话,那就可能是之前看到的黑屏幕
全部代码:
import pygame
import random
pygame.init()
sn = pygame.display.set_mode((400,400))
sn.fill((127,127,127))
pygame.display.set_caption('坦克乱世')
w = True
while w:
for event in pygame.event.get():
if event.type == pygame.QUIT:
w = False
break
pygame.display.flip()
pygame.quit
3、总结
本博客让诸位明白如何构造一个pygame游戏的基础框架,最后效果如下所示:
python3.11:
IDLE: