<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
實現一個幀動畫,使用的一個圖,根據不同的時間顯示不同的圖。
使用的就是如下所示的一張圖,寬度780 * 300 ,使用載入圖片 260 * 150來實現。
pygame.init() screen = pygame.display.set_mode((400, 300), 0, 32) pygame.display.set_caption("動畫") while True: for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() key = pygame.key.get_pressed() if key[pygame.K_ESCAPE]: sys.exit() screen.fill((154, 205, 255)) pygame.display.update()
首先實現最簡單的圖形
首先根據時間的不同,去改變當前的影象。
使用 pygame.time.Clock() 實現時間定時。get_ticks()獲取一個不斷增減的時間。
framerate = pygame.time.Clock() frametate.tick(30) ticks = pygame.time.get_ticks()
pygame.init() screen = pygame.display.set_mode((400, 300), 0, 32) pygame.display.set_caption("動畫") framerate = pygame.time.Clock() while True: framerate.tick(30) ticks = pygame.time.get_ticks() print(ticks) for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() key = pygame.key.get_pressed() if key[pygame.K_ESCAPE]: sys.exit() screen.fill((154, 205, 255)) pygame.display.update()
758
791
824
858
891
924
958
992
1025
1058
輸出如上所示,30幀每秒,所以時間每次增加大約34 - 33之間,如上所示我們獲取到了一個隨時間改變的量。
這裡使用精靈繪製圖,為了方便操作。
class MySprite(pygame.sprite.Sprite): def __init__(self, target): pygame.sprite.Sprite.__init__(self) self.master_image = None # 儲存圖片的 self.frame = 0 # 初始圖片位置 self.old_frame = -1 # 上一個圖片位置 self.frame_width = 1 self.frame_height = 1 # 儲存每一幀的圖片大小 self.first_frame = 0 self.last_frame = 0 # 位置取值的區間 self.columns = 1 # 幀數的最大值 self.last_time = 0 # 儲存之間的時間 def load(self, filename, width, height, columns): self.master_image = pygame.image.load(filename).convert_alpha() # 載入圖片 self.frame_width = width # 260 self.frame_height = height # 150 self.rect = 0, 0, width, height self.columns = columns # 列寬的數量 是 3 # try to auto-calculate total frames rect = self.master_image.get_rect() # 獲取到對應的圖片的大小 780 * 300 self.last_frame = (rect.width // width) * (rect.height // height) - 1 # 5 def update(self, current_time, rate = 30): # current_time 更新頻率 為30 # update animation frame number if current_time > self.last_time + rate: # 如果當前事件 大於 最後的時間 + 當前的節奏 self.frame += 1 # 當前的幀數加一 if self.frame > self.last_frame: # 當前最後一幀 則從第一幀開始 self.frame = self.first_frame # 從0開始 self.last_time = current_time # 將最後幀值為30 # build current frame only if it changed if self.frame != self.old_frame: # 當前幀數不等於老的一陣 frame_x = (self.frame % self.columns) * self.frame_width frame_y = (self.frame // self.columns) * self.frame_height rect = (frame_x, frame_y, self.frame_width, self.frame_height) # 更新對應的位置 self.image = self.master_image.subsurface(rect) # 迴圈箱已有的方向 self.old_frame = self.frame
pygame.sprite.Group()建立精靈組,之後使用對應的update draw 繪製對應的精靈
# create the sprite dragon = MySprite(screen) dragon.load("Fig07-02.png", 260, 150, 3) group = pygame.sprite.Group() group.add(dragon) group.update(ticks) group.draw(screen)
import sys import pygame class MySprite(pygame.sprite.Sprite): def __init__(self, target): pygame.sprite.Sprite.__init__(self) self.master_image = None self.frame = 0 self.old_frame = -1 self.frame_width = 1 self.frame_height = 1 self.first_frame = 0 self.last_frame = 0 self.columns = 1 self.last_time = 0 def load(self, filename, width, height, columns): # 載入圖片 # 780 * 300 self.master_image = pygame.image.load(filename).convert_alpha() # 載入圖片 self.frame_width = width # 260 self.frame_height = height # 150 self.rect = 0, 0, width, height self.columns = columns # 列寬的數量 是 3 # try to auto-calculate total frames rect = self.master_image.get_rect() # 獲取到對應的圖片的大小 780 * 300 self.last_frame = (rect.width // width) * (rect.height // height) - 1 # 5 def update(self, current_time, rate=30): # current_time 更新頻率 為30 # update animation frame number if current_time > self.last_time + rate: # 如果當前事件 大於 最後的時間 + 當前的節奏 self.frame += 1 # 當前的幀數加一 if self.frame > self.last_frame: # 當前最後一幀 則從第一幀開始 self.frame = self.first_frame # 從0開始 self.last_time = current_time # 將最後幀值為30 # build current frame only if it changed if self.frame != self.old_frame: # 當前幀數不等於老的一陣 frame_x = (self.frame % self.columns) * self.frame_width frame_y = (self.frame // self.columns) * self.frame_height rect = (frame_x, frame_y, self.frame_width, self.frame_height) # 更新對應的位置 self.image = self.master_image.subsurface(rect) # 迴圈箱已有的方向 self.old_frame = self.frame pygame.init() screen = pygame.display.set_mode((400, 300), 0, 32) pygame.display.set_caption("動畫") framerate = pygame.time.Clock() # 建立精靈 dragon = MySprite(screen) dragon.load("Fig07-02.png", 260, 150, 3) group = pygame.sprite.Group() group.add(dragon) while True: framerate.tick(30) ticks = pygame.time.get_ticks() print(ticks) for event in pygame.event.get(): if event.type == pygame.QUIT: sys.exit() key = pygame.key.get_pressed() if key[pygame.K_ESCAPE]: sys.exit() screen.fill((154, 205, 255)) group.update(ticks) group.draw(screen) pygame.display.update()
以上就是利用Pygame製作簡單動畫的範例詳解的詳細內容,更多關於Pygame動畫的資料請關注it145.com其它相關文章!
相關文章
<em>Mac</em>Book项目 2009年学校开始实施<em>Mac</em>Book项目,所有师生配备一本<em>Mac</em>Book,并同步更新了校园无线网络。学校每周进行电脑技术更新,每月发送技术支持资料,极大改变了教学及学习方式。因此2011
2021-06-01 09:32:01
综合看Anker超能充系列的性价比很高,并且与不仅和iPhone12/苹果<em>Mac</em>Book很配,而且适合多设备充电需求的日常使用或差旅场景,不管是安卓还是Switch同样也能用得上它,希望这次分享能给准备购入充电器的小伙伴们有所
2021-06-01 09:31:42
除了L4WUDU与吴亦凡已经多次共事,成为了明面上的厂牌成员,吴亦凡还曾带领20XXCLUB全队参加2020年的一场音乐节,这也是20XXCLUB首次全员合照,王嗣尧Turbo、陈彦希Regi、<em>Mac</em> Ova Seas、林渝植等人全部出场。然而让
2021-06-01 09:31:34
目前应用IPFS的机构:1 谷歌<em>浏览器</em>支持IPFS分布式协议 2 万维网 (历史档案博物馆)数据库 3 火狐<em>浏览器</em>支持 IPFS分布式协议 4 EOS 等数字货币数据存储 5 美国国会图书馆,历史资料永久保存在 IPFS 6 加
2021-06-01 09:31:24
开拓者的车机是兼容苹果和<em>安卓</em>,虽然我不怎么用,但确实兼顾了我家人的很多需求:副驾的门板还配有解锁开关,有的时候老婆开车,下车的时候偶尔会忘记解锁,我在副驾驶可以自己开门:第二排设计很好,不仅配置了一个很大的
2021-06-01 09:30:48
不仅是<em>安卓</em>手机,苹果手机的降价力度也是前所未有了,iPhone12也“跳水价”了,发布价是6799元,如今已经跌至5308元,降价幅度超过1400元,最新定价确认了。iPhone12是苹果首款5G手机,同时也是全球首款5nm芯片的智能机,它
2021-06-01 09:30:45