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