快速入门pygame

安装pygame模块

pip install pygame

游戏的初始化和退出

  • 初始化

    pygame.init()
    # 导入并初始化所有pygame模块,使用其他pygame模块之前必须先调用init方法
  • 退出

    pygame.quit()
    # 卸载所有的pygame模块,在游戏结束之前调用,清空内存
  • 实例

    import pygame
    pygame.init()
    pygame.quit()

游戏中的坐标系

  • 左上角顶点为原点

  • x轴水平向右,逐渐增加

  • y轴垂直向下,逐渐增加

  • 在游戏中,所有的可见元素全部都是以矩形区域来描述位置,主要参数有(x,y,(width,height))

矩形区域

  • pygame.Rect

# 使用Surface对象的get_rect()方法创建一个Rect对象
ball=pygame.image.load('qiu.png')
ball=pygame.transform.scale(ball,(130,130))
ballrect=ball.get_rect()

# Rect对象的属性
x,y
top, left, bottom, right
topleft, bottomleft, topright, bottomright
midtop, midleft, midbottom, midright
center, centerx, centery
size, width, height
w,h
# 这些都可以分配给:
rect1.right = 10
rect2.center = (20,30)
  • pygame.Rect.move([x,y])

    • 移动矩形区域

显示函数

  • pygame.display

  • pygame.display.set_mode()

    • 初始化窗口或屏幕以进行显示

    # set_mode(size=(0, 0), flags=0, depth=0)
    ## size表示一对表示宽度和高度的数字
    # flag是附加选项的集合,可以控制所需要的显示类型
    '''
    FULLSCREEN 创建一个全屏窗口
    RESIZABLE 创建一个可以改变大小的窗口
    NOFRAME 创建一个没有边框的窗口
    
    screen=pygame.display.set_mode((640,640),pygame.FULLSCREEN)
    '''
    # depth表示要用于颜色的位数
  • pygame.display.get_surface()->Surface

    • 获取对当前设置的显示Surface的引用

  • pygame.display.flip()

    • 更新完整屏幕

  • pygame.display.update()

    • 更新部分屏幕

  • pygame.display.get_desktop_sizes()

    • 获取活动桌面的大小

  • pygame.display.toggle_fullscreen()

    • 切换全屏与窗口状态

  • pygame.display.set_caption(标题)

    • 更改窗口标题

  • pygame.display.set_icon(文件路径)

    • 更改窗口图标

事件处理方法

  • pygame.event

  • pygame.event.get()

    • 从队列获取事件

  • pygame.event.wait()

    • 等待队列中的单个事件,默认为任意事件

  • event.type

    • 获取事件的类型

键盘事件

  • pygame.key

  • pygame.pygame.KEYDOWN

    • 键盘按下事件

  • pygame.KEYUP

    • 键盘弹起事件

这两个事件均包含key属性,是一个整数id,代表键盘上具体的某个按键
  • key常量

KeyASCII
ASCII
描述

K_BACKSPACE

\b

退格键(Backspace)

K_TAB

制表键(Tab)

K_CLEAR

清除键(Clear)

K_RETURN

回车键(Enter)

K_PAUSE

暂停键(Pause)

K_ESCAPE

^[

退出键(Escape)

K_SPACE

空格键(Space)

K_EXCLAIM

!

感叹号(exclaim)

K_QUOTEDBL

"

双引号(quotedbl)

K_HASH

#

井号(hash)

K_DOLLAR

$

美元符号(dollar)

K_AMPERSAND

&

and 符号(ampersand)

K_QUOTE

单引号(quote)

K_LEFTPAREN

(

左小括号(left parenthesis)

K_RIGHTPAREN

)

右小括号(right parenthesis)

K_ASTERISK

*

星号(asterisk)

K_PLUS

+

加号(plus sign)

K_COMMA

,

逗号(comma)

K_MINUS

-

减号(minus sign)

K_PERIOD

.

句号(period)

K_SLASH

/

正斜杠(forward slash)

K_0

0

0

K_1

1

1

K_2

2

2

K_3

3

3

K_4

4

4

K_5

5

5

K_6

6

6

K_7

7

7

K_8

8

8

K_9

9

9

K_COLON

:

冒号(colon)

K_SEMICOLON

;

分号(semicolon)

K_LESS

<

小于号(less-than sign)

K_EQUALS

=

等于号(equals sign)

K_GREATER

>

大于号(greater-than sign)

K_QUESTION

?

问号(question mark)

K_AT

@

at 符号(at)

K_LEFTBRACKET

[

左中括号(left bracket)

K_BACKSLASH

\

反斜杠(backslash)

K_RIGHTBRACKET

]

右中括号(right bracket)

K_CARET

^

脱字符(caret)

K_UNDERSCORE

_

下划线(underscore)

K_BACKQUOTE

`

重音符(grave)

K_a

a

a

K_b

b

b

K_c

c

c

K_d

d

d

K_e

e

e

K_f

f

f

K_g

g

g

K_h

h

h

K_i

i

i

K_j

j

j

K_k

k

k

K_l

l

l

K_m

m

m

K_n

n

n

K_o

o

o

K_p

p

p

K_q

q

q

K_r

r

r

K_s

s

s

K_t

t

t

K_u

u

u

K_v

v

v

K_w

w

w

K_x

x

x

K_y

y

y

K_z

z

z

K_DELETE

删除键(delete)

K_KP0

0(小键盘)

K_KP1

1(小键盘)

K_KP2

2(小键盘)

K_KP3

3(小键盘)

K_KP4

4(小键盘)

K_KP5

5(小键盘)

K_KP6

6(小键盘)

K_KP7

7(小键盘)

K_KP8

8(小键盘)

K_KP9

9(小键盘)

K_KP_PERIOD

.

句号(小键盘)

K_KP_DIVIDE

/

除号(小键盘)

K_KP_MULTIPLY

*

乘号(小键盘)

K_KP_MINUS

-

减号(小键盘)

K_KP_PLUS

+

加号(小键盘)

K_KP_ENTER

回车键(小键盘)

K_KP_EQUALS

=

等于号(小键盘)

K_UP

向上箭头(up arrow)

K_DOWN

向下箭头(down arrow)

K_RIGHT

向右箭头(right arrow)

K_LEFT

向左箭头(left arrow)

K_INSERT

插入符(insert)

K_HOME

Home 键(home)

K_END

End 键(end)

K_PAGEUP

上一页(page up)

K_PAGEDOWN

下一页(page down)

K_F1

F1

K_F2

F2

K_F3

F3

K_F4

F4

K_F5

F5

K_F6

F6

K_F7

F7

K_F8

F8

K_F9

F9

K_F10

F10

K_F11

F11

K_F12

F12

K_F13

F13

K_F14

F14

K_F15

F15

K_NUMLOCK

数字键盘锁定键(numlock)

K_CAPSLOCK

大写字母锁定键(capslock)

K_SCROLLOCK

滚动锁定键(scrollock)

K_RSHIFT

右边的 shift 键(right shift)

K_LSHIFT

左边的 shift 键(left shift)

K_RCTRL

右边的 ctrl 键(right ctrl)

K_LCTRL

左边的 ctrl 键(left ctrl)

K_RALT

右边的 alt 键(right alt)

K_LALT

左边的 alt 键(left alt)

K_RMETA

右边的元键(right meta)

K_LMETA

左边的元键(left meta)

K_LSUPER

左边的 Window 键(left windows key)

K_RSUPER

右边的 Window 键(right windows key)

K_MODE

模式转换键(mode shift)

K_HELP

帮助键(help)

K_PRINT

打印屏幕键(print screen)

K_SYSREQ

魔术键(sysrq)

K_BREAK

中断键(break)

K_MENU

菜单键(menu)

K_POWER

电源键(power)

K_EURO

欧元符号(euro)

# 按下a键退出
  if event.type == pygame.KEYDOWN:
      if event.key == pygame.K_a:
          pygame.quit()
  • 组合键的常量定义

KeyASCII
描述

KMOD_NONE

木有同时按下组合键

KMOD_LSHIFT

同时按下左边的 shift 键

KMOD_RSHIFT

同时按下右边的 shift 键

KMOD_SHIFT

同时按下 shift 键

KMOD_CAPS

同时按下大写字母锁定键

KMOD_LCTRL

同时按下左边的 ctrl 键

KMOD_RCTRL

同时按下右边的 ctrl 键

KMOD_CTRL

同时按下 ctrl 键

KMOD_LALT

同时按下左边的 alt 键

KMOD_RALT

同时按下右边的 alt 键

KMOD_ALT

同时按下 alt 键

KMOD_LMETA

同时按下左边的元键

KMOD_RMETA

同时按下右边的元键

KMOD_META

同时按下元键

KMOD_NUM

同时按下数字键盘锁定键

KMOD_MODE

同时按下模式转换键

  • pygame.key.get_pressed()

    • 获取键盘上所有按键的状态

    • 返回一个由布尔值组成的序列

# 按下a键退出
  if event.type == pygame.KEYDOWN:
      keys=pygame.key.get_pressed()
      if keys[pygame.K_a]:
          pygame.quit()
  • pygame.key.get_mods()

    • 检测是否有组合键被按下

# 按下Ctrl键退出
  if event.type == pygame.KEYDOWN:
      keys=pygame.key.get_pressed()
      if pygame.key.get_mods() & pygame.KMOD_CTRL:
              pygame.quit()
  • pygame.key.set_repeat()

    • 控制重复响应持续按下按键的时间

# delay参数(毫秒)控制按下多久后开始发送第一个pygame.KEYDOWN事件
# interval参数设置发送两个事件之间的间隔

鼠标事件

  • pygame.mouse

  • pygame.MOUSEBUTTONDOWN

    • 鼠标按下事件

  • pygame.MOUSEBUTTONUP

    • 鼠标松开事件

# 都有一个按键属性
# 鼠标滑轮滚动时也会触发这两个事件,向上滚动时按键会被设置为4,向下滚动时会被设置为5

  if event.type == pygame.MOUSEBUTTONDOWN:
      if event.button == 4:
          print(1)
  • pygame.MOUSEMOTION

    • 鼠标移动事件

  • pygame.mouse.set_visible(False)

    • 设置界面鼠标是否可见,False为不可见

  • pygame.mouse.get_pos()

    • 获取光标位置

字体对象

  • pygame.font

  • pygame.font.get_fonts()

    • 获取所有可用字体名

  • pygame.font.get_default_font()

    • 获取默认字体的文件名

  • pygame.font.SysFont()

    • 创建系统文字对象

    # SysFont(name, size, bold=False, italic=False)
    ## name为系统文字名字
    ## size为字体大小
    # bold为是否为粗体
    # italic为是否为斜体
  • pygame.font.Font()

    • 创建自定义字体对象

图像处理方法

  • pygame.image

  • 图像作为Surface对象加载

  • pygame.image.load(文件名)

    • 从文件中加载图像

  • pygame.Surface.set_colorkey()

    • 设置当前Surface对象的colorkeys,当绘制Surface对象时,将所有与colorkeys相同的颜色值绘制为透明

声音处理

  • pygame.mixer

    • 控制声音的模块

  • pygame.mixer.Sound(文件名)

    • 从文件或缓冲区对象创建一个新的Sound对象

方法
作用

pygame.mixer.Sound.play

开始播放声音

pygame.mixer.Sound.stop

停止声音播放

pygame.mixer.Sound.fadeout

淡出后停止声音播放

pygame.mixer.Sound.set_volume

设置此声音的播放音量[0.0-1.0]

pygame.mixer.Sound.get_volume

获取播放音量

pygame.mixer.Sound.get_num_channels

计算此声音播放的次数

pygame.mixer.Sound.get_length

获取Sound的长度

pygame.mixer.Sound.get_raw

返回Sound样本的字节串副本。

  • pygame.mixer.music

    • 控制音乐的模块

  • pygame.mixer.music.load(filename)

    • 载入一个音乐文件用于播放

    • 如果已经有音乐在播放,那么前一个音乐会被停止

  • pygame.mixer.music.play()

    • 开始播放音乐

  • pygame.mixer.music.rewind()

    • 从新开始播放

  • pygame.mixer.music.stop()

    • 结束音乐播放

  • pygame.mixer.music.pause()

    • 暂停音乐播放

  • pygame.mixer.music.unpause()

    • 回复音乐播放

  • pygame.mixer.music.set_endevent(type)

    • 在播放结束后发出一个事件

# 结束播放后退出界面
pygame.mixer.music.set_endevent(pygame.QUIT)

Surface对象

  • pygame.Surface

  • pygame中用于表示图像的对象

  • pygame.Surface.blit()

    • 将一个Surface对象绘制到另一个Surface对象上

# blit(source, dest, area=None, special_flags = 0) -> Rect
# 将source指定的对象会知道该对象上,dest指定绘制的位置,area是一个Rect对象,表示限定source指定的Surface对象的范围
# 将ball Surface对象绘制到screen对象上的ballrect位置上,如果传入的是Surface对象,后一个参数会默认为对象的左上角坐标
screen.blit(ball,ballrect)
  • pygame.Surface.blits()

# 绘制多个图像到对象上
screen.blits([(ball,ballrect),(ball,(300,300))])
  • pygame.Surface.convert()

    • 修改图像的格式

    • 如果原来包含alpha通道,转换后不会保留

  • pygame.Surface.convert_alpha()

    • 修改图像的格式

    • 会保留alpha通道

时间模块

  • pygame.time

  • pygame.time.get_ticks()

    • 以毫秒为单位获取时间

  • pygame.time.wait()

    • 暂停一段时间

  • pygame.time.delay()

    • 暂停一段时间,使用处理器而不是休眠,所以比上一个要准确

  • pygame.time.set_timer()

    • 在实践中队列上重复创建一个事件

  • pygame.time.Clock()

    • 创建一个对象来帮助跟踪事件

  • pygame.time.Clock.tick()

    • 更新clock对象

    • 用来控制帧率

transform模块

  • pygame.transform

  • 移动像素或调整像素大小的操作,返回新的Surface

  • 一些变换是破坏性的,会丢失像素数据,例如调整大小和旋转

  • pygame.transform.flip()

    • 使垂直和水平翻转

# flip(Surface, xbool, ybool) -> Surface
# Surface为需要翻转的图像
# xbool为水平翻转
# ybool为垂直翻转
  • pygame.transform.scale()

    • 调整大小到新的分标率

# scale(Surface, (width, height), DestSurface = None) -> Surface
# surface为要调整的对象
# (width, height)为要调整的大小
  • pygame.transform.rotate()

    • 旋转图像

# rotate(Surface, angle) -> Surface

精灵对象

  • pygame.sprite

  • 用作游戏中不同类型对象的基类

  • 在对Sprite进行子类化时,请务必在Sprite添加到Groups之前调用基本初始值设定项。 例如:

class Block(pygame.sprite.Sprite):

    #构建函数 传入颜色和它的x、y坐标
    def __init__(self, color, width, height):

       #调用父类(Sprite)的构建函数
       pygame.sprite.Sprite.__init__(self)

       #创建一个图像,用某个颜色填充
       #这也可以是从磁盘加载的图像
       self.image = pygame.Surface([width, height])
       self.image.fill(color)

       #获取具有图像尺寸的矩形对象
       #通过设置rect.x和rect.y的值来更新该对象的位置
       self.rect = self.image.get_rect()
  • pygame.sprite.Sprite.update()

    • 控制精灵行为的方法,默认不执行任何操作,可以重写此方法

  • pygame.sprite.Sprite.add()

    • 将精灵添加到组中

# add(*groups) -> None
# 可以将任意数量的Group实例作为参数传递,Sprite将被添加到它还不是其成员的组中
  • pygame.sprite.Sprite.remove()

    • 从组中删除精灵

# remove(*groups) -> None
# 可以将任意数量的Group实例作为参数传递。 Sprite将从其当前所属的组中删除
  • pygame.sprite.Group()

    • 用于保存和管理多个Sprite对象的容器类

方法
作用
解释

pygame.sprite.Group.sprites

此组包含的Sprite列表

您也可以从组中获取迭代器,但在修改它时不能对组进行迭代。

pygame.sprite.Group.copy

复制组

pygame.sprite.Group.add

将Sprite添加到此组

pygame.sprite.Group.remove

从组中删除Sprite

pygame.sprite.Group.has

测试一个Group是否包含Sprite

pygame.sprite.Group.update

在包含的Sprite上调用update方法

没有返回值

pygame.sprite.Group.draw

blit Sprite的图像

pygame.sprite.Group.clear

在Sprites上绘制背景

pygame.sprite.Group.empty

删除所有Sprite

  • pygame.sprite.collide_rect_ratio()

    • 使用rects检测两个精灵直接的碰撞

# collide_rect(left, right) -> bool
result = pygame.sprite.collide_rect_ratio( 0.5 )(sprite_1,sprite_2)

摄像头对象

  • pygame.camera

  • pygame.camera.list_cameras()

    • 返回一个可用的摄像头列表

# list_cameras() -> [cameras]
  • pygame.camera.Camera()

    • 加载一个摄像头

# Camera(device, (width, height), format) -> Camera
# 加载一个V4L2摄像头,默认高宽为640x480,默认格式为RBG
# ca=pygame.camera.Camera(c[0],(640,640),'RGB')
方法
作用

pygame.camera.Camera.start

打开摄像头、初始化然后开始捕捉画面

pygame.camera.Camera.stop

结束摄像头工作,还原并关闭摄像头

pygame.camera.Camera.get_controls

获得当前用户设定的值

pygame.camera.Camera.set_controls

修改当前摄像头设置(如果摄像头支持的话)

pygame.camera.Camera.get_size

返回被记录的图像的尺寸

pygame.camera.Camera.query_image

确认一帧图像是否准备好

pygame.camera.Camera.get_image

捕获一张图像并转换为一个 Surface 对象

pygame.camera.Camera.get_raw

以字符串的形式返回一张未修改的图像

  • pygame.camera.Camera.set_controls()

# set_controls(hflip = bool, vflip = bool, brightness) -> (hflip = bool, vflip = bool, brightness)
# 三个参数分别设置图像是否水平、垂直翻转,用整数值表示的图像亮度

最后更新于