本篇內容主要講解“什么是PyGame逐幀動畫”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“什么是PyGame逐幀動畫”吧!
逐幀動畫,是一種動畫技術,其原理即將每幀不同的圖像連續播放,從而產生動畫效果。
我們基于上一節的代碼來實現一個圓形來回運動的動畫效果。上一節的代碼如下
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480)) # 設置窗口的大小
# 創建一個surface,名字叫background,大小和screen一樣
background = pygame.Surface(screen.get_size())
# 用白色填充background;255,255,255是RGB的白色
background.fill((255, 255, 255))
mySurface = pygame.Surface((200, 200)) # 200 x 200 大小的surface
mySurface.set_colorkey((0, 0, 0))
pygame.draw.circle(mySurface, (0, 0, 255), (100, 100), 100)
background = background.convert()
screen.blit(background, (0, 0))
mySurface = mySurface.convert_alpha()
screen.blit(mySurface, (200, 200))
clock = pygame.time.Clock() # 創建clock對象
FPS = 30 # 定義幀率的上限,就是幀率的最大值
mainloop = True
while mainloop:
clock.tick(FPS) # 設置最大幀率
for event in pygame.event.get(): # 這一部分就是事件處理
if event.type == pygame.QUIT: # 如果按下右上角的叉叉
mainloop = False # 退出主循環
elif event.type == pygame.KEYDOWN: # 如果按下了鍵盤
if event.key == pygame.K_ESCAPE: # 而且按下的還是ESC鍵
mainloop = False # 退出主循環
# 在這里做一些游戲相關的運算,這里暫時省略
text = "FPS: {0:.2f}".format(clock.get_fps())
pygame.display.set_caption(text)
pygame.display.flip() # 刷新顯示
pygame.quit()我們將要在主循環中不斷修改surface的坐標,從而實現移動的效果。還記得blit一個surface時,有個參數就是坐標嗎?
screen.blit(mySurface, (200, 200))
這里的(200, 200)就是坐標。
在第一次blit我們的mySurface時,我們將它的坐標設置為(0, 0),這樣它會顯示在左上角。
我們定義了mySurfaceX、mySurfaceY來保存當前mySurface的坐標;定義了dx、dy來表示每次循環中mySurfaceX、mySurfaceY的增量。
在主循環中,修改mySurfaceX、mySurfaceY,然后mySurface被blit到(mySurfaceX, mySurfaceY)。
import pygame
pygame.init()
screen = pygame.display.set_mode((640, 480)) # 設置窗口的大小
# 創建一個surface,名字叫background,大小和screen一樣
background = pygame.Surface(screen.get_size())
# 用白色填充background;255,255,255是RGB的白色
background.fill((255, 255, 255))
mySurface = pygame.Surface((200, 200)) # 200 x 200 大小的surface
mySurface.set_colorkey((0, 0, 0))
pygame.draw.circle(mySurface, (0, 0, 255), (100, 100), 100)
background = background.convert()
screen.blit(background, (0, 0))
mySurface = mySurface.convert_alpha()
####################################################################
screen.blit(mySurface, (0, 0))
mySurfaceX = 0
mySurfaceY = 0
dx = 10
dy = 0
####################################################################
clock = pygame.time.Clock() # 創建clock對象
FPS = 30 # 定義幀率的上限,就是幀率的最大值
mainloop = True
while mainloop:
clock.tick(FPS) # 設置最大幀率
for event in pygame.event.get(): # 這一部分就是事件處理
if event.type == pygame.QUIT: # 如果按下右上角的叉叉
mainloop = False # 退出主循環
elif event.type == pygame.KEYDOWN: # 如果按下了鍵盤
if event.key == pygame.K_ESCAPE: # 而且按下的還是ESC鍵
mainloop = False # 退出主循環
####################################################################
mySurfaceX += dx
mySurfaceY += dy
if mySurfaceX + mySurface.get_rect().width > screen.get_rect().width:
dx *= -1
elif mySurfaceX < 0:
dx *= -1
else:
pass
screen.blit(background, (0, 0)) # !!!!!!!!!!!!!!!!!!!!!!!
screen.blit(mySurface, (round(mySurfaceX, 0), round(mySurfaceY, 0)))
####################################################################
text = "FPS: {0:.2f}".format(clock.get_fps())
pygame.display.set_caption(text)
pygame.display.flip() # 刷新顯示
pygame.quit()運行這一段代碼,你將看到一個往復運動的圓形。請特別注意下面這一行代碼
screen.blit(background, (0, 0)) # !!!!!!!!!!!!!!!!!!!!!!!
如果你注釋掉這一行代碼,你將得到一個長條。這行代碼的作用相當于“擦除”,它覆蓋掉了前面畫的東西。
到此,相信大家對“什么是PyGame逐幀動畫”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。