pygame (三)
pygame.transform
# pygame.transform # # 用于改变surfaces形态的pygame模块 # 注意:下面操作的结果都将返回一个新的Surface????不要将返回结果覆盖原来的图像,如: # 图像 = pygame.transform.操作(图像..) # 应该这样: # 新图像 = pygame.transform.操作(图像..) # pygame.transform.flip - 垂直和水平翻转 # 垂直和水平翻转 # flip(Surface, xbool, ybool) -> Surface # 这可以通过垂直,水平或两者一起来翻转Surface。 翻转Surface是非破坏性的,并返回具有相同尺寸的新曲面。 # sur1 = pygame.transform.flip(sur, True, True) # 参数,X轴 和Y轴是否翻转 # pygame.transform.scale - 调整大小到新的分辨率 # 调整大小到新的分辨率 # scale(Surface, (width, height), DestSurface = None) -> Surface # 将Surface的大小调整为新分辨率。 这是一种快速扩展操作,不会对结果进行采样。 # 可以使用可选的目标Surface,而不是创建新的目标Surface。 如果你想反复缩放某些东西,这会更快。 但是, # 目标必须与传入的(width, height)大小相同。目标Surface也必须是相同的格式。 # sur1 = pygame.transform.scale(sur,(100,50),sur1) # 参数:1 要缩放的源,2 绽放后的大小 3 绽放到目标(可以省略,如果要绽放到目标的话 # 目标大小必须设置为绽放后的大小 # pygame.transform.rotate - 旋转图像 # 旋转图像 # rotate(Surface, angle) -> Surface # 未经过滤的逆时针旋转。 angle参数表示角度,可以是任何浮点值。 负角度量将顺时针旋转。 # 除非以90度的增量旋转,否则图像将被填充得更大以保持新的尺寸。 如果图像具有像素alpha,则填充区域将是透明的。 否则, # pygame将选择与Surface颜色键(colorkey)或左上角像素值匹配的颜色 # 参数是角度而不是弧度, # 说明:所有的surface都是一个横平竖直的矩形,旋转以后还是一个横平竖直的矩形,只是长、宽变了 # 所以,旋转后会出现位置偏移,怎么解决: # sur2 = pygame.transform.rotate(sur, rot) # x = 500 - sur2.get_size()[0] / 2 # y = 500 - sur2.get_size()[1] / 2 # screen.blit(sur2, (x, y)) # pygame.transform.rotozoom - 旋转+等比例绽放,太好了 # 过滤的缩放和旋转 # rotozoom(Surface, angle, scale) -> Surface # 这是组合的缩放和旋转变换。 生成的Surface将是一个过滤的32位Surface。 scale参数是一个浮点值,将乘以当前分辨率。 # 角度参数是一个浮点值,表示要旋转的逆时针度数。 负旋转角度将顺时针旋转。 # 参数: 45是旋转的角度,0.5是绽放比例。 # sur1 = pygame.transform.rotozoom(sur, 45, 0.5) # x = 500 - sur1.get_size()[0] / 2 # y = 400 - sur1.get_size()[1] / 2 # screen.blit(sur1, (x, y)) # pygame.transform.scale2x - 专门的图像倍增器 # 专门的图像倍增器 # scale2x(Surface, DestSurface = None) -> Surface # 这将返回一个原始尺寸的两倍的新图像。 它使用AdvanceMAME Scale2X算法,该算法可以实现“无瑕疵”的位图图形缩放。 # 这实际上只对纯色的简单图像产生影响。 在摄影和抗锯齿图像上,它看起来像一个普通的未过滤的尺度。 # 可以使用可选的目标surface,而不是创建新的目标surface。 如果你想反复缩放某些东西,这会更快。 但是, # 目标必须是传入的源surface大小的两倍。目标surface也必须是相同的格式。 # pygame.transform.smoothscale - 平滑地将曲面缩放到任意大小 # smoothscale(Surface, (width, height), DestSurface = None) -> Surface # 使用两种不同算法中的一种来根据需要缩放输入surface的每个维度。 对于收缩,输出像素是它们覆盖的颜色的面积平均值。 对于扩展,使用双线性滤波器。 # 对于x86-64和i686架构,包含优化的MMX程序,运行速度比其他机器类型快得多。 大小是(width, height)的2个数字序列。 # 此函数仅适用于24位或32位surface。 如果输入表面位深度小于24,则抛出异常。 # 参数跟scale一样,就是放大后没有马赛克,马赛克被周围的像素填充了,但并没改变图像的清晰度,所以,没多大用, # pygame.transform.get_smoothscale_backend - 返回正在使用的smoothscale过滤器版本:‘GENERIC’,‘MMX’或’SSE’ # pygame.transform.set_smoothscale_backend - 将smoothscale过滤器版本设置为以下之一:‘GENERIC’,‘MMX’或’SSE’ # pygame.transform.chop - 获取移除的内部区域的图像副本 # 操作的结果就是在图像指定rect区域挖一个洞,然后四周往里挤填补这个洞,这样的操作很难达到我们预期的效果 # chop(Surface, rect) -> Surface # 提取图像的一部分。 围绕给定矩形区域的所有垂直和水平像素都被移除。 然后将角落区域(与矩形对角线)放在一起。 (此操作不会更改原始图像。) # 注意:如果您想要一个“crop(裁剪)”返回矩形内图像的一部分,您可以使用矩形blit到新surface或复制子surface # 把指定矩形的区域剪掉 # sur1 = pygame.transform.chop(sur, (0, 0, 500, 500)) # pygame.transform.laplacian - 在surface中查找边 # 在surface中查找边 # laplacian(Surface, DestSurface = None) -> Surface # 使用拉普拉斯算法查找曲面中的边。 # 注意,只能查找24位通道的图像,不能查找32位alpha的图像,所以,需要:.convert(),不能.convert_alpha() # pygame.transform.average_surfaces - 从许多surface中找到平均surface。 # sur = pygame.transform.scale(sur, (500,300)) # sur2 = pygame.transform.scale(sur2, (500, 300)) # sur1 = pygame.transform.average_surfaces((sur,sur2)) # 把多个图像混合在一起,小心,多个图片的大小要一样,否则崩溃 # pygame.transform.average_color - 查找surface的平均颜色 # 计算图像的平均颜色,注意了,返回的是一个list(),记录颜色信息。 # pygame.transform.threshold - 查找表面中的哪些像素以及多少像 # 在’search_color’或’search_surf’的阈值内。 # https://blog.csdn.net/enderman_xiaohei/article/details/88282456 # # surface变换是移动像素或调整像素大小的操作。 所有这些函数都使用Surface进行操作并返回带有结果的新Surface。 # 一些变换被认为是破坏性的。 这意味着每次执行它们都会丢失像素数据。 常见的例子是调整大小和旋转。 因此,重新转换原始surface比保持多次转换图像更好。 # (例如,假设您正在为一个弹跳弹簧进行动画扩展和收缩。如果您将大小更改应用于前一个图像,则会丢失细节。相反,始终从原始图像开始并缩放到所需大小。)
混音器
# -*- coding: utf-8 -*- # 预初始化声音 # pygame.mixer.pre_init(44100, -16, 2, 1024 * 4) # 参数: # 1 frequency – 声音文件的采样率,尽管高采样率可能会降低性能,但是再次的声卡都可以轻松对应44.1KHz的声音回放,所以就设这个值吧; # 2 size – 量化精度, size参数表示每个音频样本使用的位数。如果值为负,则将使用带符号的样本值。正值表示将使用不带符号的音频样本。无效值会引发异常 # 3 声道 # 4 缓冲 import pygame,time # pygame.mixer.pre_init(44100, -16, 2, 1024 * 4) # pygame.init() # sound=pygame.mixer.Sound('F:/082.mp3') # print(sound) # <Sound object at 0x0000022960E7C030> # a= sound.play() # print(a) # <Channel object at 0x0000022960FD4050> # print(pygame.mixer.get_num_channels()) # 8 说明最多可以同时播放8个声音 # pygame.mixer.set_num_channels(10) # 可以修改需要的声音,量力而行 # time.sleep(5) # sound.play() # 上一个声音没播放完,可以同时重复播放 # time.sleep(31) # pygame.mixer并不适合播放长时间的音乐播放,我们要使用pygame.mixer.music。 # 音乐(music)播放和声音(sound)播放的不同之处在于音乐是流式的,并且绝对不会在一开始就把一个音乐文件全部载入。 # 调音系统在工作刚开始时仅支持单音乐流 pygame.mixer.pre_init(44100, -16, 2, 1024 * 4) pygame.init() # 不初始化就无法完成下面的加载 pygame.mixer.music.load('F:/mp3/075.mp3') pygame.mixer.music.play(2, 180, 400) # def play( # loops: Optional[int] = 0, start: Optional[float] = 0.0, fade_ms: Optional[int] = 0 # ): ... # 参数:1 循环次数(wmv 和 ogg有效,mp3无效) 2 开始时间(秒) 3 淡出(毫秒) time.sleep(2) pygame.mixer.music.play(4,100) # 不可以同时播放多个声音,将覆盖前面的声音 pygame.mixer.music.fadeout(8000) # 声音淡出,慢慢就没得了,然后就是停止播放 pygame.mixer.music.queue('F:/mp3/082.mp3') # 加入队列 # while 1: # print(pygame.mixer.music.get_pos()) # 可以获取播放进度,单位:毫秒。-1时播放结束。 # print(pygame.mixer.music.get_busy()) # 忙碌,1:正在播放,0:播放结束 # print(pygame.mixer.music.get_endevent()) # ?? 0 # if not pygame.mixer.music.get_busy(): # pygame.mixer.music.play() time.sleep(1000) # pygame.mixer.music.load() —— 载入一个音乐文件用于播放 # pygame.mixer.music.play() —— 开始播放音乐流 # pygame.mixer.music.rewind() —— 重新开始播放音乐 # pygame.mixer.music.stop() —— 结束音乐播放 # pygame.mixer.music.pause() —— 暂停音乐播放 # pygame.mixer.music.unpause() —— 恢复音乐播放 # pygame.mixer.music.fadeout() —— 淡出的效果结束音乐播放 # pygame.mixer.music.set_volume() —— 设置音量 # pygame.mixer.music.get_volume() —— 获取音量 # pygame.mixer.music.get_busy() —— 检查是否正在播放音乐 # pygame.mixer.music.set_pos() —— 设置播放的位置 # pygame.mixer.music.get_pos() —— 获取播放的位置 # pygame.mixer.music.queue() —— 将一个音乐文件放入队列中,并排在当前播放的音乐之后 # pygame.mixer.music.set_endevent() —— 当播放结束时发出一个事件 # pygame.mixer.music.get_endevent() —— 获取播放结束时发送的事件

浙公网安备 33010602011771号