前言:我们在学习这节课的内容前,先给出我们的示例图片吧
上节课我们学习了把图片绘制到屏幕上的函数,上节课应该已经猜到只要改变传入的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文章来源:https://www.toymoban.com/news/detail-603146.html
拜拜!文章来源地址https://www.toymoban.com/news/detail-603146.html
到了这里,关于6.pygame图片移动的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!