任务:
- 添加飞船类
2.1:添加飞船形象
- 请在主项目文件夹(alien_invasion)中新建一个文件夹,将其命名为images
- 并将文件ship.bmp保存到这个文件夹中(也可以是ship.jpg之类的图片)
可以去我的github上下载图片
选择图像时,要特别注意其背景色。请尽可能选择背景透明的图像,这样可使用图像编辑器将其背景设置为任何颜色。图像的背景色与游戏的背景色相同时,游戏看起来最漂亮;你也可以将游戏的背景色设置成与图像的背景色相同。
2.2:创建Ship类
ship.py
import pygame
class Ship:
def __init__(self, screen):
"""初始化飞船并设置初始位置"""
self.screen = screen
# 加载飞船图像并获取其外接矩形
self.image = pygame.image.load('images/ship.png')
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 paint(self):
"""在指定位置绘制飞船"""
self.screen.blit(self.image, self.rect)
理解注释
- Ship的方法init()接受两个参数:引用self和screen,其中后者指定了要将飞船绘制到什么地方
- 为加载图像,我们调用了pygame.image.load()。这个函数返回一个表示飞船的surface,而我们将这个surface存储到了self.image中
- 加载图像后,我们使用get_rect()获取相应surface的属性rect
- 处理rect对象时,可使用矩形四角和中心的x和y坐标
- 要将游戏元素居中,可设置相应rect对象的属性center、 centerx或centery。要让游戏元素与屏幕边缘对齐,可使用属性top、 bottom、 left或right
- 我们将把飞船放在屏幕底部中央。为此,首先将表示屏幕的矩形存储在self.screen_rect中,再将self.rect.centerx(飞船中心的x坐标)设置为表示屏幕的矩形的属性centerx,并将self.rect.bottom(飞船下边缘的y坐标)设置为表示屏幕的矩形的属性bottom。 Pygame将使用这些rect属性来放置飞船图像,使其与屏幕下边缘对齐并水平居中。
- 我们定义了方法paint(),它根据self.rect指定的位置将图像绘制到屏幕上。
注意:在Pygame中,原点(0, 0)位于屏幕左上角,向右下方移动时,坐标值将增大。在1200×800的屏幕上,原点位于左上角,而右下角的坐标为(1200, 800)。
2.3:在屏幕上绘制飞船
alien_invasion.py
import pygame
import pygame.display as window
from settings import Settings
# 引入Ship类
from ship import Ship
def run_game():
pygame.init()
settings = Settings()
screen = window.set_mode(
(settings.screen_width, settings.screen_height))
window.set_caption("外星人入侵")
# 创建一艘飞船
ship = Ship(screen)
while True:
for event in pygame.event.get():
if event.type == pygame.QUIT:
exit()
screen.fill(settings.bg_color)
# 绘制飞船
ship.paint()
window.flip()
run_game()
- 我把pygame.display简称为了windows
- 我们导入Ship类,并在创建屏幕后创建一个名为ship的Ship实例。必须在主while循环前面创建该实例,以免每次循环时都创建一艘飞船。填充背景后,我们调用ship.paint()将飞船绘制到屏幕上,确保它出现在背景前面。
- 现在如果运行alien_invasion.py,将看到飞船位于空游戏屏幕底部中央
游戏《外星人入侵》屏幕底部中央有一艘飞船
Python外星人入侵游戏(一)
Python外星人入侵游戏(二)
网友评论