ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

Pygame入门:从零创建游戏窗口与角色控制

Pygame入门:从零创建游戏窗口与角色控制

它是一个现在比较流行的一个跨平台模块, 这个模块是专门为了电子游戏才做出来用的, 它给提供了做游戏需要用到的图形库和声音库。要想开始用这个模块的话, 你需要已经具备了那些相关的基础知识, 并且要把这个模块已经在你的系统上头安装好了。

咱们在第一步得先把东西装好, 具体做法就是用 pip 命令去弄, 也就是执行: pip。等到这安装的事儿圆满搞定了, 接下来就能动手整出一个最基本的那种游戏窗口了。

import pygame

pygame.init()

# 设置屏幕大小

screen = pygame.display.set_mode((800, 600))

# 设置标题

pygame.display.set_caption("我的游戏")

# 游戏主循环

running = True

while running:

for event in pygame.event.get():

if event.type == pygame.QUIT:

running = False

# 退出游戏前清理Pygame资源

pygame.quit()

​

在当中, 所有互动都是通过事件来进行处理的。上面的那个主循环会一直不停地运转, 等着接收并处理那些事件, 比如有退出的这种游戏行为。而每一次迭代进行的时候, 游戏都会去查一遍事件的这个队列里都有些什么。

然后, 大家能够在电脑显示器的区域里面把某些东西给画出来。在这个环节里面, 各位能够应用不少种不同的操作方式来完成图形的制作或者是图片内容的读取工作, 最终把这些东西呈现在屏幕上面去。

# 设置颜色

WHITE = (255, 255, 255)

# 游戏主循环

while running:

screen.fill(WHITE) # 填充背景色

for event in pygame.event.get():

if event.type == pygame.QUIT:

running = False

pygame.display.update() # 更新屏幕显示

​

必须要确保你在主循环里面包含了那两个函数, 也就是写成..()或者..flip的样子, 这样干的话, 就能让屏幕的显示内容得到及时的更新。

随后, 我们要去执行添加角色以及移动这两个操作。在一般情况下, 我们会倾向于使用类这个东西来对游戏里面的角色进行管理工作, 具体是怎么弄的呢?

class Player():

def __init__(self):

self.image = pygame.image.load('player.png')

self.x = 370

self.y = 480

self.x_change = 0

def draw(self, screen):

screen.blit(self.image, (self.x, self.y))

def move(self):

self.x += self.x_change

player = Player()

# 在游戏主循环中

while running:

screen.fill(WHITE) # 填充背景色

player.move()

player.draw(screen)

for event in pygame.event.get():

if event.type == pygame.QUIT:

running = False

if event.type == pygame.KEYDOWN:

if event.key == pygame.K_LEFT:

player.x_change = -0.3

if event.key == pygame.K_RIGHT:

player.x_change = 0.3

if event.type == pygame.KEYUP:

if event.key == pygame.K_LEFT or event.key == pygame.K_RIGHT:

player.x_change = 0

pygame.display.update() # 更新屏幕显示

对于这个例子来说, 我们要实现的功能是, 只要玩家们一直按着那个箭头方向的关键按钮不动, 角色就会继续往前跑, 但是一旦玩家们把爪子松开不再按了, 就得立刻停下来, 不能让它乱动。

游戏通常也需要一个得分系统, 而且还需要对游戏结束的情况进行处理。通常情况下,这一过程会涉及到监测物体的碰撞情况, 并且在检测到碰撞时增加分数, 或者当游戏最终结束时进行必要的清理工作。

# 游戏结束函数简例

def game_over():

font = pygame.font.Font('freesansbold.ttf', 64)

text = font.render('游戏结束', True, (255, 0, 0))

screen.blit(text, (200, 250))

# 在游戏主循环的适当位置调用game_over

# 游戏结束条件检查

# 如果游戏结束了

game_over()

在实打实的操作过程里, 你有可能需要去搭建一些更加复杂的类以及函数, 好用来处理游戏里面的分数、剩余生命值、各种敌人以及其他与游戏相关的机制。

这里需要你好好记住的一件事是, 在游戏开发里面绝大多数的逻辑运算内容, 都应当被封装在一个所谓的游戏循环里面去运行, 并且还要通过检查各种事件的变化以及更新游戏当前的状态来进行管理操作。。

在游戏的设计阶段, 还有游戏的开发过程之中, 请你去确保那个代码的结构是属于良好的那种样子的, 这样做的话, 等到以后项目的复杂度变高了之后, 你就能保持一个清晰的开发思路了, 另外呢, 注释和文档也属于非常重要的一部分内容, 它们不仅可以帮你去回忆你的那些代码到底是具备什么样的功能的, 同时它们也可以帮助其他的人去理解你写出来的这些代码究竟是什么回事。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进