深入认识Python多媒体库Pygame
发布时间:2021-11-09 09:31:06 所属栏目:PHP教程 来源:互联网
导读:Pygame是一个用于Python的多媒体库,用于制作游戏和多媒体应用程序。它是一种使用 SDL(Simple DirectMedia Layer)编写的游戏库。 在本节中,我们将介绍pygame函数的基础知识,但不定义类和对象。 导入模块 要使用Pygame库中的方法,必须首先导入模块: imp
Pygame是一个用于Python的多媒体库,用于制作游戏和多媒体应用程序。它是一种使用 SDL(Simple DirectMedia Layer)编写的游戏库。 在本节中,我们将介绍pygame函数的基础知识,但不定义类和对象。 导入模块 要使用Pygame库中的方法,必须首先导入模块: import pygame import语句将pygame版本和pygame网站的链接写到控制台: pygame 1.9.6 Hello from the pygame community. https://www.pygame.org/contribute.html 深入理解Python多媒体库Pygame Pygame导入语句始终放在程序的开头。 它将pygame类,方法和属性导入当前名称空间。 现在可以通过pygame.method()调用此新方法。 例如,我们现在可以使用以下命令初始化或退出pygame: pygame.init() pygame.quit() 函数display.set_mode()设置屏幕尺寸。 它返回一个我们分配给变量屏幕的Surface对象。 此变量将是最常用的变量之一。 它代表了我们看到的窗口: screen = pygame.display.set_mode((800, 500)) 深入理解Python多媒体库Pygame 您现在可以运行该程序并对其进行测试。 目前,它的作用很小。 它会打开一个窗口并立即将其关闭。 显示事件循环 任何交互式应用程序中最重要的部分是事件循环。 对事件做出反应允许用户与应用程序进行交互。 事件是程序中可能发生的事情,例如 鼠标点击 鼠标移动 键盘按键 操纵杆动作 以下是一个无限循环,该循环将所有事件打印到控制台: while True: for event in pygame.event.get(): print(event) 尝试移动鼠标,单击鼠标按钮或在键盘上键入内容。 您执行的每个操作都会产生一个事件,该事件将打印在控制台上。 看起来像这样: [linuxidc@linux:~/www.linuxidc.com]$ python3 linuxidc.com.py pygame 1.9.6 Hello from the pygame community. https://www.pygame.org/contribute.html <Event(1-ActiveEvent {'gain': 0, 'state': 1})> <Event(1-ActiveEvent {'gain': 0, 'state': 2})> <Event(1-ActiveEvent {'gain': 1, 'state': 1})> <Event(4-MouseMotion {'pos': (66, 143), 'rel': (66, 143), 'buttons': (0, 0, 0), 'window': None})> <Event(4-MouseMotion {'pos': (71, 143), 'rel': (5, 0), 'buttons': (0, 0, 0), 'window': None})> 认识Python多媒体库Pygame 由于我们处于infite循环中,因此无法从应用程序中退出该程序。 为了退出程序,使控制台成为活动窗口并键入ctrl-C。 这会将以下消息写入控制台: <Event(1-ActiveEvent {'gain': 0, 'state': 1})> ^CTraceback (most recent call last): File "linuxidc.com.py", line 7, in <module> for event in pygame.event.get(): KeyboardInterrupt 认识Python多媒体库Pygame 正确退出事件循环 为了从应用程序内部使用窗口关闭按钮(QUIT事件)正确退出应用程序,我们修改了事件循环。 首先,我们介绍运行的布尔变量,并将其设置为True。 在事件循环中,我们检查QUIT事件。 如果发生,我们将运行设置为False: running = True while running: for event in pygame.event.get(): if event.type == pygame.QUIT: running = False pygame.quit() 一旦事件循环,我们将调用pygame.quit()函数以正确结束应用程序。 定义颜色 颜色定义为基色为红色,绿色和蓝色的元组。 这称为RGB模型。 每个基色都表示为介于0(最小)和255(最大)之间的数字,该数字在内存中占用1个字节。 RGB颜色因此表示为一个3字节的值。 混合两种或更多种颜色会产生新的颜色。 通过这种方式,总共可以显示1600万种不同的颜色。 深入理解Python多媒体库Pygame 让我们将基色定义为树基值的元组。 由于颜色是常数,因此我们将使用大写字母写它们。 缺少所有颜色都会导致黑色。 所有三个分量的最大值均为白色。 三个相同的中间值产生灰色: BLACK = (0, 0, 0) GRAY = (127, 127, 127) WHITE = (255, 255, 255) 树的基色定义为: RED = (255, 0, 0) GREEN = (0, 255, 0) BLUE = (0, 0, 255) 通过混合两种基色,我们获得了更多的颜色: YELLOW = (255, 255, 0) CYAN = (0, 255, 255) MAGENTA = (255, 0, 255) 在事件循环的结尾,我们添加了以下内容: screen.fill(YELLOW) pygame.display.update() fill(color)方法使用指定的颜色填充整个屏幕。 此时,将不会显示任何内容。 为了显示任何内容,必须调用pygame.display.update()函数。 深入理解Python多媒体库Pygame 切换背景色 在程序的开头,我们添加了一个新的变量background并将其初始化为灰色: background = GRAY 在事件循环中,我们现在正在寻找KEYDOWN事件。 如果找到,我们将检查是否已按下R或G键,并将背景颜色更改为红色(R)和绿色(G)。 这是在事件循环中添加的代码: if event.type == pygame.KEYDOWN: if event.key == pygame.K_r: background = RED elif event.key == pygame.K_g: background = GREEN 在绘图部分,我们现在使用代表背景颜色的变量background: screen.fill(background) pygame.display.update() 测试程序。 按R和G键可以切换背景色。 Import pygame.locals pygame.locals模块包含pygme使用和定义的约280个常量。 在程序开始时放置此语句将全部导入: import pygame from pygame.locals import * 我们找到关键修饰符(alt,ctrl,cmd等) KMOD_ALT, KMOD_CAPS, KMOD_CTRL, KMOD_LALT, KMOD_LCTRL, KMOD_LMETA, KMOD_LSHIFT, KMOD_META, KMOD_MODE, KMOD_NONE, KMOD_NUM, KMOD_RALT, KMOD_RCTRL, KMOD_RMETA, KMOD_RSHIFT, KMOD_SHIFT, 数字键: K_0, K_1, K_2, K_3, K_4, K_5, K_6, K_7, K_8, K_9, 特殊字符键: K_AMPERSAND, K_ASTERISK, K_AT, K_BACKQUOTE, K_BACKSLASH, K_BACKSPACE, K_BREAK, 字母表中的字母键: K_a, K_b, K_c, K_d, K_e, K_f, K_g, K_h, K_i, K_j, K_k, K_l, K_m, K_n, K_o, K_p, K_q, K_r, K_s, K_t, K_u, K_v, K_w, K_x, K_y, K_z, 现在我们无需编写pygame.KEYDOWN即可编写KEYDOWN。 使用字典对密钥进行解码 解码许多密钥的最简单方法是使用字典。 无需定义许多if-else情况,我们只需使用键盘按键条目创建字典即可。 在此示例中,我们希望将8个不同的键与8种不同的背景色相关联。 在程序的开始,我们定义此键色字典: key_dict = {K_k:BLACK, K_r:RED, K_g:GREEN, K_b:BLUE, K_y:YELLOW, K_c:CYAN, K_m:MAGENTA, K_w:WHITE} print(key_dict) 将字典打印到控制台会得到以下结果: {107: (0, 0, 0), 114: (255, 0, 0), 103: (0, 255, 0), 98: (0, 0, 255), 121: (255, 255, 0), 99: (0, 255, 255), 109: (255, 0, 255), 119: (255, 255, 255)} 此处显示的键及其ASCII码。 例如,k的ASCII码为107。颜色表示为元组。 黑色表示为(0,0,0)。 现在,事件循环变得非常简单。 首先,我们检查事件类型是否为KEYDOWN事件。 如果是,我们检查事件密钥是否在字典中。 如果是,我们将查找与该键关联的颜色,并为其设置背景色: if event.type == KEYDOWN: if event.key in key_dict: background = key_dict[event.key] 尝试按8个指定的键更改背景色。 深入理解Python多媒体库Pygame 更改窗口标题 pygame.display.set_caption(title)功能允许更改应用程序窗口的标题(标题)。 我们可以将其添加到事件循环中: if event.key in key_dict: background = key_dict[event.key] caption = 'background color = ' + str(background) pygame.display.set_caption(caption) 这将在窗口标题中显示当前背景色的RGB值。 深入理解Python多媒体库Pygame 探索简单的球类游戏 为了演示Pygame可以做什么,这里有一个简单的程序,演示了弹跳球的动画。 该程序使用Rect类表示矩形区域。 根据球图像创建一个实例: rect = ball.get_rect() Rect对象具有4个属性: rect.left rect.top rect.right rect.bottom 可以使用move()法移动Rect对象: rect = rect.move(speed) 导入pygame模块后,我们定义一些变量,例如屏幕尺寸和两种颜色: import pygame from pygame.locals import * size = 640, 320 width, height = size GREEN = (150, 255, 150) RED = (255, 0, 0) 然后我们初始化pygame并创建screen变量: pygame.init() screen = pygame.display.set_mode(size) running = True 球的位置用Rect对象表示: ball = pygame.image.load("ball.gif") rect = ball.get_rect() speed = [2, 2] 在事件循环内,我们仅检查QUIT事件: while running: for event in pygame.event.get(): if event.type == QUIT: running = False 然后,我们移动矩形并检查左/右和上/下边框: rect = rect.move(speed) if rect.left < 0 or rect.right > width: speed[0] = -speed[0] if rect.top < 0 or rect.bottom > height: speed[1] = -speed[1] 最后,我们绘制一个绿色背景,一个红色矩形和球图像: screen.fill(GREEN) pygame.draw.rect(screen, RED, rect, 1) screen.blit(ball, rect) pygame.display.update() pygame.quit() 这是球和Rect轮廓的外观: 深入理解Python多媒体库Pygame 好了,本文就这样,你现在可以尝试了解该程序的作用。 然后尝试修改其参数。 ![]() (编辑:应用网_丽江站长网) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |