1、创建Ship类
import pygame
# -*- coding: utf-8 -*-
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)
1)使用函数pygame.image.load()返回一个表示飞船的surface
2)使用get_rec()获取相应surface的属性rect
注:pygame能够像处理矩形(rect对象)一样处理游戏元素,即便他们的形状并非矩形。
3)处理rect对象时,可使用矩形四角和中心的x和y坐标。可通过这些值来指定矩形的位置。
要使游戏元素居中,可设置相应的rect对象的属性center、centerx或centery。要让游戏元素与屏幕边缘对齐,可使用属性top、bottom、left或right;要调整游戏元素的水平或垂直位置,可使用属性x和y,它们分别是相应矩形左上角的x和y坐标。
注:在pygame中,原点(0,0)位于屏幕左上角,向右下方移动时,坐标将增大。
4)首先将表示屏幕的矩形存储在self.screen_rect中,再将self.rect.centerx(飞船中心的x坐标)设置为表示屏幕的矩形的属性centerx,并将self.rect.bottom(飞船下边缘的y坐标)设置为表示屏幕的矩形的属性bottom。pygame将使用这些rect属性来放置飞船图像,使其与屏幕下边缘对齐并居中。
5)方法blitme(),它根据self.rect指定的位置将图像绘制到屏幕上。
2、在屏幕上绘制飞船
#alien_invasion.py
# -*- coding: utf-8 -*-
import sys
from settings import Settings
from ship import Ship
import pygame
def run_game():
#初始化游戏并创建一个屏幕对象
pygame.init()
ai_settings=Settings()
screen=pygame.display.set_mode((ai_settings.screen_width,ai_settings.screen_height))
pygame.display.set_caption("Alien Invasion")
#设置游戏背景色
bg_color=(230,230,230)
#创建一艘飞船
ship=Ship(screen)
#开始游戏主循环
while True:
#监视键盘和鼠标事件
for event in pygame.event.get():
if event.type==pygame.QUIT:
sys.exit()
#每次循环时都会重绘屏幕
screen.fill(ai_settings.bg_color)
ship.blitme()
#让最近绘制的屏幕可见
pygame.display.flip()
run_game()
在创建屏幕后创建了一个ship实例。必须在while循环前创建该实例,避免每次循环时都要创建一艘飞船。填充背景后,调用ship.blitme()将飞船绘制到屏幕上,务必确保它出现在背景前面。