「这是我参与11月更文挑战的第5天,活动详情查看:2021最后一次更文挑战」
本系列专栏将通过不断编写游戏的方式,带你夯实 Python 知识。
本专栏追求迅速掌握 pygame 的同时,夯实 python 知识,所以一起来吧。
先阅读代码
下面的代码用来实现键盘控制物体运动,分析类的内容参见后文。
import pygame
pygame.init()
w, h = 500, 300
pygame.display.set_mode((w, h))
screen = pygame.display.get_surface()
# 加载背景图片
bg = pygame.image.load("./imgs/bg.png")
# 图片进行调整
bg = pygame.transform.scale(bg, (w, h))
# 加载小球
ball_img = pygame.image.load("./imgs/ball.png")
# 创建精灵
ball = pygame.sprite.Sprite()
ball.image = ball_img
ball.rect = ball.image.get_rect()
ball.rect.x, ball.rect.y = w / 2, h / 2
# 精灵组
player_group = pygame.sprite.Group()
player_group.add(ball)
# 游戏开始
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
pygame.display.quit()
quit()
if event.type == pygame.KEYDOWN:
keys = pygame.key.get_pressed()
if keys[pygame.K_LEFT]:
ball.rect.x -= 10
elif keys[pygame.K_RIGHT]:
ball.rect.x += 10
elif keys[pygame.K_UP]:
ball.rect.y -= 10
elif keys[pygame.K_DOWN]:
ball.rect.y += 10
# 界面绘制
screen.blit(bg, (0, 0))
player_group.draw(screen)
pygame.display.update()
** pygame.display.get_surface()** 获取当前游戏窗口,返回一个 Surface 对象,一般在写的时候更多的作者喜欢写成下面的样子。
screen = pygame.display.set_mode((500, 300))
bg = pygame.transform.scale(bg, (w, h))
对素材图片进行缩放,使用的是快速缩放,对像素的处理不够细致,如果希望产生比较平滑的图像,建议使用 pygame.transform.smoothscale() 函数。
pygame.image.load("./imgs/ball.png") 很容易理解,加载一张图片素材。
pygame.sprite.Sprite()
首次接触到,pygame 非常核心的一个概念,精灵类,后面会反复用到。
用到精灵类,就无法避免的涉及精灵图,这些在下一篇博客进行详细说明,先对其有一些基本的印象。
Sprite 对象用到的属性和方法主要有以下几个:
self.image:显示的图片,如果设置为pygame.Surface([40,40]),那表示该精灵对象是一个40x40的矩形;self.image.fill([color]):着色;self.rect:显示位置,设置该值时需要先获取image的矩形区域,self.rect = self.image.get_rect(),然后在对其进行设定,例如self.rect.topleft=(0,0)表示左上角(0,0)。topleft等价的属性有topright、bottomleft、bottomright都是直接设置角坐标,还可以通过self.rect.top、self.rect.bottom、self.rect.right、self.rect.left分别进行设置。self.update:使精灵行为更新。
ball.image.get_rect() 获取图片素材的的矩形区域,返回的数据格式如下:
ball.rect = ball.image.get_rect()
print(ball.rect)
ball.rect.x, ball.rect.y = w / 2, h / 2
print(ball.rect)
移动前与移动后的数据对比:
<rect(0, 0, 40, 40)>
<rect(250, 150, 40, 40)>
pygame.sprite.Group() 精灵组类,当游戏中出现大量的精灵对象时,为了能够统一进行管理,引入了精灵组概念,先理解成一个简单的容器即可。
keys = pygame.key.get_pressed() 获取键盘上所有按键的状态,它会返回一个由返回的元组是由0,1组成的元组:,如果某个位置为 1,表示被按下。
例如输出 keys 得到的结果如下
获取键盘按下的键,之后进行指定操作
if keys[pygame.K_LEFT]:
ball.rect.x -= 10
elif keys[pygame.K_RIGHT]:
ball.rect.x += 10
elif keys[pygame.K_UP]:
ball.rect.y -= 10
elif keys[pygame.K_DOWN]:
ball.rect.y += 10
素材可以任意准备,最终实现的效果是按下键盘上的方向键,实现对目标图片的操作。
本系列专栏属于番外篇,希望你能学到新知识。 有任何疑问,都可以联系橡皮擦进行解决,一起做游戏吧 本专栏每天的练习量大概在 1 小时左右,整篇博客节奏会比较快,毕竟咱们是有基础的人。