Pygame模块参数汇总

一、HelloWorld

1 pygame.init()                           初始函数,使用pygame的第一步;

2 pygame.display.set_mod((600,500),0,32)

生成主屏幕screen;第一个参数是屏幕大小,第二个0表示不使用特性,可0用FULLSCREEN,RESIZEBLE,NOFRAME,DOUBLEBUF(双缓冲,使用时需用pygame.display.flip()来刷新屏幕)等替换,32表示色深;如果想创建一个硬件显示(surface会存放在显存里,从而有着更高的速度),必须和全屏一起使用:screen = pygame.display.set_mode(SCREEN_SIZE, HWSURFACE | FULLSCREEN, 32)。也可以把双缓冲(更快)DOUBLEBUF也加上,,不过记得要使用pygame.display.flip()来刷新显示。pygame.display.update()是将数据画到前面显示,而这个是交替显示的意思。OPENGL模式,这是一个得到广泛应用的3D加速显示模式。不过一旦使用了这个模式,pygame中的2D图像函数就不能用了。

注意:如果程序有问题,很可能进入了全屏模式就不太容易退出来了,所以最好先用窗口模式调试好,再改为全屏模式。

标志位

功能

FULLSCREEN

创建一个全屏窗口

DOUBLEBUF

创建一个“双缓冲”窗口,建议在HWSURFACE或者OPENGL时使用

HWSURFACE

创建一个硬件加速的窗口,必须和FULLSCREEN同时使用

OPENGL

创建一个OPENGL渲染的窗口

RESIZABLE

创建一个可以改变大小的窗口

NOFRAME

创建一个没有边框的窗口

3 pygame.display.set_caption("string")     命名

4 pygame.display.update()                刷新

5 pygame.display.list_modes()             查看本地显示器支持的分辨率;

6 screen.fill(0,0,0)

填充surface。填充有时候可以作为一种清屏的操作,把整个surface填上一种颜色:screen.fill((0, 0, 0))。同样可以提供一个矩形来制定填充哪个部分(这也可以作为一种画矩形的方法)。

二、绘图

pygame.draw.rect(surface,color,Rect,width=0) 画在surface上画一个矩形,除了surface和color,rect接受一个矩形的坐标和线宽参数,如果线宽是0或省略,则填充。

(一)rect(矩形)参数属性

1 r.left         左边x坐标的整数值
2 r.right        右边x坐标的整数值
3 r.top         顶部y坐标的整数值
4 r.bottom     底部y坐标的整数值
5 r.centerx     中央x坐标整数值
6 r.centery     中央y坐标整数值
7 r.width       宽度
8 r.height        高度
9 r.size           即元组(width,height)
10 r.topleft       (left,top)
11 r.topright      (right,top)
12 r.bottomleft   (left,bottom)
13 r.bottomright  (right,bottom)
14 r.midleft       (left,centery)
15 r.midright     (right,centery)
16 r.midtop       (centerx,top)
17 r.midbottom    (centerx,bottom)

(二)其他形状

1 pygame.draw.polygon(surface,color,pointlist,width=0)        

polygon就是多边形,用法类似rect,第一、第二、第四的参数都是相同的,只不过polygon会接受一系列坐标的列表,代表了各个顶点。

2 pygame.draw.circle(surface,color,pos,radius,width=0)           
画一个圆。与其他不同的是,它接收一个圆心坐标和半径参数。
3 pygame.draw.ellipse(surface,color,Rect,width=0)        
      椭圆,被一个矩形装起来的。pygame.draw.ellipse的第三个参数就是这个椭圆的外接矩形。
4 pygame.draw.arc(surface,color,Rect,start_angle,stop_angle,width=1)
        圆弧。arc是椭圆的一部分,所以它的参数也就比椭圆多一点。但它是不封闭的,因此没有fill方法。start_angle和stop_angle为开始和结束的角度。
5 pygame.draw.line(surface,color,start_pos,end_pos,width=1)    直线;
6 pygame.draw.lines(surface,color,closed,pointlist,width=1)
     closed是一个布尔变量,指明是否需要多画一条线来使这些线条闭合(感觉就和polygone一样了),pointlist是一个点的数组。
7 pygame.draw.aaline(surface,color,start_pos,end_pos,width=1)    一根平滑的线;
8 pygame.draw.aalines(surface,color,closed,pointlist,width=1)      一系列平滑的线;

(三)font(以图形模式输出文本)

1.pygame.font.Font("字体","字号")      创建一个font字体,“字体”需要自行下载

 pygame.font.SysFont("字体", "字号")   使用系统自带的字体,然后可以使用render方法写字,然后使用blit到屏幕上

2.my_font.render(text,True,(255,255,255))

使用已有的文本text创建一个位图image,返回值为一个image;对于位图可用get_height(),get_width()的方法获得高与宽;True表示是否抗锯齿,True的话字体会比较平滑,不过相应的速度有一点点影响;,第三个为字体颜色,还可以有第四个为背景色,没有时就为默认的透明;

3.Font()

   使用的是字体文件,要使用系统中的字体需用SysFont(),但一些中文扩展的字体不是很好用。

4.screen.blit(image,(100,100))

位块传送(bit block transfer),将位图绘制到屏幕上,screen为建立的主屏。其意义是将一个平面的一部分或全部图象整块从这个平面复制到另一个平面。blit的还有一种用法,往往用在对动画的表现上,比如通过对frame_no的值的改变,可以把不同的帧(同一副图的不同位置)画到屏幕上:screen.blit(ogre, (300, 200), (100 * frame_no, 0, 100, 100))

5.pygame.font.get_fonts()               查看当前系统所有可使用的字体

三、图片处理

pygame支持的图片格式有:JPEG,PNG,GIF,BMP,PCX,TGA,TIF,LBM,PBM,XPM

1 pygame.image.load("图片路径").conver()
               convert函数是将图像数据转化为Surface对象(普通的转换,相同于display),每次加载完图像以后就应该做这件事件(事实上因 它太常用了,即使不写pygame也会帮你做);
               convert_alpha(带alpha通道的转换)相比convert,保留了Alpha 通道信息(可以简单理解为透明的部分),使用时用blit()函数来添加到显示屏。
               游戏的主循环通常是一个无限循环,直到用户跳出。在主循环里需要做的事情就是不停地画背景和更新光标位置,虽然背景是不动的,还是需要每次更新, 否则鼠标覆盖过的位置不能恢复正常。
               blit函数第一个参数为一个Surface对象,第二个为左上角在屏幕的位置。画完以后一定记得用update更新(pygame.display.update()),否则画面一片漆黑。
 2 pygame.Surface((250,250),flags,depth)

创建一个surface对象,如果不指定尺寸则会创建和屏幕一样大小。flags为可选(可以不包含这个参数), HWSURFACE(优化) –更快,不过最好不设定,Pygame可以自己优化;SRCALPHA – 有Alpha通道的surface,如果需要透明,就要这个选项,这个选项的使用需要第二个参数为32。depth为色深,可以不设定,Pygame会自动设的和display一致。

 3 screen.subsurface((0,0),(80,80))         
子表面对象。Subsurface就是在一个Surface中再提取一个Surface,这可以用来绘制图形文字,尽管pygame.font可以用来写很不错的字,但只是单色,当需要更丰富的表现时,可以把每个字母(中文的话有些吃力了)各自做成一个图片。不过更好的方法是在一张图片上画满所有的字母。把整张图读入,然后再用Subsurface把字母一个一个“抠”出来。
 4 screen.set_at(pos,color)       
          对Surface能做的最基本的操作就是设置一个像素的色彩。set_at方法可以做到这一点,它的参数是坐标和颜色。
 5 screen.get_at(pos)           
           接受一个坐标返回指定坐标点上的颜色。不过记住get_at在对hardware surface操作的时候很慢,而全屏的时候总是hardware的,所以慎用这个方法!
 6 pygame.transform.scale(surface,(width//2,height//2)    缩放图片
 7 pygame.transform.smoothscale(surface,(width,height)
缩放图片,比scale慢,但效果更好;
8 screen.set_clip(0,400,200,600)         设定裁剪区域;
9 screen.get_clip()                      
获得裁剪区域。通常游戏的时候只需要绘制屏幕的一部分,为了实现这一点,surface的裁剪区域(clipping area)定义了哪部分会被绘制。也就是说一旦定义了这个区域,那么只有这个区域内的像素会被修改,其他的位置保持不变,默认情况下,这个区域是所有地方。通常可以使用set_clip来设定,使用get_clip来获得这个区域。
10 screen.lock()                       锁定Surface
11 screen.unlock()                     解锁Surface

当Pygame往surface上画东西的时候,首先会把surface锁住,以保证不会有其它的进程来干扰,画完之后再解锁。锁和解锁时自动发生的,所以有时候可能不那么有效率。当手动加锁的时候,一定不要忘记解锁,否则pygame有可能会失去响应。

“sprite”,中文翻译“精灵”,在游戏动画一般是指一个独立运动的画面元素,在pygame中,就可以是一个带有图像(Surface)和大小位置(Rect)的对象。详见后续。
12  pygame.sprite.Group()              精灵组,一个简单的实体容器;
13  pygame.sprite.add(sprite)             添加精灵对象;
14 pygame.sprite.update(ticks)        
15 pygame.sprite.draw(screen)
16 pygame.sprite.collide_rect(arrow,dragon)             冲突

四、事件event

Pygame会接受用户的各种操作(比如按键盘,移动鼠标等)产生事件。事件随时可能发生,而且量也可能会很大,Pygame的做法是把一系列的事件存放一个队列里,逐个的处理。

1 pygame.event.get()                  获取事件的返回值,使用event.type == 进行区分
2 pygame.event.wait()                 等待发生一个事件才会继续下去;
3 pygame.event.poll()                 会根据现在的情形返回一个真实的事件
4 pygame.event.set_blocked(事件名)
               事件过滤。如果设置参数None,那么所有的事件有被打开了。如果有好多事件需要过滤,可以传递一个列表,比如pygame.event.set_blocked([KEYDOWN, KEYUP])。
5 pygame.event.set_allowed()          允许事件

自定义事件

1 my_event = pygame.event.Event(KEYDOWN,key=K_SPACE,mod=0,unicode=u' ')
2 pygame.event.post(my_event)

pygame所有事件type

1 QUIT
用户按下关闭按钮
none(参数)
2 ACTIVEEVENT
Pygame被激活或者隐藏
gain, state(参数)
3 KEYDOWN
键盘被按下
unicode, key, mod(参数)
4 KEYUP
键盘被放开
key, mod(参数)
KEYDOWN和KEYUP的参数描述如下:
key – 按下或者放开的键值,是一个数字,估计地球上很少有人可以记住,所以Pygame中你可以使用K_xxx来表示,比如字母a就是K_a,还有K_SPACE和K_RETURN等。
mod – 包含了组合键信息,如果mod & KMOD_CTRL是真的话,表示用户同时按下了Ctrl键。类似的还有KMOD_SHIFT,KMOD_ALT。
unicode – 代表了按下键的Unicode值,这个有点不好理解,真正说清楚又太麻烦,游戏中也不太常用,说明暂时省略,什么时候需要再讲吧。
区分不同键 event.key == pygame.K_a,Pygame使用keys=pygame.key.get_pressed()来轮询键盘接口,返回的是所有按下键值的元组;用keys[K_b]方式来核对键值;K_b也可以是键值Unicode码;如果mod & KMOD_CTRL为真的话表示同时按下Ctrl键。当然key模块下还有很多函数:
  • key.get_focused —— 返回当前的pygame窗口是否激活
  • key.get_pressed ——轮询键盘接口,返回的是所有按下键值的元组
  • key.get_mods —— 按下的组合键(Alt, Ctrl, Shift)
  • key.set_mods —— 你也可以模拟按下组合键的效果(KMOD_ALT, KMOD_CTRL, KMOD_SHIFT)
  • key.set_repeat —— 无参数调用设置pygame不产生重复按键事件,二参数(delay, interval)调用设置重复事件发生的时间
  • key.name —— 接受键值返回键名
5 MOUSEMOTION
鼠标移动
pos, rel, buttons(参数)
                  MOUSEMOTION事件会在鼠标动作的时候发生,含event.pos, event.rel, event.buttons属性,用mouse_x, mouse_y = event.pos进行确认,它有三个参数:
buttons – 一个含有三个数字的元组,三个值分别代表左键、中键和右键,1就是按下了。
pos – 位置
rel – 代表了现在距离上次产生鼠标事件时的距离
6 pygame.mouse.get_pos()    返回鼠标的当前位置,返回当前鼠标位置(x, y)
7pygame.mouse.get_rel()    获取鼠标相对移动,返回相对偏移量,(x方向, y方向)的一元组
8 pygame.mouse.get_pressed()
               返回按钮状态数组(鼠标三个键的状态) ,返回按键按下情况,返回的是一元组,分别为(左键, 中键, 右键),如按下则为True
9 mouse.set_visible(False)    设置鼠标光标是否可见,False使鼠标不可见;
10 event.set_grab(True)       使鼠标不会跑出窗口
11 mouse.set_pos()           设置鼠标位置
12 mouse.get_focused()       如果鼠标在pygame窗口内有效,返回True
13 mouse.set_cursor()        设置鼠标默认光标式样;
14 mouse.get_cursor()        获取鼠标默认光标式样;
15 MOUSEBUTTONUP
鼠标放开
pos, button(参数)
16 MOUSEBUTTONDOWN
鼠标按下
pos, button(参数)
17 JOYAXISMOTION
游戏x手柄移动(Joystick or pad) 
joy, axis, value(参数)
18 JOYBALLMOTION
游戏球(Joy ball)移动
joy, axis, value(参数)
19 JOYHATMOTION
游戏hat手柄(Joystick)移动
joy, axis, value(参数)
20 JOYBUTTONUP
游戏手柄按键放开
joy, button(参数)
21 JOYBUTTONDOWN
游戏手柄按键按下
joy, button(参数)
22 VIDEORESIZE
Pygame窗口缩放
size, w, h(参数)
VIDEORESIZE的参数描述如下:

size  —  一个二维元组,值为更改后的窗口尺寸,size[0]为宽,size[1]为高

w  —  宽

h  —  高。

23 VIDEOEXPOSE
Pygame窗口部分公开(expose)
none(参数)
24 USEREVENT
触发了一个用户事件
code(参数)

五、异常捕捉

try:
     screen = pygame.display.set_mode(SCREEN_SIZE)
 except pygame.error,e:
     print("Can't create the display :-(")
     print(e)
     exit()

六、时间

1 clock = pygame.time.Clock()    初始化一个clock对象
2 clock.tick()                     返回一个上次调用的时间,以毫秒为单位
3 clock.tick(30)                  

控制游戏绘制的最大帧率为30。在每一个循环中加上它,那么给tick方法加上的参数就成为了游戏绘制的最大帧率,这样游戏就不会占用所有的CPU资源。但是这仅仅是“最大帧率”,并不能代表用户看到的就是这个数字,有些时候机器性能不足,或者动画太复杂,实际的帧率达不到这个值。为了使得在不同机器上有着一致的效果,其实是需要给定物体(通常把这个物体叫做精灵,Sprite)恒定的速度。这样的话,从起点到终点的时间点是一样的,最终的效果也就相同了,所差别的,只是流畅度。

七、声音

(一)sound对象

pygame.mixer.Sound("文件")  读取声音对象sound,格式只有wav和ogg两种;

对象方法:

1 fadeout()                      淡出时间,可用参数为毫秒;
2 get_lengh()                    获得声音文件长度,以秒为单位;
3 get_num_channels()            声音要播放的次数;
4 play(loop,maxtime)
        对读取的声音对象可执行播放操作,loop为-1表示无限循环,1表示重复两次,maxtime表示多少毫秒后结束;返回一个Channel对象,失败则返回None;
5 set_volum()                    设置音量;
6 stop()                          停止播放;
7 pygame.mixer.music          背景音乐处理方法
8 pygame.mixer.music.load()      加载文件可为mp3和ogg格式;
9 pygame.mixer.music.play()      播放
10 pygame.mixer.music.stop()     停止,还有pause()和unpause()方法

(二)Channels对象

pygame.mixer.get_num_channels()    获取当前系统可同时播放的声道数;pygame中默认为8;

对象方法:

1 fadeout()           设置淡出时间
2 get_busy()          如果正在播放,返回True;
3 set_endevent()        设置播放完毕时要做的event;
4 get_endevent()        获取播放完毕时要做的event,如果没有则返回None;
5 get_queue()         获得队列中的声音,如果没有则返回None;
6 set_volume()         设置音量;
7 get_volume()          获得音量;
8 pause()              暂停播放;
9 unpause()            继续播放;
10 play()               播放;
11 stop()                停止播放 ; 
12 queue()             将一个Sound对象加入队列,在当前声音播放完毕后播放;
13 set_num_channels()    自定义声道数;

(三)music对象

pygame.mixer.pre_init(frequency,size,stereo,buffer) 声音系统初始化,第一个为采样率,第二个为量化精度,第三为立体声效果,第四为缓冲;

对象方法:

1 fadeout()       设置淡出时间
2 set_endevent()    设置播放完毕后事件
3 get_endevent()    获取播放完毕后进行的事件;
4 set_volume()      设置音量;
5 get_volume()      获取音量;
6 load()           加载音乐文件;
7 rewind()         从头开始播放;
8 get_pos()          获得当前播放的位置,以毫秒为单位;

七、数学pygame.math

(一)二维向量对象

二维向量函数,操作都将以元素方式执行。引用方式pygame.math.Vector2()。

Vector2()->Vector2  Vector2(int)->Vector2  Vector2(float)->Vector2

Vector2(Vector2)-> Vector2  Vector2(x, y) -> Vector2  Vector2((x, y)) -> Vector2

对象方法:

1 pygame.math.Vector2.dot          用另一个向量计算点或标量积。dot(Vector2)->float
2 pygame.math.Vector2.cross
               计算叉积或矢量;计算叉积的第三个分量。cross(Vector2)->Vector2
3 pygame.math.Vector2.magnitude
              返回向量的欧几里得量级。根据以下定理计算矢量的大小:Vec. magnitude() == math.sqrt(Vec.x**2+Vec.y**2)。magnitude()->float
4 pygame.math.Vector2.magnitude_squared
               返回向量的平方大小。根据以下定理计算矢量的大小:Vec. magnitude _squared()==Vec.x**2+Vec.y**2这比Vec. magnitude()快,因为它避免了平方根。。magnitude_squared()->float
5 pygame.math.Vector2.length
               返回向量的欧几里得长度。根据勾股定理计算向量的欧几里得长度:Vec.length()==math.sqrt(Vec.x**2+Vec.y**2)。length()->float
6 pygame.math.Vector2.length_squared 
               返回向量的欧几里得平方长度。根据勾股定理计算向量的欧几里得长度:Vec.length_squared()==Vec.x**2+Vec.y**2这比Vec.length()更快,因为它避免了平方根。length_squared()->float
7 pygame.math.Vector2.normalize
               返回一个方向相同但长度为1的向量。normalize()->Vector2
8 pygame.math.Vector2.normalize_ip
               在适当位置规范化向量,使其长度为1。normalize_ip()->None
9 pygame.math.Vector2.is_normalized
               如果向量是规范化的,即长度=1,则测试。如果向量的长度=1,则返回true。否则返回false。is_normalized()->Bool
10 pygame.math.Vector2.scale_to_length
               将向量缩放到给定的长度。矢量的方向不变。也可以缩放到长度0。如果矢量为零矢量(即长度为0,因此没有方向),则会产生零分割误差。scale_to_length(float)->None
11 pygame.math.Vector2.reflect 
               返回给定法线的反射向量。返回一个新的向量,该向量指向的方向就像self将在具有给定曲面法向特征的曲面上反弹一样。新向量的长度与self的长度相同。reflect(Vector2)->Vector2
12 pygame.math.Vector2.reflect_ip
               就地反映给定法向量。改变self的方向,就好像它是一个具有给定曲面法向的曲面的反射。reflect_ip(Vector2)->None
13 pygame.math.Vector2.distance_to
               计算到给定向量的欧几里得距离。distance_to(Vector2) -> float
14 pygame.math.Vector2.distance_squared_to 
               计算到给定向量的欧几里得平方距离。distance_squared_to(Vector2)->float
15 pygame.math.Vector2.lerp
               返回给定向量的线性插值。返回一个向量,该向量是self和给定向量之间的线性插值。第二个参数决定了结果在self和其他向量之间的距离。它必须是介于0和1之间的值,其中0表示自身,1表示将返回其他值。lerp(Vector2, float)->Vector2
16 pygame.math.Vector2.slerp
               返回给定向量的球面插值。计算从self到给定向量的球面插值。第二个参数(通常称为t)必须在范围内[-1,1]。它参数化了两个向量之间的结果。如果给定一个负值,则插值不会取最短路径的补数。slerp(Vector2, float)->Vector2
17 pygame.math.Vector2.elementwise
               将执行下一个操作,对向量的每个元素应用以下操作。elementwise()-> VectorElementwiseProxy
18 pygame.math.Vector2.rotate
               将向量旋转给定角度(度)。返回与自身长度相同但按给定角度逆时针旋转的向量(以度为单位)。rotate(float)->Vector2
19 pygame.math.Vector2.rotate_ip
               将矢量旋转给定角度(以度为单位)。按给定角度逆时针旋转矢量(以度为单位)。矢量的长度不变。rotate_ip(float)->None
20 pygame.math.Vector2.angle_to  
               计算到给定向量的角度(度)。angle_to(Vector2)->float
21 pygame.math.Vector2.as_polar
               计算径向距离和方位角。返回一个元组(r,phi),其中r是径向距离,phi是方位角。as_polar()->(r, phi)
22 pygame.math.Vector2.from_polar
               设置极坐标元组的极坐标集x和y。从元组(r,phi)中设置x和y,其中r是径向距离,phi是方位角。from_polar((r, phi))->None

(二)三维向量对象pygame.math.Vector3

三维向量函数,操作都将以元素方式执行。引用方式pygame.math.Vector3()。

Vector3()->Vector3  Vector3(int)->Vector3  Vector3(float)->Vector3

Vector3(Vector3)->Vector3  Vector3(x, y, z)->Vector3  Vector3((x, y, z))->Vector3

对象方法:

1 pygame.math.Vector3.dot          用另一个向量计算点或标量积。dot(Vector3)->float
2 pygame.math.Vector3.cross        计算叉积或矢量积。cross(Vector3)->Vector3
3 pygame.math.Vector3.magnitude   
               返回向量的欧几里得量级。根据以下定理计算矢量的大小:Vec. Magnitude()==math.sqrt(Vec.x**2+Vec.y**2+Vec.z**2)。magnitude()->float
4 pygame.math.Vector3.magnitude_squared
               返回向量的欧几里得平方量级。根据以下定理计算矢量的大小:Vec. magnitude _squared()==Vec.x**2+Vec.y**2+Vec.z**2这比Vec. magnitude()快,因为它避免了平方根。magnitude_squared()->float
5 pygame.math.Vector3.length 
              返回向量的欧几里得长度。根据勾股定理计算向量的欧几里得长度:Vec.length() == math.sqrt(Vec.x**2+Vec.y**2+Vec.z**2)。length()->float
6 pygame.math.Vector3.length_squared 
               返回向量的欧几里得长度的平方。根据勾股定理计算向量的欧几里得长度:Vec.length_squared()==Vec.x**2+Vec.y**2+Vec.z**2这比Vec.length()快,因为它避免了平方根。length_squared()->float
7 pygame.math.Vector3.normalize
               返回一个方向相同但长度为1的向量。normalize()->Vector3
8 pygame.math.Vector3.normalize_ip
               在适当位置规范化向量,使其长度为1。矢量的方向不变。normalize_ip()->None
9 pygame.math.Vector3.is_normalized
               如果向量是规范化的,即长度=1,则测试。如果向量的长度=1,则返回true。否则返回false。is_normalized()->Bool
10 pygame.math.Vector3.scale_to_length
               将向量缩放到给定的长度矢量的方向不变。也可以缩放到长度0。如果矢量为零矢量(即长度为0,因此没有方向),则会产生零分割误差。scale_to_length(float)->None
11 pygame.math.Vector3.reflect     
               返回给定法线的反射向量。返回一个新的向量,该向量指向的方向就像self将在具有给定曲面法向特征的曲面上反弹一样。新向量的长度与self的长度相同。reflect(Vector3)->Vector3
12 pygame.math.Vector3.reflect_ip 
               就地反映给定法向量。改变self的方向,就好像它是一个具有给定曲面法向的曲面的反射。reflect_ip(Vector3)->None
13 pygame.math.Vector3.distance_to
               计算到给定向量的欧几里得距离。distance_to(Vector3) -> float
14 pygame.math.Vector3.distance_squared_to 
               计算到给定向量的欧几里得平方距离。distance_squared_to(Vector3)->float
15 pygame.math.Vector3.lerp
               返回给定向量的线性插值。返回一个向量,该向量是self和给定向量之间的线性插值。第二个参数决定了结果在self和其他向量之间的距离。它必须是介于0和1之间的值,其中0表示自身,1表示将返回其他值。lerp(Vector3, float)->Vector3
16 pygame.math.Vector3.slerp
               返回给定向量的球面插值。计算从self到给定向量的球面插值。第二个参数(通常称为t)必须在范围内[-1,1]。它参数化了两个向量之间的结果。如果给定一个负值,则插值不会取最短路径的补数。slerp(Vector3, float)->Vector3
17 pygame.math.Vector3.elementwise
              将执行下一个向量的每个元素应用操作。elementwise()-> VectorElementwiseProxy
18 pygame.math.Vector3.rotate 
               将向量旋转给定角度(度)。返回一个与自身长度相同,但围绕给定轴按给定角度逆时针旋转的向量。rotate(float)->Vector3
19 pygame.math.Vector3.rotate_ip
               将矢量旋转给定角度(以度为单位)。矢量的长度不变。rotate_ip(float)->None
20 pygame.math.Vector3.rotate_x
               将一个矢量绕X轴旋转角度(度)。返回一个与自身长度相同的向量,但该向量绕X轴逆时针旋转给定角度(以度为单位)。rotate_x(float) -> Vector3
21 pygame.math.Vector3.rotate_x_ip 
               将矢量绕X轴旋转一定角度。以给定角度(以度为单位)沿X轴逆时针旋转矢量。矢量的长度不变。rotate_x_ip(float) -> None
22 pygame.math.Vector3.rotate_y
               以度为单位围绕y轴旋转向量。返回一个与自身长度相同,但围绕Y轴逆时针旋转给定角度(度)的向量。rotate_y(float) -> Vector3
23 pygame.math.Vector3.rotate_y_ip
               将矢量绕y轴旋转一定角度。以给定角度(以度为单位)沿Y轴逆时针旋转矢量。矢量的长度不变。rotate_y_ip(float) -> None
24 pygame.math.Vector3.rotate_z
               围绕z轴旋转一个以度为单位的角度。返回一个与自身长度相同,但围绕Z轴逆时针旋转给定角度(度)的向量。rotate_z(float) -> Vector3
25 pygame.math.Vector3.rotate_z_ip
               将矢量绕Z轴旋转角度(以度为单位)。以给定角度(以度为单位)沿Z轴逆时针旋转矢量。矢量的长度不变。rotate_z_ip(float) -> None
26 pygame.math.Vector3.angle_to  计算到给定向量的角度(度)。angle_to(Vector3)->float
27 pygame.math.Vector3.as_polar
               计算径向距离、倾角和方位角。返回一个元组(r,theta,phi),其中r是径向距离,theta是倾角,phi是方位角。as_spherical() -> (r, theta, phi)
28 pygame.math.Vector3.from_polar
               从球面坐标3元组设置x、y和z。从元组(r,theta,phi)中设置x,y和z,其中r是径向距离,theta是倾角,phi是方位角。from_spherical((r, theta, phi)) -> None

(三)向量的全局旋转

1 pygame.math.enable_swizzling ()
全局启用矢量切换。enable_swizzling() -> None
已弃用:不再需要。将在更高版本中删除。
对所有向量启用旋转,直到调用disable_swizzling()。默认情况下禁用旋转。
2 pygame.math.disable_swizzling ()
全局禁用矢量旋转。
disable_swizzling() -> None
已弃用:不再需要。将在更高版本中删除。
对所有向量禁用旋转,直到调用enable_swizzling()。默认情况下禁用旋转。

八、精灵pygame.sprite

这个模块包含几个简单的类,有Sprite类和几个包含精灵的Group类,主要应用在游戏中。当使用pygame时,这些类都是完全可选的,但只能为大多数游戏中常见的代码提供一个起始位置。Sprite类旨在用作游戏中不同类型对象的基类,甚至还有一个只用来存储精灵的基本Group类。一个游戏可以创建新类型的Group类,用于操作其中包含的的特殊定制sprite实例。基本Sprite类可以将它包含的精灵绘制到Surface上。最后,该模块包含几个碰撞功能,帮助在多个具有相交边界矩形的组中查找精灵。为了找到碰撞,精灵需要指定surface.rect属性。

这些组的设计是为了高效地移除和添加精灵。他们还允许廉价的测试,看看是否已经有一个精灵在一个组中。给定的精灵可以存在于任何数量的组中。游戏可以使用一些组来控制对象渲染,或使用完全独立的组来控制交互或玩家移动。取代向派生的Sprite类添加类型属性或布尔量,而是考虑将Sprite保持在有组织的Group中,使以后在游戏中更容易查找。精灵和组之间使用add()和remove()方法管理它们的关系。这些方法可以接受一个或多个的成员身份或目标。这些类的默认初始值设定还是认为初始成员身份的单个目标或目标列表。重复添加和删除组中的同一个精灵是安全的。虽然可以设计不根据Sprite和AbstractGroup类派生的精灵和组类,但强烈建议在添加精灵或组类时扩展这些类。精灵线程是不安全的。因此,如果使用线程,请自己锁定它们。

(一)pygame.sprite.Sprite

可见游戏对象的基类。派生类将要重写sprite.update(),并分配sprite.image和sprite.rect属性。初始值设定项可以接受要添加到的任何数量的组实例。当子类化sprite时,一定要在将sprite添加到组之前调用基初始值设定项。

Sprite(*groups) -> Sprite

对象方法:

1 pygame.sprite.Sprite.update
               控制sprite行为的方法。这个方法的默认实现什么也不做;它只是一个方便的“钩子”,可以重写它。这个方法是由Group.update()用任何参数调用的。如果不在Group类中使用同名的方便方法,则不需要使用此方法。update(*args) -> None
2 pygame.sprite.Sprite.add
               将Sprite添加到组。任何数量的Group实例都可以作为参数传递。Sprite将被添加到它还不是成员的组中。add(*groups) -> None
3 pygame.sprite.Sprite.remove
               从组中移除sprite。任何数量的Group实例都可以作为参数传递。Sprite将被从已是成员的组中移除。remove(*groups) -> None
4 pygame.sprite.Sprite.kill
               从所有组中移除sprite。Sprite将从包含它的所有组中移除。这不会改变Sprite的状态。调用此方法后,可以继续使用Sprite,包括将其添加到组中。kill() -> None
5 pygame.sprite.Sprite.live
      判断sprite是否属于任何一个组。当Sprite属于一个或多个组时返回true。alive() -> bool
6 pygame.sprite.Sprite.groups  返回包含此sprite的所有组的列表。groups() -> group_list

(二)pygame.sprite.DirtySprite

具有更多属性和特性的sprite子类。DirtySprite(*groups) -> DirtySprite

带有默认值的额外dirtysprite属性:

1 dirty=1

如果设置为1,则重新绘制,然后再次设置为0;如果设置为2,则它始终是脏的(每帧重新喷漆,标志未重置);0表示它不脏,因此不再重新喷漆。

2 blendmode=0           它是Blit、BlendModes的特殊标志参数。

3 source_rect = None       要使用的源rect,请记住它是相对于self.image的左上角(0,0)

4 visible=1

通常为1,如果设置为0,则不会重新绘制。(必须将其设置为脏的,以便从屏幕上擦除)

5层=0                    (只读值,将其添加到LayeredDirty,详见LayeredDirty文件)

(三)pygame.sprite.Group

用于保存和管理多个sprite对象的容器类。Sprite对象的简单容器。可以继承这个类来创建具有更具体行为的容器。构造函数接受任意数量的sprite参数添加到组中。该组支持以下标准的python操作:

in      测试中是否包含精灵

len     包含的精灵数

bool    测试是否包含任何精灵

iter     迭代所有精灵

组中的精灵没有排序,因此绘制和迭代精灵没有特定的顺序。

Group(*sprites) -> Group

对象方法:

1 pygame.sprite.Group.sprites
               此组包含的精灵列表。返回该组包含的所有精灵的列表。也可以从组中获取迭代器,但在修改组时不能对其进行迭代器。sprites() -> sprite_list
2 pygame.sprite.Group.copy
               复制组。使用与原始组相同的所有精灵创建新组。如果有子类组,则新对象将具有与原始对象相同的(子)类。仅当派生类的构造函数采用与组类相同的参数时,此操作才有效。copy() -> Group
3 pygame.sprite.Group.add
               将精灵添加到此组。向这个组添加任意数量的精灵,只会添加尚未成为组成员的精灵。每个sprite参数也可以是包含sprite的迭代器。add(*sprites) -> None
4 pygame.sprite.Group.remove
               从组中移除精灵。从组中移除任意数量的精灵。这将只移除已经是组成员的精灵。每个sprite参数也可以是包含sprite的迭代器。remove(*sprites) -> None
5 pygame.sprite.Group.has
               测试组是否包含精灵。如果组包含所有给定的精灵,则返回true。这类似于在组上使用“in”操作符(“如果sprite在组中:…”),该操作符测试单个sprite是否属于组。每个sprite参数也可以是包含sprite的迭代器。has(*sprites) -> None
6 pygame.sprite.Group.update
               对包含的sprites调用update方法。对组中的所有精灵调用update()方法。基sprite类有一个update方法,该方法接受任意数量的参数,不执行任何操作。传递给group. update()的参数将传递给每个sprite。无法从sprite.update()方法中获取返回值。update(*args) -> None
7 pygame.sprite.Group.draw
               快速浏览精灵图片。将包含的精灵绘制到surface参数。这将对源曲面使用sprite.image属性,对位置使用sprite.rect。group.draw()方法要求每个sprite都有一个surface.image属性和一个surface.rect。该组不保持精灵的任何顺序,因此绘制顺序是任意的。draw(Surface) -> None
8 pygame.sprite.Group.clear
               返在精灵上绘制背景。删除上一个group.draw()调用中使用的精灵。通过用背景填充绘制的sprite位置来清除目标曲面。背景通常是与目标表面尺寸相同的表面图像。group. clear()方法需要这些相同的属性,可以用来清除所有具有背景的精灵。但是,它也可以是一个回调函数,接受两个参数:目标曲面和要清除的区域。后台回调函数将在每次清除时调用多次。clear(Surface_dest, background) -> None
下面是一个回调示例,它将用纯红色清除精灵:

def clear_callback(surf, rect):

color = 255, 0, 0

surf.fill(color, rect)
9 pygame.sprite.Group.empty    移动所有精灵。删除此组中的所有精灵。empty() -> None

(四)pygame.sprite.RenderUpdates

跟踪脏更新的组子类。此类派生自pygame.sprite.Group()。它有一个扩展的draw()方法来跟踪屏幕的更改区域。

RenderUpdates(*sprites) -> RenderUpdates

对象方法:

1 pygame.sprite.RenderUpdates.draw
               Blit精灵图像并跟踪更改的区域。将所有精灵绘制到曲面上,与Group.draw()相同。此方法还返回屏幕上已更改的矩形区域的列表。返回的更改包括受先前Group.clear()调用影响的屏幕区域。返回的Rect列表应传递给pygame.display.update()。这将有助于软件驱动显示模式的性能。这种类型的更新通常只对具有非动画背景的目标有用。draw(surface) -> Rect_list

(五)pygame.sprite.LayeredUpdates

LayeredUpdates是一个用于处理层的sprite组,绘制方法和OrderedUpdates一样。此组与可见游戏对象的pygame.sprite.SpriteSimple基类完全兼容。

可以使用“默认图层”和该图层的整数通过Kwargs设置默认图层。默认层为0。如果添加的精灵有属性层,那么将使用该层。如果**kwarg包含“layer”,则传递的精灵将添加到该层(覆盖sprite.layer属性)。如果sprite既没有属性层,也没有**kwarg,则使用默认层添加sprite。

LayeredUpdates(*spites, **kwargs) -> LayeredUpdates

对象方法:

1 pygame.sprite.LayeredUpdates.add
               向组中添加精灵或精灵序列。如果精灵有属性层,则该属性层将用于该层。如果**kwargs包含“layer”,则精灵将添加到该参数中(覆盖精灵层属性)。如果两者都不通过,则精灵将添加到默认层。add(*sprites, **kwargs) -> None
2 pygame.sprite.LayeredUpdates.sprites
               返回精灵的有序列表(first back, last top)。sprites() -> sprites
3 pygame.sprite.LayeredUpdates.draw
               将所有精灵按正确的顺序绘制到经过的表面上。draw(surface) -> Rect_list
4 pygame.sprite.LayeredUpdates.get_sprites_at
               返回一个列表,其中所有精灵都位于该位置。底部精灵优先,顶部精灵最后。get_sprites_at(pos) -> colliding_sprites
5 pygame.sprite.LayeredUpdates.get_sprite
               从groups sprites返回索引idx处的精灵。如果IDX不在范围内,则引发IndexOutOfBounds。get_sprite(idx) -> sprite
6 pygame.sprite.LayeredUpdates.remove_sprites_of_layer
从层中移除所有精灵,并将其作为列表返回。remove_sprites_of_layer(layer_nr) -> sprites
7 pygame.sprite.LayeredUpdates.layers
返回自下而上排序的已定义(唯一)的层列表。layers() -> layers
8 pygame.sprite.LayeredUpdates.change_layer
               更改精灵的图层。sprite必须已添加到渲染器中。没有检查。change_layer(sprite, new_layer) -> None
9 pygame.sprite.LayeredUpdates.get_layer_of_sprite
               返回精灵当前所在的层。如果没有找到精灵,它将返回默认层。get_layer_of_sprite (sprite) -> layer
10 pygame.sprite.LayeredUpdates.get_top_layer
返回顶层。get_top_layer() -> layer
11 pygame.sprite.LayeredUpdates.get_bottom_layer
返回底层。get_bottom_layer() -> layer
12 pygame.sprite.LayeredUpdates.move_to_front
               把精灵带到顶层。将sprite置于最前面,将sprite层更改为最上面的层(添加到该层的末尾)。move_to_front(sprite) -> None
13 pygame.sprite.LayeredUpdates.move_to_back
               将精灵移动到底层。将精灵移动到底层,将其移动到所有其他层的后面,并添加一个附加层。move_to_back(sprite) -> None
14 pygame.sprite.LayeredUpdates.get_top_sprite
返回最上面的精灵。get_top_sprite() -> Sprite
15 pygame.sprite.LayeredUpdates.get_sprites_from_layer
               返回一个层中的所有精灵,按它们添加位置的顺序排列。方法使用线性搜索,并且精灵不会从层中移除。get_sprites_from_layer(layer) -> sprites
16 pygame.sprite.LayeredUpdates.switch_layer
               将精灵从第1层切换到第2层。层号必须存在。没有检查。switch_layer(layer1_nr, layer2_nr) -> None
(六)pygame.sprite.LayeredDirty

LayeredDirty组用于DirtySprite对象。子类分层更新。这个组需要sprite的pygame. sprite.DirtySpriteA子类,具有更多的属性和特性。或具有以下属性的任何精灵:

image,rect,dirty,visible,blendmode(参见DirtySprite文档)。

它使用脏标记技术,因此比跟踪脏更新的pygame.sprite.RenderUpdatesGroup子类更快。当有很多静态精灵时,它还自动切换脏矩形更新和全屏绘图,所以你不必担心速度。

与pygame.sprite.GroupA容器类相同,可以用于保存和管理多个sprite对象。也可以通过Kwargs指定一些附加属性:

__use_update: true/false    默认值为false

_default_layer:添加没有层的精灵的默认层。

_time_threshold:在脏矩形模式之间切换的阈值时间

全屏模式,默认为1000/80==1000/fps。

LayeredDirty(*spites, **kwargs) -> LayeredDirty

对象方法:

1 pygame.sprite.LayeredDirty.draw
               将所有精灵按正确的顺序绘制到经过的表面上,也可以经过背景。如果已经设置了背景,则bgd参数无效。draw(surface, bgd=None) -> Rect_list
2 pygame.sprite.LayeredDirty.clear
               用于设置背景。clear(surface, bgd) -> None
3 pygame.sprite.LayeredDirty.repaint_rect
            重新粉刷指定区域,屏幕矩形位于屏幕坐标中。repaint_rect(screen_rect) -> None
4 pygame.sprite.LayeredDirty.set_clip
裁剪要绘制的区域。只需传递“无”(默认)即可重置剪辑。set_clip(screen_rect=None)->None
5 pygame.sprite.LayeredDirty.get_clip
裁剪要绘制的区域。只需传递“无”(默认)即可重置剪辑。get_clip() -> Rect
6 pygame.sprite.LayeredDirty.change_layer
               更改精灵的图层。sprite必须已添加到渲染器中。没有检查。change_layer(sprite, new_layer) -> None
7 pygame.sprite.LayeredDirty.set_timing_treshold
               以毫秒为单位设置阈值。默认值为1000./80,其中80是要切换到全屏模式的fps。此方法的名称是一个拼写错误,应该被修复。set_timing_treshold(time_ms) -> None

(七)碰撞collide

1 pygame.sprite.spritecollide()
               在与另一个精灵相交的组中查找精灵。返回一个列表,其中包含与另一个精灵相交的组中的所有精灵。交集是通过比较每个精灵的sprite.rect属性来确定的。Dokill参数布尔量。如果设置为true,所有碰撞的精灵都将从组中移除。碰撞参数是一个回调函数,用于计算两个精灵是否碰撞。它应该以两个sprite作为值,并返回一个bool值,指示它们是否发生碰撞。如果没有传递碰撞,所有精灵都必须有一个“rect”值,它是精灵区域的一个矩形,用于计算碰撞。
               冲突的可调用文件:
collide_rect,collide_rect_ratio,collide_circle,collide_circle_ratio,collide_mask
Example:
#查看sprite块是否与组块列表中的任何内容发生冲突
#真标志将删除块列表中的sprite
blocks_hit_list = pygame.sprite.spritecollide(player, block_list, True)
#查看碰撞精灵列表,并在每个列表的分数中添加一个。
for block in blocks_hit_list:
    score +=1    
spritecollide(sprite, group, dokill, collided = None) -> Sprite_list
2 pygame.sprite.collide_rect()
               两个精灵之间的碰撞检测,使用rect。测试两个精灵之间的碰撞。使用pygame rect colliderect函数计算碰撞。将作为碰撞回调函数传递给*collide functions。精灵必须具有“rect”属性。collide_rect(left, right) -> bool
3 pygame.sprite.collide_rect_ratio()
               两个精灵之间的碰撞检测,使用按比例缩放的矩形。一个可调用类,它使用精灵矩形的缩放版本检查两个精灵之间的冲突。以一定的比例创建实例,然后将该实例作为碰撞回调函数传递给*碰撞函数(*collide functions)。比率是一个浮点数:1.0是相同的大小,2.0是大小的两倍,0.5是大小的一半。collide_rect_ratio(ratio) -> collided_callable
4 pygame.sprite.collide_circle()
               两个精灵之间的碰撞检测,使用圆。测试两个精灵之间的碰撞,通过测试看两个以精灵为中心的圆是否重叠。如果精灵有一个“radius”属性,用于创建圆,否则会创建一个足够大的圆来完全包围精灵rect,如“rect”属性所示。将作为碰撞回调函数传递给*碰撞函数。精灵必须有一个“rect”和一个可选的“radius”属性。collide_circle(left, right) -> bool
5 pygame.sprite.collide_circle_ratio()
               两个精灵之间的碰撞检测,使用按比例缩放的圆。一个可调用类,使用精灵半径的缩放版本检查两个精灵之间的碰撞。以浮点比率创建,然后将实例作为碰撞回调函数传递给*collide函数。比率是一个浮点数-1.0是相同的大小,2.0是大小的两倍,0.5是大小的一半。
               创建了两个精灵之间碰撞的可调用测试,通过测试以精灵为中心的两个圆是否重叠,然后按存储比率缩放圆的半径。如果精灵有一个“radius”属性,用于创建圆,否则会创建一个足够大的圆来完全包围精灵rect,如“rect”属性所示。将作为碰撞回调函数传递给*碰撞函数。精灵必须有一个“rect”和一个可选的“radius”属性。
collide_circle_ratio(ratio) -> collided_callable
6 pygame.sprite.collide_mask()
               使用遮罩检测两个精灵之间的碰撞。返回遮罩碰撞的遮罩上的第一个点,如果没有碰撞,则返回无。通过测试两个精灵的位掩码是否重叠来测试它们之间的碰撞。如果精灵有一个“遮罩”属性,即用作遮罩,否则将从精灵图像创建遮罩。将作为碰撞回调函数传递给*碰撞函数。精灵必须有一个“rect”和一个可选的“mask”属性。如果要多次检查碰撞,则应考虑在加载时为精灵创建一个遮罩。这将提高性能,否则这可能是一个昂贵的函数,因为它将在每次检查冲突时创建遮罩。
               sprite.mask = pygame.mask.from_surface(sprite.image)
collide_mask(SpriteLeft, SpriteRight) -> point
7 pygame.sprite.groupcollide()
               找到所有在两个组之间碰撞的精灵。这将发现两组中所有精灵之间的碰撞。碰撞是通过比较每个sprite的sprite.rect属性或使用碰撞函数(如果不是“无”)来确定的。group1中的每个sprite都被添加到返回字典中。每个项目的值是组2中相交的精灵列表。如果其中一个dokill参数为真,碰撞的精灵将从各自的组中移除。碰撞参数是一个回调函数,用于计算两个精灵是否碰撞。它应该以两个sprite作为值,并返回一个bool值,指示它们是否发生碰撞。如果没有传递碰撞,那么所有精灵都必须有一个“rect”值,它是精灵区域的一个矩形,将用于计算碰撞。groupcollide(group1, group2, dokill1, dokill2, collided = None) -> Sprite_dict
8 pygame.sprite.spritecollideany()
               简单测试sprite是否与组中的任何内容相交。如果精灵与组中的任何单个精灵碰撞,则返回组中的单个精灵。不发生碰撞时,不会返回任何信息。如果不需要pygame.sprite. spritecollide()函数的所有功能,那么这个函数会更快一些。碰撞参数是一个回调函数,用于计算两个精灵是否碰撞。它应该以两个sprite作为值,并返回一个bool值,指示它们是否发生碰撞。如果没有传递碰撞,那么所有精灵都必须有一个“rect”值,它是精灵区域的一个矩形,将用于计算碰撞。
spritecollideany(sprite, group, collided = None) -> Sprite  与返回的精灵碰撞。
spritecollideany(sprite, group, collided = None) -> None  无碰撞
(八)其他

1.pygame.sprite.RenderPlain

与pygame.sprite.group相同。此类是pygame.sprite.Group()的别名。它没有额外的功能。

2.pygame.sprite.RenderClear

与pygame.sprite.group相同。此类是pygame.sprite.Group()的别名。它没有额外的功能。

3.pygame.sprite.RenderPlain

RenderUpdates子类,按添加顺序绘制精灵。此类派生自pygame.sprite.RenderUpdates()。它维护精灵添加到组中进行渲染的顺序。这使得从组中添加和删除精灵的速度比常规组慢一点。OrderedUpdates(*spites) -> OrderedUpdates

4.pygame.sprite.GroupSingle()

包含单个精灵的组容器。GroupSingle容器只包含一个单一精灵。当添加新的精灵时,旧的精灵将被移除。有一个特殊的属性GroupSingle.sprite,它访问这个组包含的精灵。当组为空时,它可以为“无”。属性也可以指定为将精灵添加到GroupSingle容器中。GroupSingle(sprite=None) -> GroupSingle

参考文献链接:

https://eyehere.net/2011/python-pygame-novice-professional-index/

https://www.cnblogs.com/aland-1415/p/8736680.html

http://www.pygame.org/docs/ref/math.html#pygame.math.Vector2

https://www.pygame.org/docs/ref/sprite.html?highlight=pygame%20sprite#module-pygame.sprite

pygame模块参数汇总相关推荐

  1. python中的pygame模块使用方法_Pygame的基本使用

    Pygame有很多模块,每个模块又有很多方法,在此不能够逐一讲解,所以,我们通过一个实例来学习Pygame,然后再分解代码,讲解代码中的模块. 例:制作一个跳跃的小球游戏. 创建一个游戏窗口,然后在窗 ...

  2. pygame之pygame模块

    pygame-最顶层的Pygame模块 pygame.init-初始化所有导入的pygame模块 pygame.quit-卸载掉导入的pygame模块 pygame.error-标准pygame异常 ...

  3. Python——利用pygame模块制作RPG游戏(一)

    利用pygame模块制作RPG游戏(一) 需要用到的第三方库:pygame 一.构造游戏的基本框架 1.首先准备好相应的游戏素材:背景,人物动作图片,音乐,音效等. 图片均用png格式,音乐音效均用o ...

  4. 用python的pygame模块制作弹球小游戏

    首先那,需要安装pygame模块,大约300行代码就可以做一个小游戏 在命令提示窗口中输入:pip install pygame 如果不安装模块,呵呵, github下载: https://githu ...

  5. 经典回顾:用pygame模块做一个飞机大战

    目录 前言 一.安装pygame: 1.用pip包管理器安装: 2.二进制安装包安装: 二.学习pygame的内置模块: 1.初始化: 2.精灵组: 3.页面的渲染和刷新 三.使用步骤 1.准备游戏素 ...

  6. Python中pygame模块pygame.sprite.groupcollision碰撞检测的详解与测试

    在游戏开发中,非常重要的编程工作就是进行碰撞检测.在python的pygame模块中的sprite精灵类提供了多种方便快捷的碰撞检测方法.比如矩形碰撞检测.圆形碰撞检测.遮罩碰撞检测,这些方法基本都是 ...

  7. python的pygame模块详解_python游戏模块学习之pygame常规操作讲解

    pygame常规操作 导入模块 import pygame # 导入pygame模块 from sys import exit # 导入退出鼠标点击事件 from math import pi # 导 ...

  8. Python游戏开发,pygame模块,Python实现打砖块小游戏

    前言: 本期我们将利用python制作一个打砖块小游戏,废话不多说,让我们愉快地开始吧~ 效果展示 [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RdjcY4gn-16 ...

  9. Python游戏开发,pygame模块,Python实现过迷宫小游戏

    前言 今天为大家带来解闷用的过迷宫小游戏分享给大家好了.让我们愉快地开始吧~ 效果展示 开发工具 Python版本: 3.6.4 相关模块: pygame模块: 以及一些Python自带的模块. 环境 ...

最新文章

  1. react hook——你可能不是“我”所认识的useEffect
  2. mysql忘记密麻麻_mysql忘记密码怎么办
  3. 警惕使用WebClient.DownloadFile(string uri,string filePath)方法
  4. Java操作oracle数据库
  5. java中面向对象6_Java面向对象
  6. 运维自动化之zabbix(添加Graph screen)(3)
  7. 方便快速地创建新浪微博表情选择对话框——jQuery Sina Emotion
  8. PMP课程笔记:第10章 项目沟通管理
  9. hua图软件 mac_实用电脑绘图软件~推荐_mac_微软怎么样_智能_魅可怎么样_圣诞节去哪玩_ipad_绘图软件_科技数码_应用推荐...
  10. GOP之M和N值介绍
  11. android 手机分辨率占比,Android屏幕密度(Density)和分辨率概念详解
  12. MODIS16天数据月合成/季合成
  13. Web Proxy Auto-Discovery Service
  14. 设计模式之 策略模式
  15. 山东科技大学OJ题库 1904 帮小明算算数
  16. 后凯恩斯学派给出的不同答案-中国视角下的宏观经济
  17. 云计算、大数据和人工智能
  18. 如何通俗的理解函数的极限_如何理解函数的极限?
  19. 每周网页练习—网易邮箱首页
  20. CE101相关测试标准整理

热门文章

  1. android书架效果
  2. 用pymysql制作一个同学录小程序
  3. 计算机科学与技术和人力资源管理,计算机科学与技术专业现状分析和人才培养模式改革研究...
  4. 关于java构造方法的描述_下列关于Java中类的构造方法的描述,正确的是()
  5. html 超链接自动换行,url 关于自动换行问题
  6. 算法竞赛入门【码蹄集进阶塔335题】(MT2051-2075)
  7. esxi license过期_Vcenter 和ESXi License过期解决办法
  8. java每日一练——第三天:对用户输入的任一整数,输出以下多项式的值。 y=2x2+x+8
  9. idea点击具体的类没有反应,进不去
  10. 大芒果gm命令_大数据是否已死?java从业者要不要转大数据?