pygame實(shí)現(xiàn)方塊動(dòng)畫(huà)實(shí)例講解
導(dǎo)入組件
首先導(dǎo)入需要的組件,pygame游戲組件,time是時(shí)間組件
import pygame, time, sys from pygame.locals import *
繪制窗口
這里定義了一個(gè)480*600的屏幕,設(shè)置了窗口標(biāo)題,并設(shè)置了屏幕的填充顏色為白色
# 屏幕的寬高 WIDTH = 480 HEIGHT = 600 # 顏色的常量 WHITE = (255, 255, 255) surface = pygame.display.set_mode((WIDTH, HEIGHT), 0, 30) pygame.display.set_caption("矩形動(dòng)畫(huà)") while True: for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() surface.fill(WHITE) pygame.display.update()
繪制矩形
RED = (255, 0, 0) # 定義矩形字典變量 rect = {'rect': pygame.Rect(200, 200, 60, 46), 'color': RED} --- surface.fill(WHITE) pygame.draw.rect(surface, rect['color'], rect['rect']) ---
讓矩形動(dòng)起來(lái)
從運(yùn)動(dòng)來(lái)看只有中心向四方移動(dòng)的四種可能。定義四個(gè)方向的常量。
# 方向常量 UPLEFT = 'upleft' UPRIGHT = 'upright' DOWNLEFT = 'downleft' DOWNRIGHT = 'downright'
然后定義矩形的移動(dòng)速度
# 矩形移動(dòng)的速度 MOVESPEED = 2
給矩形設(shè)置一個(gè)初始的移動(dòng)方向
# 定義矩形字典變量 rect = {'rect': pygame.Rect(200, 200, 60, 46), 'color': RED, 'direction': UPLEFT}
根據(jù)矩形的移動(dòng)方向改變對(duì)應(yīng)的起始位置。根據(jù)矩形不同的位置改變矩形的起始位置。
# 如果是上左,則x y 都減少 if rect['direction'] == UPLEFT: rect['rect'].left -= MOVESPEED rect['rect'].top -= MOVESPEED # 如果是上右,則x 增加 y 減少 if rect['direction'] == UPRIGHT: rect['rect'].left += MOVESPEED rect['rect'].top -= MOVESPEED # 如果是下左,則x 減少 y 增加 if rect['direction'] == DOWNLEFT: rect['rect'].left -= MOVESPEED rect['rect'].top += MOVESPEED # 如果是下右,則x y 都增加 if rect['direction'] == DOWNRIGHT: rect['rect'].left += MOVESPEED rect['rect'].top += MOVESPEED
不斷的改變矩形的位置,要注意防止移出窗口,當(dāng)觸及到邊緣,沿來(lái)的方向?qū)⒕匦胃淖兎较蚣纯伞?/p>
# 如果上溢出窗口 if rect['rect'].top <= 0: if rect['direction'] == UPLEFT: rect['direction'] = DOWNLEFT if rect['direction'] == UPRIGHT: rect['direction'] = DOWNRIGHT # 如果下溢出窗口 if rect['rect'].bottom >= HEIGHT: if rect['direction'] == DOWNRIGHT: rect['direction'] = UPRIGHT if rect['direction'] == DOWNLEFT: rect['direction'] = UPLEFT # 如果右溢出窗口 if rect['rect'].right >= WIDTH: if rect['direction'] == DOWNRIGHT: rect['direction'] = DOWNLEFT if rect['direction'] == UPRIGHT: rect['direction'] = UPLEFT # 如果右溢出窗口 if rect['rect'].left <= 0: if rect['direction'] == DOWNLEFT: rect['direction'] = DOWNRIGHT if rect['direction'] == UPLEFT: rect['direction'] = UPRIGHT
這樣就實(shí)現(xiàn)了功能。每次循環(huán)讓時(shí)間暫停一會(huì)即可。
這里附上所有代碼
import pygame, time, sys from pygame.locals import * # 屏幕的寬高 WIDTH = 480 HEIGHT = 600 # 顏色的常量 WHITE = (255, 255, 255) RED = (255, 0, 0) # 方向常量 UPLEFT = 'upleft' UPRIGHT = 'upright' DOWNLEFT = 'downleft' DOWNRIGHT = 'downright' # 矩形移動(dòng)的速度 MOVESPEED = 2 # 定義矩形字典變量 rect = {'rect': pygame.Rect(200, 200, 60, 46), 'color': RED, 'direction': UPLEFT} surface = pygame.display.set_mode((WIDTH, HEIGHT), 0, 30) pygame.display.set_caption("矩形動(dòng)畫(huà)") while True: print(rect) for event in pygame.event.get(): if event.type == QUIT: pygame.quit() sys.exit() surface.fill(WHITE) # 如果是上左,則x y 都減少 if rect['direction'] == UPLEFT: rect['rect'].left -= MOVESPEED rect['rect'].top -= MOVESPEED # 如果是上右,則x 增加 y 減少 if rect['direction'] == UPRIGHT: rect['rect'].left += MOVESPEED rect['rect'].top -= MOVESPEED # 如果是下左,則x 減少 y 增加 if rect['direction'] == DOWNLEFT: rect['rect'].left -= MOVESPEED rect['rect'].top += MOVESPEED # 如果是下右,則x y 都增加 if rect['direction'] == DOWNRIGHT: rect['rect'].left += MOVESPEED rect['rect'].top += MOVESPEED # 如果上溢出窗口 if rect['rect'].top <= 0: if rect['direction'] == UPLEFT: rect['direction'] = DOWNLEFT if rect['direction'] == UPRIGHT: rect['direction'] = DOWNRIGHT # 如果下溢出窗口 if rect['rect'].bottom >= HEIGHT: if rect['direction'] == DOWNRIGHT: rect['direction'] = UPRIGHT if rect['direction'] == DOWNLEFT: rect['direction'] = UPLEFT # 如果右溢出窗口 if rect['rect'].right >= WIDTH: if rect['direction'] == DOWNRIGHT: rect['direction'] = DOWNLEFT if rect['direction'] == UPRIGHT: rect['direction'] = UPLEFT # 如果右溢出窗口 if rect['rect'].left <= 0: if rect['direction'] == DOWNLEFT: rect['direction'] = DOWNRIGHT if rect['direction'] == UPLEFT: rect['direction'] = UPRIGHT pygame.draw.rect(surface, rect['color'], rect['rect']) pygame.display.update() time.sleep(0.02)
到此這篇關(guān)于pygame實(shí)現(xiàn)方塊動(dòng)畫(huà)的文章就介紹到這了,更多相關(guān)pygame 方塊動(dòng)畫(huà)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
閉包在python中的應(yīng)用之translate和maketrans用法詳解
這篇文章主要介紹了閉包在python中的應(yīng)用之translate和maketrans用法,是比較實(shí)用的技巧,需要的朋友可以參考下2014-08-08pytest官方文檔解讀fixtures的調(diào)用方式
這篇文章主要為大家介紹了pytest官方文檔解讀fixtures的調(diào)用方式,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪2022-06-06如何在mac環(huán)境中用python處理protobuf
這篇文章主要介紹了如何在mac環(huán)境中用python處理protobuf,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2019-12-12python函數(shù)常見(jiàn)關(guān)鍵字分享
這篇文章主要向大家介紹的是python函數(shù)常見(jiàn)關(guān)鍵字,文章基于python的相關(guān)資料展開(kāi)對(duì)文章主題的詳細(xì)介紹,具有一定的參考價(jià)值,需要的小伙伴可以參考一下2022-04-04matplotlib部件之矩形選區(qū)(RectangleSelector)的實(shí)現(xiàn)
這篇文章主要介紹了matplotlib部件之矩形選區(qū)(RectangleSelector)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2021-02-02非常全面的Python常見(jiàn)基礎(chǔ)面試題及答案
Python是目前編程領(lǐng)域最受歡迎的語(yǔ)言,Python可用于許多領(lǐng)域,Web應(yīng)用程序開(kāi)發(fā),自動(dòng)化,數(shù)學(xué)建模,大數(shù)據(jù)應(yīng)用程序等等,這篇文章主要給大家介紹了關(guān)于Python常見(jiàn)基礎(chǔ)面試題及答案的相關(guān)資料,需要的朋友可以參考下2021-09-09Python構(gòu)造函數(shù)與析構(gòu)函數(shù)超詳細(xì)分析
在python之中定義一個(gè)類(lèi)的時(shí)候會(huì)在類(lèi)中創(chuàng)建一個(gè)名為_(kāi)_init__的函數(shù),這個(gè)函數(shù)就叫做構(gòu)造函數(shù)。它的作用就是在實(shí)例化類(lèi)的時(shí)候去自動(dòng)的定義一些屬性和方法的值,而析構(gòu)函數(shù)恰恰是一個(gè)和它相反的函數(shù),這篇文章主要介紹了Python構(gòu)造函數(shù)與析構(gòu)函數(shù)2022-11-11