6.pygame图片移动

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

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

拜拜!

  • 6
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Pygame中,可以通过修改飞机坐标来实现飞机的移动。可以使用键盘事件来控制飞机的移动方向和速度。在事件循环中,可以检测键盘事件,根据按键的不同来修改飞机的坐标。具体实现可以参考以下步骤: 1. 定义一个字典offset,用于存储不同方向上的移动值,例如:offset = {pygame.K_LEFT: 0, pygame.K_RIGHT: 0, pygame.K_UP: 0, pygame.K_DOWN: 0}。 2. 在事件循环之外,定义一个变量x和y,分别表示飞机的横坐标和纵坐标。 3. 在事件循环中,检测键盘事件,根据按键的不同来修改offset中对应方向上的移动值。例如,如果按下左箭头键,则offset[pygame.K_LEFT] = 3,表示向左移动3个像素。 4. 根据offset中的移动值来修改飞机的坐标。例如,x += offset[pygame.K_RIGHT] - offset[pygame.K_LEFT],表示向右移动offset[pygame.K_RIGHT]个像素,向左移动offset[pygame.K_LEFT]个像素。 5. 如果松开键盘,则将offset中对应方向上的移动值归零,停止移动。 下面是一个示例代码,可以实现飞机在窗口中上下左右移动: ```python import pygame pygame.init() # 设置窗口大小 size = width, height = 640, 480 screen = pygame.display.set_mode(size) # 加载飞机图片 plane_img = pygame.image.load("plane.png") plane_rect = plane_img.get_rect() # 定义移动值 offset = {pygame.K_LEFT: 0, pygame.K_RIGHT: 0, pygame.K_UP: 0, pygame.K_DOWN: 0} # 定义飞机初始位置 x, y = width // 2, height // 2 while True: # 处理事件 for event in pygame.event.get(): if event.type == pygame.QUIT: pygame.quit() exit() elif event.type == pygame.KEYDOWN: if event.key in offset: offset[event.key] = 3 elif event.type == pygame.KEYUP: if event.key in offset: offset[event.key] = 0 # 修改飞机坐标 x += offset[pygame.K_RIGHT] - offset[pygame.K_LEFT] y += offset[pygame.K_DOWN] - offset[pygame.K_UP] # 绘制飞机 screen.fill((255, 255, 255)) screen.blit(plane_img, (x, y)) pygame.display.flip() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值