主要内容 #
-
- 定义小人类
- 定义金币类
- 实现效果
程序中需要用到的图片压缩包,点击下载。
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函数中初始化这两个类。