在事件循环中,我们现在正在寻找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个指定的键更改背景色。
更改窗口标题
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值。
探索简单的球类游戏
为了演示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
然后,我们移动矩形并检查左/右和上/下边框: