下面将飞船加入到游戏中。为了在屏幕上绘制玩家的飞船,我们将加载一幅图像,再使用Pygame方法blit()绘制它。 为游戏选择素材时,务必要注意许可。最安全、最不费钱的方式是使用http://pixabay.com/等网站提供的图形,这些图形无需许可,你可以对其进行修改。 在游戏中几乎可以使用任何类型的图像文件,但使用位图(.bmp)文件最为简单,因为Pygame默认加载位图。虽然可配置Pygame以使用其他文件类型,但有些文件类型要求你在计算机上安装相应的图像库。大多数图像都为.jpg、.png或.gif格式,但可使用Photoshop、GIMP和Paint等工具将其转换为位图。 选择图像时,要特别注意其背景色。请尽可能选择背景透明的图像,这样可使用图像编辑器将其背景设置为任何颜色。图像的背景色与游戏的背景色相同时,游戏看起来最漂亮;你也可以将游戏的背景色设置成与图像的背景色相同。 就游戏《外星人入侵》而言,你可以使用文件ship.bmp(如图12-1所示),这个文件可在本书的配套资源(https://www.nostarch.com/pythoncrashcourse/)中找到。这个文件的背景色与这个项目使用的设置相同。请在主项目文件夹(alien_invasion)中新建一个文件夹,将其命名为images,并将文件ship.bmp保存到这个文件夹中。 图12-1 游戏《外星人入侵》中的飞船 12.4.1 创建Ship类 选择用于表示飞船的图像后,需要将其显示到屏幕上。我们将创建一个名为ship的模块,其中包含Ship类,它负责管理飞船的大部分行为。 ship.py import pygame class Ship(): def __init__(self, screen): """初始化飞船并设置其初始位置""" self.screen = screen # 加载飞船图像并获取其外接矩形 self.image = pygame.image.load('images/ship.bmp') self.rect = self.image.get_rect() self.screen_rect = screen.get_rect() # 将每艘新飞船放在屏幕底部中央 self.rect.centerx = self.screen_rect.centerx self.rect.bottom = self.screen_rect.bottom def blitme(self): """在指定位置绘制飞船""" self.screen.blit(self.image, self.rect) 首先,我们导入了模块pygame。Ship的方法__init__()接受两个参数:引用self和screen,其中后者指定了要将飞船绘制到什么地方。为加载图像,我们调用了pygame.image.load()(见)。这个函数返回一个表示飞船的surface,而我们将这个surface存储到了self.image中。 加载图像后,我们使用get_rect()获取相应surface的属性rect(见)。Pygame的效率之所以如此高,一个原因是它让你能够像处理矩形(rect对象)一样处理游戏元素,即便它们的形状并非矩形。像处理矩形一样处理游戏元素之所以高效,是因为矩形是简单的几何形状。这种做法的效果通常很好,游戏玩家几乎注意不到我们处理的不是游戏元素的实际形状。 处理rect对象时,可使用矩形四角和中心的x和y坐标。可通过设置这些值来指定矩形的位置。 要将游戏元素居中,可设置相应rect对象的属性center、centerx或centery。要让游戏元素与屏幕边缘对齐,可使用属性top、bottom、left或right;要调整游戏元素的水平或垂直位置,可使用属性x和y,它们分别是相应矩形左上角的x和y坐标。这些属性让你无需去做游戏开发人员原本需要手工完成的计算,你经常会用到这些属性。 注意 在Pygame中,原点(0, 0)位于屏幕左上角,向右下方移动时,坐标值将增大。在1200×800的屏幕上,原点位于左上角,而右下角的坐标为(1200, 800)。 我们将把飞船放在屏幕底部中央。为此,首先将表示屏幕的矩形存储在self.screen_rect中(见),再将self.rect.centerx(飞船中心的x坐标)设置为表示屏幕的矩形的属性centerx(见),并将self.rect.bottom(飞船下边缘的y坐标)设置为表示屏幕的矩形的属性bottom。Pygame将使用这些rect属性来放置飞船图像,使其与屏幕下边缘对齐并水平居中。 在处,我们定义了方法blitme(),它根据self.rect指定的位置将图像绘制到屏幕上。 12.4.2 在屏幕上绘制飞船 下面来更新alien_invasion.py,使其创建一艘飞船,并调用其方法blitme(): alien_invasion.py --snip-- from settings import Settings from ship import Ship def run_game(): --snip-- pygame.display.set_caption("Alien Invasion") # 创建一艘飞船 ship = Ship(screen) # 开始游戏主循环 while True: --snip-- # 每次循环时都重绘屏幕 screen.fill(ai_settings.bg_color) ship.blitme() # 让最近绘制的屏幕可见 pygame.display.flip() run_game() 我们导入Ship类,并在创建屏幕后创建一个名为ship的Ship实例。必须在主while循环前面创建该实例(见),以免每次循环时都创建一艘飞船。填充背景后,我们调用ship.blitme()将飞船绘制到屏幕上,确保它出现在背景前面(见)。 现在如果运行alien_invasion.py,将看到飞船位于空游戏屏幕底部中央,如图12-2所示。 图12-2 游戏《外星人入侵》屏幕底部中央有一艘飞船
Python编程:从入门到实践——12.4 添加飞船图像
书名: Python编程:从入门到实践
作者: [美] 埃里克·马瑟斯
出版社: 人民邮电出版社
原作名: Python Crash Course
副标题: 从入门到实践
译者: 袁国忠
出版年: 2016-7-1
页数: 459
定价: CNY 89.00
装帧: 平装
ISBN: 9787115428028