【Python】pygame-项目实战(5)-绘制游戏图像

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第10天,点击查看活动详情

1. 实战项目概括

本节,我们将继续使用pygame模块完成飞机大战游戏的实战开发,飞机大战游戏的简要概括如下:

  • 把一些静止的图像绘制到游戏窗口
  • 根据用户的交互或其他情况,移动这些图像,产生动画效果
  • 根据图像之间是否发生重叠,判断敌机是否被摧毁等其他情况

2. 理解update()方法的作用

可以在screen对象完成所有blit方法之后,统一调用一次display.update方法,同样可以在屏幕上看到最终的绘制结果。

  • 使用display.set_model()创建的screen对象是一个内存中的屏幕数据对象
    • 可以理解成是油画的画布
  • screen,blit方法可以在画布上绘制很多图像
    • 例如:英雄、低级、子弹等等
    • 这些图像有可能会彼此重叠或者覆盖
  • display.update()会将画布的最终结果绘制在屏幕上,这样可以提高屏幕绘制效率,增加游戏的流畅度。

具体代码演示如下所示:该代码在所有绘制工作完成以后,最后调用一次update方法,就不需要在每次绘制后都调用update方法更新。

然而,在之前上一篇文章的案例中,对于每一个小图像的绘制,都是通过加载图像,绘制图像,更新图像这三个完整步骤来进行。(每一次都更新一遍图像效率太低了,因此,我们试试最后统一更新)

import pygame
pygame.init()

# 创建游戏的窗口 640*642
screen = pygame.display.set_mode((640, 642))

# 绘制背景图像
bg = pygame.image.load("./飞机大战资料包/images/background1.jpg")
screen.blit(bg, (0, 0))

# 绘制英雄的飞机
hero = pygame.image.load("./飞机大战资料包/images/me1.png")
screen.blit(hero, (300, 500))

# 可以在所有绘制工作完成之后,统一调用update方法
pygame.display.update()

while True:
    pass

pygame.quit()
复制代码

代码运行结果如下图所示:可以看出背景图和飞机图片都绘制在屏幕上了,因此update方法在最后使用可以一次性的把绘制好的图片更新在屏幕上了。

image.png

猜你喜欢

转载自juejin.im/post/7129870105462341646