前言:我们在学习这节课的内容前,先给出我们的示例图片吧

bird.png

 

上节课我们学习了把图片绘制到屏幕上的函数,上节课应该已经猜到只要改变传入的xy的参数即可。不过我们这节课主要学习改变rect对象来实现图片移动。

blit(source, dest=(x, y), area=None, special_flags=0)

 对了!我们还要搭建程序框架呢!

#导入模块

import pygame

import sys

class Game:

def __init__(self):

pygame.init()#在使用pygame之前要先初始化

self.bird = pygame.image.load("bird.png")#导入bird.png图片

self.screen = pygame.display.set_mode((800, 600))#创建一个800*600的窗口

pygame.display.set_caption("Game")#设置窗口标题为”Game“

def Listen(self):#事件监测

for event in pygame.event.get():#事件监测

if event.type == pygame.QUIT:#点“X”号退出

pygame.quit()

sys.exit()

def main(self):

while True:#程序主循环

self.Listen()#事件监测

self.screen.blit(self.bird, (400, 300))#将bird.png绘制的400,300的位置

pygame.display.flip()#屏幕刷新

if __name__ == '__main__':

game = Game()

game.main()

 

我们先来讲一下第一种比较简单的方法吧:我们先在Game类的__init__的初始化的函数中添加一个自定义速度的变量和初始的x位置

self.speed = 5

self.x = 50

接着我们在Game类的main函数中的while循环中添加一个增加x的操作

self.x += 1

这样的作用是在每次循环中增加1个像素。但是这样还是不能改变图片的位置,我们还要改变绘制方法。我们把Game类的main函数中的while循环中的blit函数改成

self.screen.blit(self.bird, (self.x, 300))

运行后你应该会看的如下

 一只小鸟拖着尾迹向右边移动。那是因为没有刷新屏幕,我们要在Game类的main函数中的while循环中添加

self.screen.fill((0, 0, 0))

现在我们再运行

现在正常了

我们给一下最终代码

#导入模块

import pygame

import sys

class Game:

def __init__(self):

pygame.init()#在使用pygame之前要先初始化

self.bird = pygame.image.load("bird.png")#导入bird.png图片

self.screen = pygame.display.set_mode((800, 600))#创建一个800*600的窗口

pygame.display.set_caption("Game")#设置窗口标题为”Game“

self.speed = 5

self.x = 50

def Listen(self):#事件监测

for event in pygame.event.get():#事件监测

if event.type == pygame.QUIT:#点“X”号退出

pygame.quit()

sys.exit()

def main(self):

while True:#程序主循环

self.x += 1

self.Listen()#事件监测

self.screen.blit(self.bird, (self.x, 300))#将bird.png绘制的400,300的位置

pygame.display.flip()#屏幕刷新

self.screen.fill((0, 0, 0))

if __name__ == '__main__':

game = Game()

game.main()

方法2: 我们在Game类的__init__初始化函数中添加

self.bird_rect = self.bird.get_rect()

这个函数是用来求图片的rect区域,其中没有参数。再添加

self.bird_rect.center = (50, 300)

这个函数是用来设置图片的初始位置,center代表中间做锚点,其他我就先不说了,想要拓展的可以自己去网上搜一下。

我们在我们要在Game类的main函数中的while循环中添加

self.bird_rect.move_ip(1, 0)

这个函数用来改变xy的位置,正数为加,负数为减。

move_ip(x, y)

我们把Game类的main函数中的while循环中的blit函数改成

self.screen.blit(self.bird, self.bird_rect)

运行一下

我们最后给一下最终代码

#导入模块

import pygame

import sys

class Game:

def __init__(self):

pygame.init()#在使用pygame之前要先初始化

self.bird = pygame.image.load("bird.png")#导入bird.png图片

self.screen = pygame.display.set_mode((800, 600))#创建一个800*600的窗口

pygame.display.set_caption("Game")#设置窗口标题为”Game“

self.bird_rect = self.bird.get_rect()

self.bird_rect.center = (50, 300)

def Listen(self):#事件监测

for event in pygame.event.get():#事件监测

if event.type == pygame.QUIT:#点“X”号退出

pygame.quit()

sys.exit()

def main(self):

while True:#程序主循环

self.bird_rect.move_ip(1, 0)

self.Listen()#事件监测

self.screen.blit(self.bird, self.bird_rect)#将bird.png绘制的400,300的位置

pygame.display.flip()#屏幕刷新

self.screen.fill((0, 0, 0))

if __name__ == '__main__':

game = Game()

game.main()

 下节预告:我们会学习pygame的Sprite

拜拜!

好文推荐

评论可见,请评论后查看内容,谢谢!!!
 您阅读本篇文章共花了: