1、pygame简介:
Pygame最初是由Pete Shinner编写的,该项目于2000年10月启动,六个月后,pygame版本1.0发布。pygame是一个利用SDL(Simple DirectMedia Layer)写就的游戏库。SDL 是一个用于控制多媒体的跨平台C库,与DirectX相当,它已被用于数百种商业和开源游戏。Pete Shinner对Python和SDL两个项目的简洁与优雅印象深刻,他决定将Python和SDL结合起来,组建一个真正利用Python的项目,目标是让做简单的事情变得容易,让困难的事情变简单。
2、最小游戏系统:
import pygame pygame.init() win = pygame.display.set_mode((600,400)) pygame.display.set_caption('www.ai8py.com') while True: for event in pygame.event.get(): if event.type == pygame.QUIT: exit()
# pygame 面向对象最小框架 import pygame # 全局变量 class MyGame: def __init__(self): self.__game_init_() # 游戏初始化 def __game_init_(self): pygame.init() window = pygame.display.set_mode((600,400)) pygame.display.set_caption('www.ai8py.com') # 游戏开始,事件循环 def start(self): while True: for event in pygame.event.get(): if event.type == pygame.QUIT: exit() pygame.display.update() if __name__ == '__main__': app = MyGame() app.start()
3、显示图片:
import pygame pygame.init() win = pygame.display.set_mode((600,400)) pygame.display.set_caption('www.ai8py.com') # 设置背景颜色 win.fill((255,255,255)) # ====================================== # 1.加载图片 image = pygame.image.load('1.jpg') # 2.渲染图片 # blit(渲染对象,坐标) win.blit(image,(0,0)) # 3.操作图片 # 1) 获取图片大小 w,h = image.get_size() # print(w,h) win.blit(image,(400-w,600-h)) # 2) 旋转和缩放 # scale(缩放对象,目标大小) new1 = pygame.transform.scale(image,(100,200)) win.blit(new1,(210,0)) # 3) rotozoom(缩放/旋转对象,旋转角度,缩放比例) new2 = pygame.transform.rotozoom(image,90,1) win.blit(new2,(0,200)) # 4.刷新显示页面 # flip() 第一次刷新 # pygame.display.update() 第一次以后的刷新 pygame.display.flip() # ====================================== while True: for event in pygame.event.get(): if event.type == pygame.QUIT: exit()
4、显示文字:
import pygame pygame.init() win = pygame.display.set_mode((600,400)) pygame.display.set_caption('www.ai8py.com') # 设置背景颜色 win.fill((255,255,255)) # ====================================== # 1、创建字体对象 # Font(字体文件路径,字号) # font = pygame.font.Font('files/aa.ttf',30) font = pygame.font.SysFont("arial",30) # 2、创建文字对象 # render(文字内容,True,文字颜色,背景颜色) text = font.render('ai8py',True,(255,0,0)) # 3、渲染到窗口上 win.blit(text,(0,0)) # 4、操作文字对象 # 1) 获取大小 w,h = text.get_size() win.blit(text,(400-w,600-h)) # 2) 缩放和旋转 new_t1 = pygame.transform.scale(text,(200,50)) win.blit(new_t1,(0,60)) new_t2 = pygame.transform.rotozoom(text,90,2) win.blit(new_t2,(0,120)) # 刷新 pygame.display.flip() # ====================================== while True: for event in pygame.event.get(): if event.type == pygame.QUIT: exit()
5、画线:
import pygame pygame.init() win = pygame.display.set_mode((600,400)) pygame.display.set_caption('www.ai8py.com') # 设置背景颜色 win.fill((255,255,255)) # ====================================== # 1、画直线 # line(画在哪儿,线的颜色,线的起点,线的终点,线宽=1) pygame.draw.line(win,(255,0,0,),(10,20),(200,20)) # 2、画折线 # lines(画在哪儿,线的颜色,是否闭合,多个点) points = [(10,300),(100,160),(180,260),(300,100)] pygame.draw.lines(win,(0,255,0),True,points,3) pygame.display.flip() # ====================================== while True: for event in pygame.event.get(): if event.type == pygame.QUIT: exit()
6、其他图形:
import pygame from math import pi pygame.init() win = pygame.display.set_mode((600,400)) pygame.display.set_caption('www.ai8py.com') # 设置背景颜色 win.fill((255,255,255)) # ====================================== # 1、画直线 # line(画在哪儿,线的颜色,线的起点,线的终点,线宽=1) pygame.draw.line(win,(255,0,0,),(10,20),(200,20)) # 2、画折线 # lines(画在哪儿,线的颜色,是否闭合,多个点) points = [(10,300),(100,160),(180,260),(300,100)] pygame.draw.lines(win,(0,255,0),True,points,3) # 3、画圆 # circle(画在哪儿,线的颜色,圆心坐标,半径,线宽=0) pygame.draw.circle(win,(0,0,255),(200,250),100,2) # 4、画矩形 # rect(画在哪儿,线的颜色,矩形范围,线宽=0) pygame.draw.rect(win,(120,20,60),(30,70,100,200),3) # 5、画椭圆 # ellipse(画在哪儿,线的颜色,矩形范围,线宽=0) pygame.draw.ellipse(win,(255,0,0),(30,70,100,200),3) # 6、画弧线 # arc(画在哪儿,线的颜色,矩形范围,起始弧度,终止弧度,线宽=1) pygame.draw.arc(win,(0,0,0),(30,70,100,200),0,pi/2,4) pygame.display.flip() # ====================================== while True: for event in pygame.event.get(): if event.type == pygame.QUIT: exit()
7、动画原理:
Pygame移动就是帧动画,每一帧将移动对象向一个方向移动,移动速度足够快就可以形成动画,下面是PPT模拟。

这就是移动的原理,对象也可以向任何方向移动,这就是动画原理
刚才PPT的球对应的每一个页面就是一帧,将图片连接起来称为视频,一般视频再12帧以上才能说是流畅的,一般的视频都是24帧动画,否则太低无法流畅,看到的就是卡的,今天这一讲没什么难的,就是原理,顺便玩玩Scratch,体验一下帧动画
最后说一个软件叫做:ScreenToGIF,很好用,可以录制一个Gif,还可以打开一个现有的GIF,并拆分出每一帧,这不是最重量的GIF工具,但是很强大而且轻便,还能添加字幕
8、移动和缩放动画:
import pygame from math import pi pygame.init() win = pygame.display.set_mode((600,800)) pygame.display.set_caption('www.ai8py.com') # 设置背景颜色 win.fill((255,255,255)) # ====================================== # 1、显示静态球 y = 100 pygame.draw.circle(win,(255,0,0),(100,y),50) pygame.display.update() # ====================================== num = 1 r = 100 while True: num += 1 # 2、移动动画 #if num % 10 == 0: # 覆盖 #pygame.draw.circle(win,(255,255,255),(100,y),50) #y += 1 #pygame.draw.circle(win,(255,0,0),(100,y),50) #pygame.display.update() # 3、缩放动画 if num % 10 == 0: pygame.draw.circle(win,(255,255,255),(100,y),r) #r += 1 if r != 0: r -= 1 pygame.draw.circle(win,(255,0,0),(100,y),r) pygame.display.update() # 检测事件 for event in pygame.event.get(): if event.type == pygame.QUIT: exit()
9、动画的灵活控制:
10、鼠标事件:
11、键盘事件:
12、按钮点击效果:
13、封装好的按钮:
14、坦克控制: