前言:我們在學習這節(jié)課的內(nèi)容前,先給出我們的示例圖片吧

?
上節(jié)課我們學習了把圖片繪制到屏幕上的函數(shù),上節(jié)課應該已經(jīng)猜到只要改變傳入的xy的參數(shù)即可。不過我們這節(jié)課主要學習改變rect對象來實現(xiàn)圖片移動。
?
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))#創(chuàng)建一個800*600的窗口
pygame.display.set_caption("Game")#設置窗口標題為”Game“
def Listen(self):#事件監(jiān)測
for event in pygame.event.get():#事件監(jiān)測
if event.type == pygame.QUIT:#點“X”號退出
pygame.quit()
sys.exit()
def main(self):
while True:#程序主循環(huán)
self.Listen()#事件監(jiān)測
self.screen.blit(self.bird, (400, 300))#將bird.png繪制的400,300的位置
pygame.display.flip()#屏幕刷新
if __name__ == '__main__':
game = Game()
game.main()
?
?
我們先來講一下第一種比較簡單的方法吧:我們先在Game類的__init__的初始化的函數(shù)中添加一個自定義速度的變量和初始的x位置
self.speed = 5
self.x = 50
接著我們在Game類的main函數(shù)中的while循環(huán)中添加一個增加x的操作
self.x += 1
這樣的作用是在每次循環(huán)中增加1個像素。但是這樣還是不能改變圖片的位置,我們還要改變繪制方法。我們把Game類的main函數(shù)中的while循環(huán)中的blit函數(shù)改成
self.screen.blit(self.bird, (self.x, 300))
運行后你應該會看的如下
?一只小鳥拖著尾跡向右邊移動。那是因為沒有刷新屏幕,我們要在Game類的main函數(shù)中的while循環(huán)中添加
self.screen.fill((0, 0, 0))
現(xiàn)在我們再運行
現(xiàn)在正常了
我們給一下最終代碼
#導入模塊
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))#創(chuàng)建一個800*600的窗口
pygame.display.set_caption("Game")#設置窗口標題為”Game“
self.speed = 5
self.x = 50
def Listen(self):#事件監(jiān)測
for event in pygame.event.get():#事件監(jiān)測
if event.type == pygame.QUIT:#點“X”號退出
pygame.quit()
sys.exit()
def main(self):
while True:#程序主循環(huán)
self.x += 1
self.Listen()#事件監(jiān)測
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__初始化函數(shù)中添加
self.bird_rect = self.bird.get_rect()
這個函數(shù)是用來求圖片的rect區(qū)域,其中沒有參數(shù)。再添加
self.bird_rect.center = (50, 300)
這個函數(shù)是用來設置圖片的初始位置,center代表中間做錨點,其他我就先不說了,想要拓展的可以自己去網(wǎng)上搜一下。
我們在我們要在Game類的main函數(shù)中的while循環(huán)中添加
self.bird_rect.move_ip(1, 0)
這個函數(shù)用來改變xy的位置,正數(shù)為加,負數(shù)為減。
move_ip(x, y)
我們把Game類的main函數(shù)中的while循環(huán)中的blit函數(shù)改成
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))#創(chuàng)建一個800*600的窗口
pygame.display.set_caption("Game")#設置窗口標題為”Game“
self.bird_rect = self.bird.get_rect()
self.bird_rect.center = (50, 300)
def Listen(self):#事件監(jiān)測
for event in pygame.event.get():#事件監(jiān)測
if event.type == pygame.QUIT:#點“X”號退出
pygame.quit()
sys.exit()
def main(self):
while True:#程序主循環(huán)
self.bird_rect.move_ip(1, 0)
self.Listen()#事件監(jiān)測
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()
?下節(jié)預告:我們會學習pygame的Sprite文章來源:http://www.zghlxwxcb.cn/news/detail-603146.html
拜拜!文章來源地址http://www.zghlxwxcb.cn/news/detail-603146.html
到了這里,關于6.pygame圖片移動的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!