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 xlsxwriter創(chuàng)建excel圖表的方法
這篇文章主要為大家詳細(xì)介紹了python xlsxwriter創(chuàng)建excel圖表的方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-06-06
Python更新所有安裝的包的實(shí)現(xiàn)方式
這篇文章主要介紹了Python更新所有安裝的包的實(shí)現(xiàn)方式,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2024-03-03
python連接mysql數(shù)據(jù)庫(kù)并讀取數(shù)據(jù)的實(shí)現(xiàn)
這篇文章主要介紹了python連接mysql數(shù)據(jù)庫(kù)并讀取數(shù)據(jù)的實(shí)現(xiàn),文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2020-09-09
jupyter notebook保存文件默認(rèn)路徑更改方法匯總(親測(cè)可以)
安裝Anaconda后,新建文件的默認(rèn)存儲(chǔ)路徑一般在C系統(tǒng)盤(pán),那么路徑是什么呢?如何更改jupyter notebook保存文件默認(rèn)路徑呢?今天小編就這一問(wèn)題通過(guò)兩種方法給大家講解,需要的朋友跟隨小編一起看看吧2021-06-06
Pycharm安裝第三方庫(kù)并更換鏡像的詳細(xì)教程
在使用pycharm學(xué)習(xí)python的時(shí)候,經(jīng)常需要第三方庫(kù),沒(méi)有第三方庫(kù)程序就會(huì)報(bào)錯(cuò),pycharm也會(huì)提醒你要安裝所需要的庫(kù),下面這篇文章主要給大家介紹了關(guān)于Pycharm安裝第三方庫(kù)并更換鏡像的詳細(xì)教程,需要的朋友可以參考下2023-05-05
在pycharm中調(diào)試fastapi應(yīng)用程序的流程步驟
? FastAPI 是一個(gè)現(xiàn)代、快速(高性能)的 Web 框架,用于構(gòu)建基于 Python 的 API,它具有簡(jiǎn)單易用的特性,同時(shí)也提供了高度自動(dòng)化的文檔生成功能,本文給大家介紹了在pycharm中調(diào)試fastapi應(yīng)用程序的流程步驟,需要的朋友可以參考下2024-12-12

