日本免费高清视频-国产福利视频导航-黄色在线播放国产-天天操天天操天天操天天操|www.shdianci.com

學無先后,達者為師

網站首頁 編程語言 正文

Python?pygame?動畫游戲循環游戲時鐘實現原理_python

作者:ZacheryZHANG ? 更新時間: 2022-10-10 編程語言

1. 游戲循環和游戲時鐘

之前幾篇文章中,飛機大戰游戲中的英雄飛機已經被繪制到屏幕上了,怎么能夠讓飛機移動呢?

1.1 游戲中的動畫實現原理

電影的原理類似,游戲中的動畫效果,本質上是快速的在屏幕上繪制圖像

電影是將多張靜止的電影膠片連接、快速的播放,產生連貫的視覺效果!

一般在電影上每秒繪制60次,就能夠達到非常連續高品質的動畫效果(相當于要每秒鐘調用60次update效果)

每次繪制的結果被稱為幀Frame(靜止畫面)

2. 游戲循環

游戲的兩個組成部分:

  • 游戲的初始化:創建游戲窗口,繪制圖像初始位置,設置游戲時鐘
  • 游戲循環:設置刷新幀率,檢測用戶交互,更新所有圖像位置,更新屏幕顯示

游戲循環的開始就意味著游戲的正式開始

游戲循環的作用:

  • 保證游戲不會直接退出
  • 變化圖像位置--動畫效果
    • 每隔1/60秒移動一下所有圖像位置
    • 調用pygame.display.update()更新屏幕顯示
  • 檢測用戶交互--按鍵、鼠標等

3. 游戲時鐘

pygame專門提供了一個類pygame.time.Clock可以非常方便的設置屏幕繪制速度--刷新幀率

要使用時鐘對象需要兩步驟:

在游戲初始化創建一個時鐘對象

在游戲循環中讓時鐘對象調用tick(幀率)方法

tick方法會根據上次被調用的時間,自動設置游戲循環中的延時

案例演示:本案例將在游戲循環外部創建時鐘對象,在游戲循環內部創建tick方法,就可以來指定循環內部的代碼執行的頻率。

具體代碼演示如下所示:游戲循環內部的代碼,每秒重復循環60次就可以,就在游戲初始化的時候,創建游戲時鐘對象。

然后,在游戲循環中,通過時鐘對象調用tick的方法,就可以輕松的指定,游戲循環內部的代碼每秒鐘執行的次數。

import pygame
pygame.init()
# 創建游戲的窗口 640*642
screen = pygame.display.set_mode((640, 642))
# 繪制背景圖像
bg = pygame.image.load("./飛機大戰資料包/images/background1.jpg")
screen.blit(bg, (0, 0))
# 繪制英雄的飛機
hero = pygame.image.load("./飛機大戰資料包/images/me1.png")
screen.blit(hero, (300, 500))
# 可以在所有繪制工作完成之后,統一調用update方法
pygame.display.update()
# 創建時鐘對象
clock = pygame.time.Clock()
# 游戲循環->意味著游戲的正式開始
i = 0
while True:
    # 希望無限循環內部的代碼每秒鐘重復循環60次
    # 可以指定循環體內部的代碼執行的頻率
    clock.tick(60)
    print(i)
    i = i + 1
    pass
pygame.quit()

原文鏈接:https://juejin.cn/post/7130266390895788039

欄目分類
最近更新