python图形化编程pygame游戏模块

文章目录:

一:语句使用模板

基本框架 

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()
退出pygamepygame.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表示位置坐标
screen.blit(text,textRect)

source:表示要粘贴的 Surface 对象

dest:主窗口中的坐标位置

area: Rect 对象,默认为 None

special_flags:可选参数 

刷新显示屏幕pygame.display.flip()

创建图像Surface=pygame.Surface(size=(width,height),flags,depth)

size:表示Surface对象的矩形区域大小


flage:HWSURFACE存于显存中和SPCALPHA每个像素包含一个alpha通道


depth:指定像素的颜色深度

外部加载图像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 键盘事件

键盘按下keydownunicode,key,mod
键盘释放keyupkey,mod
                                                                                   常用的键
退格键(Backspace)K_BACKSPACE    
制表键(Tab)K_TAB
清除键(Clear)K_CLEAR
回车键(Enter)K_RETURN
暂停键(Pause)K_PAUSE
退出键(Escape)K_ESCAPE
退出按钮quit
空格键(Space)K_SPACE    
0~9K_0~K_9
a~zK_a~k_z    
删除键(delete)K_DELETE
小键盘的0~9K_KP0~K_KP9    
F1~F15K_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 类)

# 创建精灵组
group = pygame.sprite.Group()# 向组内添加一个精灵
group.add(sprite_one)
                                                                                        检测精灵是否碰撞的方法
pygame.sprite.collide_rect() 两个精灵之间的矩形检测,即矩形区域是否有交汇,返回一个布尔值。
pygame.sprite.collide_circle()两个精灵之间的圆形检测,即圆形区域是否有交汇,返回一个布尔值。
pygame.sprite.collide_mask() 两个精灵之间的像素蒙版检测,更为精准的一种检测方式。
pygame.sprite.spritecollide() 精灵和精灵组之间的矩形碰撞检测一个组内的所有精灵逐一地对另外一个单个精灵进行碰撞检测,返回值是一个列表,包含了发生碰撞的所有精灵。
pygame.sprite.spritecollideany()精灵和精灵组之间的矩形碰撞检测,上述函数的变体,当发生碰撞时,返回组内的一个精灵,无碰撞发生时,返回 None。
pygame.sprite.groupcollide()检测在两个组之间发生碰撞的所有精灵,它返回值是一个字典,将第一组中发生碰撞的精灵作为键,第二个组中发生碰撞的精灵作为值。

10.颜色

RGBred = (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)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/754929.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

探索编程迷宫:选择你的职业赛道

在现代科技的浪潮中,程序员的职业赛道就像是一座迷宫,充满着前端的美丽花园,后端的黑暗洞穴,以及数据科学的神秘密室。这个迷宫中,每一条通道都充满了挑战和机遇,而每一个行走其中的人都在寻找着属于自己的…

LM studio使用gemmar聊天小试

通过LM studio可以方便的使用各种模型,使用LM提供的chat界面或者是使用python代码。 试试代码 在windows下使用python简单一试,例子直接复制LM界面上的代码: 用pip安装 openai包在LM界面 Start Server 需要安装 openai包。 本地电脑是I7…

C++ GUI库FLTK的基本使用

文章目录 1. Ubuntu下FLTK编译和使用2. Windows下FLTK编译使用 1. Ubuntu下FLTK编译和使用 编译源码 安装依赖 sudo apt install libx11-dev sudo apt install cmake make编译 # 进入源码目录fltk-1.3.9 mkdir build cd build cmake .. make库文件位于build/lib中 准备头文件#…

【如何关闭Windows自动更新的6种方法】

关闭Windows自动更新的6种方法 1. 前言2. 方法1:使用本地组策略编辑器(适用于Windows 10 Pro和Enterprise版本)3. 方法2:使用注册表编辑器4. 方法3:服务管理5. 方法4:使用控制面板(仅适用于Wind…

【Golang星辰图】Go语言驾驭物联网:探索MQTT、CoAP、GPIO、串口、TLS和UDP的实现

打通物联网通信路:Go语言实现MQTT、CoAP、GPIO、串口、TLS和UDP协议详解 前言 物联网(IoT)的快速发展给设备间的通信提出了新的需求。本文将介绍使用Go语言实现物联网常用通信协议的相关库,包括MQTT、CoAP、GPIO、串口、TLS和UD…

服务器时间不准确的风险

1.误导系统记录:服务器时间不准确会误导系统记录文件的创建时间,导致文件的顺序发生变化。这对于需要按照时间顺序处理文件的系统来说,可能会引发严重的问题。 2.影响任务执行:对于有时间依赖的任务,服务器时间不准确会…

[c++]内存管理

1. C/C内存分布 我们先来看下面的一段代码和相关问题 int globalVar 1; static int staticGlobalVar 1; void Test() { static int staticVar 1; int localVar 1; int num1[10] { 1, 2, 3, 4 }; char char2[] "abcd"; const char* pChar3 "abcd"; …

C++11 新特性:常量表达式 constexpr(上)

C11 引入了constexpr关键字,用于定义常量表达式,从而使变量获得在编译阶段即可计算出结果的能力,提高运行时的效率。 constexpr 的使用分两篇文章介绍,今天这篇文章主要讲解什么是常量表达式和 constexpr 典型使用场景的前三种用…

分布式事务的解决方案--Seata架构

一、Seata的XA模式 二、AT模式原理 三、TCC模式原理 四、MQ分布式事务 异步,非实时,实现最终的一致性。 四、分布式事务的解决方案

Stable Diffusion WebUI 生成参数:宽度/高度/生成批次/每批数量/提示词相关性/随机种子

本文收录于《AI绘画从入门到精通》专栏,专栏总目录:点这里。 大家好,我是水滴~~ 本文将继续了解 Stable Diffusion WebUI 的生成参数,主要内容有:宽度、高度、生成批次、每批数量、提示词相关性、随机种子。希望能对你…

Visual Studio 2022下配置 OpenMP 多线程编程环境与运行

目录 一创建项目时选择“创建新项目 -> 空项目 -> 下一步 -> 创建” 二右键“源文件 -> 添加 -> 新建项 -> 添加” 三配置 1. 测试程序: 最开始的时候错误很多: 2.将 “ include "stdafx.h" ” 删掉,添加 “…

电影院售票网站|基于SSM框架+ Mysql+Java+ B/S结构的电影院售票网站设计与实现(可运行源码+数据库+设计文档)

推荐阅读100套最新项目 最新ssmjava项目文档视频演示可运行源码分享 最新jspjava项目文档视频演示可运行源码分享 最新Spring Boot项目文档视频演示可运行源码分享 2024年56套包含java,ssm,springboot的平台设计与实现项目系统开发资源(可…

linux安装mysql8.x

检查卸载mysql 1.查看当前安装mysql情况,查找以前是否装有mysql [rootmaster01 /]# rpm -qa|grep -i mysql mysql-libs-5.1.73-8.el6_8.x86_642.执行命令删除安装的MySQL [rootmaster01 /]# rpm -ev mysql-libs-5.1.73-8.el6_8.x86_64 --nodeps3.查看之前安装的MySQ…

操作系统知识-存储管理+文件管理管理-嵌入式系统设计师备考笔记

0、前言 本专栏为个人备考软考嵌入式系统设计师的复习笔记,未经本人许可,请勿转载,如发现本笔记内容的错误还望各位不吝赐教(笔记内容可能有误怕产生错误引导)。 本章的主要内容见下图: 1、存储管理&#…

【算法与数据结构】二叉树(前中后)序遍历

文章目录 📝前言🌠 创建简单二叉树🌉二叉树的三种遍历🌠前序🌉中序遍历 🌠后序遍历 🌠二叉树节点个数🌉二叉树节点个数注意点 🚩总结 📝前言 一棵二叉树是结…

6-181 统计无向图的连通分量

要求实现函数,能够统计并返回无向图(顶点数不超过100)的连通分量(极大连通子图)数,可增加自定义函数或借助STL(标准模板库)之queue(队列)。无向图采用邻接矩阵存储,输入的顶点从1开始编号,但顶点下标从0开始使用。 函数接口定义: int CountSubGraph(int mat[][N…

C++提高笔记(六)---STL函数对象、STL常用算法(遍历、查找)

1、STL-函数对象 1.1函数对象 1.1.1函数对象概念 概念: 重载函数调用操作符的类,其对象常称为函数对象 函数对象使用重载的()时,行为类似函数调用,也叫仿函数 本质:函数对象(仿函数)是一个类,不是一个…

linux常用指令

前言 大家好我是jiantaoyab,这篇文章给大家介绍Linux下常用的命令。 指令的本质也是Linux上的一些程序。 cd cd - 回到最近从哪来的路径 cd ~ 当前用户对应的工作目录(普通用户:/home/xx root用户:/root) cd / 去…

C语言经典面试题目(十九)

1、什么是C语言?简要介绍一下其历史和特点。 C语言是一种通用的高级计算机编程语言,最初由贝尔实验室的Dennis Ritchie在1972年至1973年间设计和实现。C语言被广泛应用于系统编程、应用程序开发、嵌入式系统和操作系统等领域。它具有高效、灵活、可移植…

【vscode】vscode重命名变量后多了很多空白行

这种情况,一般出现在重新安装 vscode 后出现。 原因大概率是语言服务器没设置好或设置对。 以 Python 为例,到设置里搜索 "python.languageServer",将 Python 的语言服务器设置为 Pylance 即可。