跳至正文
View Categories

1 min read

主要内容 #

    1. 定义小人类
    2. 定义金币类
    3. 实现效果

程序中需要用到的图片压缩包,点击下载

1.定义小人类 #

我们要实现小人的移动来接掉落的金币,首先需要定义一个小人类,需要控制小人的移动,并且后面需要检测小人和金币是否接触,所以可以通过获取小人的矩形框和金币的矩形框是否接触来判断,因此我们将小人类命名为PeopleRect(),其中初始化属性包含加载小人图片,获取小人的矩形框和初始位置。

class PeopleRect():  # 定义小人类
    def __init__(self, filename, initial_position):
        self.image = pygame.image.load(filename) # 加载小人图片
        self.rect = self.image.get_rect() # 获取小人的矩形框
        self.rect.topleft = initial_position

将以上所有代码加入到上一课创建的项目文件中(该代码请置放在main()函数上面),运行,发现无任何变化,因为该部分只是定义了小人类,还未做具体操作。

2.定义金币类 #

我们需要定义一个金币类来实现金币的掉落,思路同定义小人类相同,我们可以继承pygame的精灵类来定义金币类。精灵可以认为成是一个个小图片,一种可以在屏幕上移动的图形对象,并且可以与其他图形对象交互。

精灵图像可以是使用pygame绘制函数绘制的图像,也可以是原来就有的图像文件。pygame.sprite.Sprite就是Pygame里面用来实现精灵的一个类,使用时,并不需要对它实例化,只需要继承他,然后按需写出自己的类就好了,因此非常简单实用。

class GoldRect(pygame.sprite.Sprite):  # 定义金币类,继承pygame中的精灵类
    def __init__(self, gold_position, speed):  # 初始化方式同小人类,比小人类初始化属性多了一个speed掉落速度的属性
        pygame.sprite.Sprite.__init__(self)
        self.image = pygame.image.load('image\\gold.png')  # 加载金币图片
        self.rect = self.image.get_rect()  # 获取金币的矩形框
        self.rect.topleft = gold_position
        self.speed = speed # 掉落速度

    def move(self):  # 定义金币的移动move函数
        self.rect = self.rect.move(self.speed)

将以上所有代码加入到上一课创建的项目文件中,运行,发现无任何变化,因为该部分只是定义了金币类,还未做具体操作。

3.实现效果 #

接下来需要将main函数的代码进行添加,再次运行,即可在界面中查看画出小人的初始位置的效果以及金币落下的效果。

def main():
    x = 100
    y = 450
    filename = 'image\\1.png'
    backimg_ren = PeopleRect(filename, [x, y])  # 实例化小人类,给到初始位置
    backscreen.blit(backimg_ren.image, backimg_ren.rect)

    goldx = random.randint(50, 580)
    speed = [0, levelnum]
    mygold = GoldRect([goldx, 100], speed)  # 实例化金币类
    pygame.display.update()

    while True:  # 循环按键
        for event in pygame.event.get():
            if event.type == pygame.QUIT:
                pygame.quit()
                sys.exit()
        mygold.move()  # 金币移动,使用金币类
        backscreen.blit(mygold.image, mygold.rect)

        pygame.display.update()

小结 #

  • 本节主要介绍了接金币游戏所需的小人类和金币类的构建,以及在main函数中初始化这两个类。