美文网首页
Python外星人入侵游戏(三):创建飞船类

Python外星人入侵游戏(三):创建飞船类

作者: 微风细雨007 | 来源:发表于2018-01-29 13:41 被阅读550次

    任务:

    • 添加飞船类

    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外星人入侵游戏(二)

    相关文章

      网友评论

          本文标题:Python外星人入侵游戏(三):创建飞船类

          本文链接:https://www.haomeiwen.com/subject/qutxzxtx.html