網站首頁 編程語言 正文
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
相關推薦
- 2022-08-01 Flask-Sqlalchemy的基本使用詳解_python
- 2022-10-21 Rust?入門之函數和注釋實例詳解_相關技巧
- 2022-11-25 Python?Django教程之模型中字段驗證詳解_python
- 2022-08-14 win?sever?2022如何占用操作主機角色_win服務器
- 2022-07-23 C++超詳細講解稀疏矩陣_C 語言
- 2022-07-11 python中的多cpu并行編程_python
- 2023-02-04 基于Python的GUI圖形用戶界面編程詳細講解_python
- 2022-10-27 樹莓派4B更換清華源和沒有公鑰報錯
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支