文章目录:
一:语句使用模板
基本框架
1.安装Pygame
2.创建一个主窗口display
3.图像渲染与动画
4.鼠标事件mouse
5.声音和音乐sound
6.设置屏幕背景颜色fill
7.添加文字font
8.绘制图形draw
8.1 绘制多边形polygon
8.2 绘制直线line
8.3 绘制弧线arc
8.4 绘制圆形circle
8.5 绘制椭圆ellipse
8.6 绘制矩形rect
9.Time时间控制
10.Rect区域位置
11.Font文本和字体
12.精灵和碰撞检测Sprite
二:分类语句方法
1.导入包
2.系统
3.窗口
4.动画
5.屏幕/画布/Surface表面/主窗体
6.矩形Rect
7.事件Event
7.1 事件处理方法
7.2 窗口事件
7.3 鼠标事件
7.4 键盘事件
7.5 游戏手柄事件
7.6 pygame事件
8.时钟Clock
9.精灵Sprite
10.颜色
11.音乐
12.文字和字体
13.绘制图形
必备知识:https://liuxinlei.blog.csdn.net/article/details/132608904
参考
官方 :中文文档、Pygame官方文档、Pygame教程
C中文网:Pygame教程(非常详细)
脚本之家:Python游戏开发之Pygame使用的最全教程分享_python_脚本之家
第三方:python游戏库p颜色ygame经典教程_pygame教程
一:语句使用模板
基本框架
#导入所需的模块 import sys import pygame #引入pygame中所有常量,比如 QUIT from pygame.locals import *# 使用pygame之前必须初始化 pygame.init()# 设置主屏窗口 screen = pygame.display.set_mode((400,400))# 设置窗口的标题,即游戏名称 pygame.display.set_caption('hello world')#背景颜色 screen.fill('white') #--------------------------------------------------------文本字体 # 引入字体类型 f = pygame.font.Font('C:/Windows/Fonts/simhei.ttf',50)# 生成文本信息,第一个参数文本内容;第二个参数,字体是否平滑; # 第三个参数,RGB模式的字体颜色;第四个参数,RGB模式字体背景颜色; text = f.render("刘鑫磊",True,(255,0,0),(0,0,0))#获得显示对象的rect区域坐标 textRect =text.get_rect() # 设置显示对象居中 textRect.center = (200,200) # 将准备好的文本信息,绘制到主屏幕 Screen 上 screen.blit(text,textRect) #--------------------------------------------------------加载图像 #从外部加载图像:包含图像的 surface 对象 image_surface =pygame.image.load("图片路径")image_surface.fill((0,0,255),rect=(100,100,100,50),special_flags=0)# rect(left,top,width,height)指定图片上某个区域# special_flags功能标志位,指定颜色混合模式,默认为 0 表示用纯色填充#复制并移动 image_surface.scroll(100,50) #--------------------------------------------------------创建图像 #创建一个 50*50 的图像,并优化显示 face = pygame.Surface((50,50),flags=pygame.HWSURFACE) #填充颜色 face.fill(color='pink') #--------------------------------------------------------Transform图像变形 #加载一张图片(455*191) image_surface = pygame.image.load("C:/Users/Administrator/Desktop/c-net.png").convert() image_new = pygame.transform.scale(image_surface,(300,300)) # 查看新生成的图片的对象类型 #print(type(image_new)) # 对新生成的图像进行旋转至45度 image_1 =pygame.transform.rotate(image_new,45) # 使用rotozoom() 旋转 0 度,将图像缩小0.5倍 image_2 = pygame.transform.rotozoom(image_1,0,0.5) #--------------------------------------------------------# 固定代码段,实现点击"X"号退出界面的功能,几乎所有的pygame都会使用该段代码 #游戏主循环(游戏循环) while True:# 循环获取事件,监听事件状态for event in pygame.event.get():# 判断用户是否点了"X"关闭按钮,并执行if代码段if event.type == pygame.QUIT:#卸载所有模块pygame.quit()#终止程序,确保退出程序sys.exit() #--------------------------------------------------------创建图像# 将绘制的图像添加到主屏幕上,(100,100)是位置坐标,显示屏的左上角为坐标系的(0,0)原点screen.blit(face, (100, 100)) #--------------------------------------------------------加载图像# 将图像放置在主屏幕上screen.blit(image_surface,(0,0)) #--------------------------------------------------------Transform图像变形# 将最后生成的image_2添加到显示屏幕上screen.blit(image_2,(0,0)) #--------------------------------------------------------pygame.display.flip() #更新屏幕内容#pygame.display.update()#更新屏幕
1.安装Pygame
在终端执行
pip install pygame
2.创建一个主窗口display
import sys import pygame#使用pygame之前必须初始化 pygame.init()#设置主屏窗口 screen = pygame.display.set_mode((400,400)) #填充主窗口的背景颜色,参数值RGB(颜色元组) screen.fill((156,156,156)) #设置窗口标题 pygame.display.set_caption('刘鑫磊') # 如果没有下列主循环代码,运行结果会一闪而过 while True:# 循环获取事件,监听事件for event in pygame.event.get():# 判断用户是否点了关闭按钮if event.type == pygame.QUIT:#卸载所有模块pygame.quit()#终止程序sys.exit()#更新屏幕内容pygame.display.flip()
3.图像渲染与动画
import pygame import os # 初始化Pygame pygame.init() # 创建一个窗口 screen = pygame.display.set_mode((800, 600)) # 加载一个图像 image_path = os.path.join('path_to_your_image_directory', 'image.png') image = pygame.image.load(image_path) # 游戏主循环 running = True while running:# 获取所有事件for event in pygame.event.get():if event.type == pygame.QUIT:running = False# 清除屏幕screen.fill((0, 0, 0))# 绘制图像screen.blit(image, (100, 100))# 更新屏幕pygame.display.flip() # 游戏结束,退出Pygame pygame.quit()
4.鼠标事件mouse
用户输入
#获取当前按下的所有键 keys = pygame.key.get_pressed() if keys[pygame.K_LEFT]:# 向左移动角色pass if keys[pygame.K_RIGHT]:# 向右移动角色pass
跟随鼠标移动花圆
import pygame from random import randint# 初始化程序 pygame.init() screen = pygame.display.set_mode((450,400)) pygame.display.set_caption("鼠标事件") # 更新显示 pygame.display.flip()while True:#等待事件发生event = pygame.event.wait()if event.type == pygame.QUIT:exit("成功退出")if event.type == pygame.MOUSEBUTTONDOWN:# pos 获取鼠标当前位置print('鼠标按下',event.pos)mx,my = event.pos# 调用 pygame.draw 模块画圆pygame.draw.circle(screen,(255,255,0),(mx,my),50)# 处理完,更新显示pygame.display.update()if event.type == pygame.MOUSEBUTTONUP:print('鼠标弹起')passif event.type == pygame.MOUSEMOTION:print('鼠标移动')mx, my = event.pos# 随机生成 RGB 颜色值r = randint(0,255)g = randint(0,255)b = randint(0,255)pygame.draw.circle(screen, (r,g,b,),(mx, my), 50)# 处理完,更新显示pygame.display.update()
5.声音和音乐sound
# 加载声音 sound = pygame.mixer.Sound('sound.wav') # 播放声音 sound.play() # 加载并播放音乐 pygame.mixer.music.load('music.mp3') # 播放背景音乐,第一个参数为播放的次数(-1表示无限循环),第二个参数是设置播放的起点(单位为秒) pygame.mixer.music.play(-1, 0.0)
6.设置屏幕背景颜色fill
# 设置背景颜色 surface.fill((255, 255, 255)) # 更新屏幕 pygame.display.update()
7.添加文字font
import pygame,sys from pygame.locals import *pygame.init()surface = pygame.display.set_mode((500, 400), 0, 32) pygame.display.set_caption("我的pygame游戏") surface.fill((255, 255, 255))# 获取字体对象 basicFont = pygame.font.SysFont("方正粗黑宋简体", 48) # 获取当前系统字体fonts = pygame.font.get_fonts() # surface对象 text = basicFont.render('秀儿', True, (255,255,255), (0,255,0)) # 设置文本位置 textRect = text.get_rect()textRect.centerx = surface.get_rect().centerx textRect.centery = surface.get_rect().centery # 将渲染的surface对象更新到屏幕上 surface.blit(text,textRect)#更新屏幕 pygame.display.update() while True:for event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()
8.绘制图形draw
import pygame
from math import pi#初始化
pygame.init()
# 设置主屏幕大小
size = (500, 450)
screen = pygame.display.set_mode(size)
#设置标题
pygame.display.set_caption("Draw绘图函数")# 设置一个控制主循环的变量
done = False
#创建时钟对象
clock = pygame.time.Clock()
while not done:# 设置游戏的fpsclock.tick(10)for event in pygame.event.get():if event.type == pygame.QUIT:done = True # 若检测到关闭窗口,则将done置为True# 绘制一条宽度为 3 的红色对角线pygame.draw.line(screen, (0, 255, 0), [0, 0], (500, 450), 3)# 绘制多条蓝色的直线(连续直线,非抗锯齿),False 表示首尾不相连pygame.draw.lines(screen, (0, 0, 255), False, [[0, 80], [50, 90], [200, 80], [220, 30]], 1)# 绘制一个灰色的矩形区域,以灰色填充区域pygame.draw.rect(screen, (155, 155, 155), (75, 10, 50, 20), 0)# 绘制一个线框宽度为2的矩形区域pygame.draw.rect(screen, (0, 0, 0), [150, 10, 50, 20],2)# 绘制一个椭圆形,其线宽为2pygame.draw.ellipse(screen, (255, 0, 0), (225, 10, 50, 20), 2)# 绘制一个实心的红色椭圆形pygame.draw.ellipse(screen, (255, 0, 0), (300, 10, 50, 20))# 绘制一个绿色边框(宽度为2)三角形pygame.draw.polygon(screen, (100, 200, 45), [[100, 100], [0, 200], [200, 200]], 2)# 绘制一个蓝色实心的圆形,其中[60,250]表示圆心的位置,40为半径,width默认为0pygame.draw.circle(screen, (0, 0, 255), [60, 250], 40)# 绘制一个圆弧,其中0表示弧线的开始位置,pi/2表示弧线的结束位置,2表示线宽pygame.draw.arc(screen, (255, 10, 0), (210, 75, 150, 125), 0, pi / 2, 2)# 刷新显示屏幕pygame.display.flip()# 点击关闭,退出pygame程序
pygame.quit()
8.1 绘制多边形polygon
import pygame,sys from pygame.locals import *pygame.init()surface = pygame.display.set_mode((500, 400), 0, 32) pygame.display.set_caption("我的pygame游戏") surface.fill((255, 255, 255))#polygon 来绘制多边形 #第一个参数是屏幕对象,第二个是颜色,第三个是用点串连的一个元组,最后一个和第一个是一致的 pygame.draw.polygon(surface, (0, 0, 255), ((50, 40), (100, 100), (120, 80), (50, 40)))pygame.display.update() while True:for event in pygame.event.get():if event.type == QUIT:pygame.quit()sys.exit()
8.2 绘制直线line
#第一个参数是屏幕对象,之后是颜色和两个点,最后一个参数是线条宽度 pygame.draw.line(surface, (0, 0, 255), (50, 40), (100, 100), 10)
8.3 绘制弧线arc
pygame.draw.arc(screen, color2, rect1, ang1, ang2, width=10)# 参数的含义解释"""第一个参数:屏幕第二个参数:颜色第三个参数:开始的角度第四个参数:结束的角度第五个参数:线条的宽度"""
8.4 绘制圆形circle
#第一个参数和第二个参数是屏幕对象和颜色,之后是圆心和半径 #最后一个表示宽度,如果设置为0,则是一个实园 pygame.draw.circle(surface, (0, 0, 255), (50, 40), 20, 10)
8.5 绘制椭圆ellipse
#第一个参数和第二个参数是屏幕对象和颜色 #第三个参数分别指定x和y轴的左上角,之后是x和y的半径,最后一个是宽度 pygame.draw.ellipse(surface, (0, 0, 255), (50, 40, 20, 10), 2)
8.6 绘制矩形rect
#第一个参数和第二个参数是屏幕对象和颜色,第三个参数分别制定左上角和右下角 pygame.draw.rect(surface, (0, 0, 255), (50, 40, 20, 10))
绘制矩形框
import pygame import pygame.locals import syspygame.init() screen = pygame.display.set_mode((600, 500)) pygame.display.set_caption("Drawing Rectangles") # 设置名称 Blue = 0, 0, 255 Purple = 160, 32, 240 while True:for event in pygame.event.get():if event.type == pygame.locals.QUIT or event.type == pygame.locals.KEYDOWN:# 还是如果说点击了关闭的按键,或者是按下了任意键,那么就可以关闭程序了sys.exit()pos = (300, 250, 100, 100)# 这里的 pos 不仅设置了位置,而且设置了长度以及宽度screen.fill(Purple)pygame.draw.rect(screen, Blue, pos, width=10)# width 是线条的宽度,screen 表示指定使用哪一个屏幕进行显示pygame.display.update()
9.Time时间控制
游戏暂停
import pygamepygame.init() screen = pygame.display.set_mode((500,500)) pygame.display.set_caption('游戏暂停') # 获取以毫秒为单位的时间 t = pygame.time.get_ticks() #该时间指的从pygame初始化后开始计算,到调用该函数为止 t1 =pygame.time.wait(3000) #暂停游戏3000毫秒 print(t1) #暂停t1时间后,加载图片 image_surface = pygame.image.load("C:/Users/Administrator/Desktop/c-net.png") while True:for event in pygame.event.get():if event.type == pygame.QUIT:exit()screen.blit(image_surface,(0,0))pygame.display.update()
设置游戏FPS
import pygamepygame.init() screen = pygame.display.set_mode((500,300)) pygame.display.set_caption('设置游戏FPS') # 获取以毫秒为单位的时间 t = pygame.time.get_ticks() #该时间指的从pygame初始化后开始计算,到调用该函数为止 t1 =pygame.time.delay(3000) #暂停游戏3000毫秒 print(t1) #暂停t1时间后,加载图片 image_surface = pygame.image.load("C:/Users/Administrator/Desktop/c-net.png") #创建时钟对象(控制游戏的FPS) clock = pygame.time.Clock() while True:#通过时钟对象,指定循环频率,每秒循环60次clock.tick(60)for event in pygame.event.get():if event.type == pygame.QUIT:exit()screen.blit(image_surface,(0,0))pygame.display.update()
10.Rect区域位置
import pygame pygame.init() screen = pygame.display.set_mode((500,300)) pygame.display.set_caption('区域位置') image_surface = pygame.image.load("C:/Users/Administrator/Desktop/c-net.png") rect1 = pygame.Rect(50,50,100,100) # 在原图的基础上创建一个新的子图(surface对象) image_child= image_surface.subsurface(rect1) rect2 = image_child.get_rect() #输出的矩形大小为 100*100 print(rect2) while True:for event in pygame.event.get():if event.type == pygame.QUIT:exit()#在屏幕上显示子图的区域screen.blit(image_child,rect1)pygame.display.update()
11.Font文本和字体
import sys import pygame# 初始化 pygame.init() screen = pygame.display.set_mode((600,400)) #填充主窗口的背景颜色 screen.fill((20,90,50)) #设置窗口标题 pygame.display.set_caption('render')# 字体文件路径 C:/Windows/Fonts/simhei.ttf f = pygame.font.Font('C:/Windows/Fonts/simhei.ttf',50)# render(text, antialias, color, background=None) -> Surface text = f.render("网址:c.biancheng.net",True,(255,0,0),(255,255,255))#获得显示对象的 rect区域大小 textRect =text.get_rect() #设置显示对象居中 textRect.center = (300,200) screen.blit(text,textRect)while True:# 循环获取事件,监听事件for event in pygame.event.get():# 判断用户是否点了关闭按钮if event.type == pygame.QUIT:#卸载所有pygame模块pygame.quit()#终止程序sys.exit()pygame.display.flip() #更新屏幕内容
12.精灵和碰撞检测Sprite
import pygameclass Snake(pygame.sprite.Sprite):#定义构造函数def __init__(self,filename,location):# 调父类来初始化子类pygame.sprite.Sprite.__init__(self)# 加载图片self.image = pygame.image.load(filename)# 获取图片rect区域self.rect = self.image.get_rect()# 设置位置self.rect.topleft=location# 初始化pygame pygame.init() screen = pygame.display.set_mode((500,400)) pygame.display.set_caption('灵和碰撞检测Sprite') # 填充为白色屏幕 screen.fill((255,255,255)) filename ="C:/Users/Administrator/Desktop/snake.png"location =(100,150) snake1 = Snake(filename,location) # 碰撞检测,必须有两个精灵,因此再创建一个精灵,并使用location来控制第二个精灵的位置 location_2 = (100,80) snake2 = Snake('C:/Users/Administrator/Desktop/logo.png',location_2) # 调用 collide_rect()进行矩形区域检测,返回一个布尔值,碰撞返回True,否则返回False crash_result = pygame.sprite.collide_rect(snake1,snake2) if crash_result:print("精灵碰撞了!")pass else:print('精灵没碰撞')while True:for event in pygame.event.get():if event.type == pygame.QUIT:pygame.quit()exit()# 绘制精灵到屏幕上screen.blit(snake1.image,snake1.rect)screen.blit(snake2.image,snake2.rect)# 刷新显示屏幕pygame.display.update()
二:分类语句方法
Surface(表面):Pygame中的所有图形都是绘制在Surface对象上的,类似画布Surface可以是窗口、图像、按钮等,是游戏中最基本的图形对象Rect(矩形):Pygame中的所有图形都是使用矩形表示的Rect可以表示Surface的位置、大小等信息,是游戏中常用的对象Event(事件):Pygame中的所有操作都是通过事件来实现的事件可以是鼠标点击、键盘按下等用户操作,也可以是游戏中的自定义事件Clock(时钟):Pygame中的所有动画都是使用时钟实现的时钟可以控制游戏的帧率、动画速度等Sprite(精灵):Pygame中的Sprite是一个抽象概念,表示游戏中的可移动对象例如人物、怪物等。Sprite可以方便地进行移动、碰撞检测等操作
x,y 表示矩形距离 x、y 轴的距离top, left, bottom, right 在坐标系内描述矩形的大小topleft, bottomleft, topright, bottomright 返回一个描述矩形大小的元组midtop, midleft, midbottom, midright 返回一个描述矩形大小的元组center, centerx, centery #(centerx,centery) 表示矩形中央坐标(x,y)的值size, width, heightw,h 用于描述矩形的width、height
1.导入包
import pygame | pip install pygame安装Pygame pygame.init()初始化 | 游戏 |
import clock | clock = pygame.time.Clock()创建时钟对象 clock.tick(60)控制游戏帧率 | 时钟 |
import sys | 内置标准模块 | |
from pygame.locals import * | 比如 QUIT | 引入pygame中所有常量 |
2.系统
退出系统 | sys.exit() | |
退出pygame | pygame.quit() | |
更新屏幕 | pygame.display.update() | 更新整个待显示的内容 如果后者没有提供区域位置参数时,其作用和 display.flip() 相同 |
刷新界面 | pygame.display.flip() | 根据选定的区域来更新部分内容 |
3.窗口
创建窗口 | size = (700, 500) screen = pygame.display.set_mode(size=(),flags=0) | 设置窗口大小 ·size:用来设置窗口的大小 ·flags:功能标志位,表示创建的主窗口样式 |
pygame.display.set_caption("My Game") | 设置窗口标题 | |
填充窗口颜色 | screen.fill((255, 255, 255)) | |
更新窗口 | pygame.display.update() | |
背景颜色 | screen.fill((255, 255, 255)) |
screen = pygame.display.set_mode(size=(),flags=0) ——>flags
pygame.FULLSCREEN 创建一个全屏窗口 pygame.HWSURFACE 创建一个硬件加速窗口,必须和FULLSCREEN同时使用 pygame.OPENGL 创建一个OPENGL渲染窗口 pygame.RESIZABLE 创建一个可以改变大小的窗口 pygame.DOUBLEBUF 创建一个双缓冲窗口,建议在HWSURFACE或OPENGL时使用 pygame.NOFRAME 创建一个没有边框的窗口
4.动画
获取坐标 | get_rect() |
5.屏幕/画布/Surface表面/主窗体
创建Surface对象 | screen = pygame.display.set_mode(400,400) | |
创建一个带文本对象 | text = f.render("哈哈哈哈",True,(255,255,255),(0,0,0)) | |
创建一个带图像对象 | surface_image = pygame.image.load("图片路径") | |
渲染到屏幕 | scrren.blit(source, dest, area=None, special_flags = 0) 通过blit方法将其绘制出来,textRect表示位置坐标 | source:表示要粘贴的 Surface 对象 dest:主窗口中的坐标位置 area: Rect 对象,默认为 None special_flags:可选参数 |
刷新显示屏幕 | pygame.display.flip() | |
创建图像 | Surface=pygame.Surface(size=(width,height),flags,depth) | size:表示Surface对象的矩形区域大小
|
外部加载图像 | pygame.image.load('图片路径').convert() |
pygame.display.flip()
pygame.display.get_surface()获取当前显示的Surface对象pygame.display.flip()更新整个待显示的Surface对象到屏幕上pygame.display.update()更新部分软件界面显示pygame.display.lnfo()产生一个VideInfo对象,包含了显示界面的相关信息pygame.display.set_icon()设置左上角的游戏图标,图标尺寸大小为32*32pygame.display.iconify()将显示的主窗口即Surface对象最小化,或者隐藏pygame.display.get_active()当前显示界面显示在屏幕上时返回True,如果窗口被隐藏和最小化时则返回False
Surface 模块还提供了处理图像的其他方法
pygame.Surface.blit() 将一个图像(Surface 对象)绘制到另一个图像上 pygame.Surface.convert() 修改图像(Surface 对象)的像素格式 pygame.Surface.fill() 使用纯色填充 Surface 对象 pygame.Surface.scroll() 复制并移动 Surface 对象 pygame.Surface.set_alpha() 设置整个图像的透明度 pygame.Surface.get_at() 获取一个像素的颜色值 pygame.Surface.set_at() 设置一个像素的颜色值 pygame.Surface.get_palette() 获取 Surface 对象 8 位索引的调色板 pygame.Surface.map_rgb() 将一个 RGBA 颜色转换为映射的颜色值 pygame.Surface.set_clip() 设置该 Surface 对象的当前剪切区域 pygame.Surface.subsurface() 根据父对象创建一个新的子 Surface 对象 pygame.Surface.get_offset() 获取子 Surface 对象在父对象中的偏移位置 pygame.Surface.get_size() 获取 Surface 对象的尺寸
6.矩形Rect
位置 | Rect=pygame.Rect(left,top,width,height) | rect_x = 50 rect_y = 50 |
大小 | rect_width = 50 rect_height = 50 | |
绘制矩形 | pygame.draw.rect(screen, red, [rect_x, rect_y, rect_width, rect_height]) |
pygame.Rect.copy() | 复制矩形 |
pygame.Rect.move() | 移动矩形区域,接受一个列表参数 |
pygame.Rect.move_ip() | 移动矩形(无返回) |
pygame.Rect.inflate() | 增大或缩小矩形大小 |
pygame.Rect.clamp() | 将矩形移到另一个矩形内 |
pygame.Rect.union() | 返回一个两个矩形合并后的矩形。 |
pygame.Rect.fit() | 按纵横比调整矩形的大小或移动矩形。 |
pygame.Rect.contains() | 测试一个矩形是否在另一个矩形内 |
pygame.Rect.collidepoint() | 测试点是否在矩形内 |
pygame.Rect.colliderect() | 测试两个矩形是否重叠 |
7.事件Event
7.1 事件处理方法
pygame.event.get() | 从事件队列获取一个事件,并在事件队列中删除该事件 键盘鼠标操作 |
pygame.event.wait() | 阻塞直至事件发生才会继续执行,若没有事件发生将一直处于阻塞状态 |
pygame.event.set_blocked() | 控制哪些事件禁止进入队列,如果参数值为None,则表示禁止所有事件进入 |
pygame.event.pump() | 调用该方法后,Pygame会自动处理事件队列 |
pygame.event.poll() | 会根据实际情况返回一个真实的事件,或者一个None |
pygame.event.peek() | 检测某类事件是否在队列中 |
pygame.event.clear() | 从队列中清除所有的事件 |
pygame.event.get_blocked() | 检测某一类型的事件是否被禁止进入队列 |
pygame.event.post() | 放置一个新的事件在队列中 |
pygame.event.Event() | 创建一个用户自定义的事件 |
pygame.event.set_allowed() | 控制哪些事件允许进入队列 |
7.2 窗口事件
用户按下窗口的关闭按钮 | qouit | |
窗口缩放 | videorsize | |
窗口部分公开 | videoexpose |
7.3 鼠标事件
鼠标移动 | mousemotion | pos,rel,button |
鼠标按下 | mousebuttondown | pos,button |
鼠标放开 | mousebuttondown | pos,button |
不同事件类型对应着不同的成员属性
pygame.event.MOUSEMOTION鼠标移动事件event.pos 相对于窗口左上角,鼠标的当前坐标值(x,y)event.rel 鼠标相对运动距离(X,Y),相对于上次事件event.buttons 鼠标按钮初始状态(0,0,0),分别对应(左键,滑轮,右键),移动过程中点击那个键,相应位置变会为1pygame.event.MOUSEBUTTONUP鼠标键释放事件event.pos 相对于窗口左上角,鼠标的当前坐标值(x,y)event.button 鼠标释放键编号(整数)左键为1,按下滚动轮2、右键为3pygame.event.MOUSEBUTTONDOWN 鼠标键按下事件event.pos 相对于窗口左上角,鼠标的当前坐标值(x,y)event.button 鼠标按下键编号(整数),左键为1,按下滚动轮2、右键为3,向前滚动滑轮4、向后滚动滑轮5
7.4 键盘事件
键盘按下 | keydown | unicode,key,mod |
键盘释放 | keyup | key,mod |
常用的键 | |
退格键(Backspace) | K_BACKSPACE |
制表键(Tab) | K_TAB |
清除键(Clear) | K_CLEAR |
回车键(Enter) | K_RETURN |
暂停键(Pause) | K_PAUSE |
退出键(Escape) | K_ESCAPE |
退出按钮 | quit |
空格键(Space) | K_SPACE |
0~9 | K_0~K_9 |
a~z | K_a~k_z |
删除键(delete) | K_DELETE |
小键盘的0~9 | K_KP0~K_KP9 |
F1~F15 | K_F1~K_F15 |
向上箭头 | K_UP |
向下箭头 | K_DOWN |
向右箭头 | K_RIGHT |
向左箭头 | K_LEFT |
同时按下Alt键 | KMOD_ALT |
7.5 游戏手柄事件
游戏手柄(Joystick or pad)移动 | joyaxismotion | joy,axis,value |
游戏球(Joy ball)移动 | joyballomotion | joy,axis,value |
游戏手柄(Joystick)移动 | joyhatmotion | joy,axis,value |
游戏手柄按下 | joybuttondown | joy,button |
游戏手柄放开 | joybutonup | joy,button |
7.6 pygame事件
Pygame被激活或者隐藏 | ativeevent | |
Pygame窗口缩放 | videosize | |
Pygame窗口部分公开(expose) | videoexpose | j |
触发一个用户事件 | userevent |
8.时钟Clock
以毫秒为单位获取时间 | pygam.time.get_ticks() | |
使程序暂停一段时间 | pygame.time.wait() | |
定时器 | pygame.time.set_time() | 每隔一段时间就去执行一些动作 |
时间对象 | pygame.time.Clock() | 确定游戏运行帧数 |
帧数率(FPS) | pygame.time.Clock.tick() | 更新clock对象 |
pygame.time.Clock.get_time() | 获取上一个tick中的时间 | |
pygame.time.Clock.get_fps() | 计算clock对象的帧数 |
9.精灵Sprite
sprite(pygame.sprite)模块 | |
self.image | 加载要显示的精灵图片,控制图片大小和填充色 |
self.rect | 精灵图片显示在哪个位置 |
Sprite.update() | 刷新精灵图,使其相应效果生效 |
Sprite.add() | 添加精灵图到精灵组中(groups) |
Sprite.remove() | 从精灵组中删除选中的精灵图 |
Sprite.kill() | 删除精灵组中全部的精灵 |
Sprite.alive() | 判断某个精灵是否属于精灵组 |
精灵容器(group 类) | |
检测精灵是否碰撞的方法 | |
pygame.sprite.collide_rect() | 两个精灵之间的矩形检测,即矩形区域是否有交汇,返回一个布尔值。 |
pygame.sprite.collide_circle() | 两个精灵之间的圆形检测,即圆形区域是否有交汇,返回一个布尔值。 |
pygame.sprite.collide_mask() | 两个精灵之间的像素蒙版检测,更为精准的一种检测方式。 |
pygame.sprite.spritecollide() | 精灵和精灵组之间的矩形碰撞检测,一个组内的所有精灵会逐一地对另外一个单个精灵进行碰撞检测,返回值是一个列表,包含了发生碰撞的所有精灵。 |
pygame.sprite.spritecollideany() | 精灵和精灵组之间的矩形碰撞检测,上述函数的变体,当发生碰撞时,返回组内的一个精灵,无碰撞发生时,返回 None。 |
pygame.sprite.groupcollide() | 检测在两个组之间发生碰撞的所有精灵,它返回值是一个字典,将第一组中发生碰撞的精灵作为键,第二个组中发生碰撞的精灵作为值。 |
10.颜色
RGB | red = (255, 0, 0) | |
填充窗口背景颜色 | screen.fill((255, 255, 255)) |
11.音乐
加载音乐 | sound = pygame.mixer.Sound('C:/Users/myun/Music/狙击枪.wav') | |
pygame.mixer.load('C:/Users/myun/Music/狙击枪.wav') | ||
pygame.mixer.music.load(filename) | ||
播放特效音 | pygame.mixer.Sound(filename) | |
播放音乐 | sound.play() | |
pygame.mixer.music.play(-1, 0.0) | 第一个参数为播放的次数(-1表示无限循环) 第二个参数是设置播放的起点(单位为秒) | |
停止播放 | pygame.mixer.music.stop() |
12.文字和字体
获取文字对象 | fonts = pygame.font.get_fonts() | 自定义字体 |
pygame.font.SysFont(name, size, bold=False, italic=False)
name size:表示字体的大小 bold:字体是否加粗 italic:字体是否为斜体 | 系统 自带字体 | |
my_font = pygame.font.Font(filename所在路径, size) | 外部 导入字体 | |
字体模块 | ||
初始化字体模块 | pygame.font.init() | |
取消初始化字体模块 | pygame.font.quit() | |
检查字体模块是否被初始化,返回一个布尔值。 | pygame.font.get_init() | |
获得默认字体的文件名。返回系统中字体的文件名 | pygame.font.get_default_font() | |
获取所有可使用的字体,返回值是所有可用的字体列表 | pygame.font.get_fonts() | |
从系统的字体库中匹配字体文件,返回值是完整的字体文件路径 | pygame.font.match_font() | |
从系统的字体库中创建一个 Font 对象 | pygame.font.SysFont() | 系统获取字体 |
从一个字体文件创建一个 Font 对象 | pygame.font.Font(filename,size) | 路径获取字体 |
处理字体文对象 | ||
该函数创建一个渲染了文本的 Surface 对象 | pygame.font.Font.render(text,antialias,color,background=None) antialias:布尔值参数,是否是平滑字体(抗锯齿) | 显示字体 |
该函数返回渲染文本所需的尺寸大小,返回值是一个一元组 (width,height) | pygame.font.Font.size() | |
是否为文本内容绘制下划线 | pygame.font.Font.set_underline() | |
检查文本是否绘制了下划线 | pygame.font.Font.get_underline() | |
启动粗体字渲染 | pygame.font.Font.set_bold() | |
检查文本是否使用粗体渲染 | pygame.font.Font.get_bold() | |
启动斜体字渲染 | pygame.font.Font.set_italic() | |
获取字符串中每一个字符的详细参数 | pygame.font.Font.metrics() | |
检查文本是否使用斜体渲染 | pygame.font.Font.get_italic() | |
获取字体文本的行高 | pygame.font.Font.get_linesize() | |
获取字体的高度 | pygame.font.Font.get_height() | |
获取字体顶端到基准线的距离 | pygame.font.Font.get_ascent() | |
获取字体底端到基准线的距离 | pygame.font.Font.get_descent() |
13.绘制图形
变形 | pygame.transform.scale() | 将图片缩放至指定的大小,并返回一个新的Surface对象 |
pygame.transform.rotate() | 将图片旋转至指定角度 | |
pygame.transform.rotozoom() | 以角度旋转图像,同时将图像缩小或放大至指定的倍数 | |
矩形 | rect(0,0,20,50) pygame.draw.rect(surface,color,rect,width) | surface:指主窗口 color:该参数用于图形着色 rect:绘制图形的位置和大小 width:可选参数,指定边框的宽度, 默认为0,表示填充该矩形区域 |
多边形 | pygame.draw.polygon(surface,color,points,width) | points表示组成多边形的多个(x,y)坐标 |
圆形 | pygame.draw.circle(surface,color,pos,radius,width=0) | pos:该参数用来指定圆心的位置 radius:用来指定圆的半径 |
椭圆形 | pygame.draw.ellipse(surface,Rect,width=0) | start_angle:该段该段圆弧的起始角度 |
圆弧曲线 | pygame.draw.arc(Surface,color,Rect,start_angle,stop_angle,width=1) | stop_angle:终止角度 |
弧线 | pygame.draw.arc() | |
直线 | pygame.draw.line(surface,color,start_pos,end_pos,width=1) | start_pos和end_pos:表示线段的起始位置和结束位置(x,y) width=1:表示直线的宽度,默认为1 |
多条直线 | pygame.line(surface,color,closed,pointlist,width=1) | |
多条连续的线段 | pygame.draw.lines() | pointlist:参数列表,包含了一些列点坐标的列表 closed:布尔参数,如果设置为True,表示直线的第一个端点和直线的最后一个端点要首尾相连 |
平滑线 (抗锯齿) | pygame.aaline(surface,color,start_pos,end_pos,blend=1) | |
多条连续的线段 | pygame.draw.aalines(surface,color,closed,pointlist,blend=1) |