游戲回圈 和 游戲時鐘
游戲中的影片效果實質上是在螢屏上進行的快速的繪制影像,
每次被繪制的結果被稱為幀(
F
r
a
m
e
Frame
Frame)
游戲的兩個重要組成部分:

簡單影片的實作:
游戲回圈的作用:
1.保證游戲能一直運行下去,不會出現運行完自動退出的情況,
2.變化影像位置 ——影片效果
①:每隔····秒移動一下影像的位置,
②:呼叫pygame.display.update()更新螢屏顯示,
3.檢測用戶互動——利用鍵盤或者滑鼠實作對游戲的控制,
游戲時鐘的作用:
pygame中專門有控制幀率的類:pygame.time.Clock(),可以進行控制幀率,
要使用時鐘物件需要兩步:
1.游戲初始化創建一個時鐘物件
2.在游戲回圈中呼叫tick()
舉例代碼實作:
import pygame, sys
from pygame.locals import *
pygame.init()
# 時鐘物件的初始創建
clock = pygame.time.Clock()
screen = pygame.display.set_mode((800, 800))
bg1 = pygame.image.load(r'C:\Users\TOMMY\Desktop\carrot.png')
# rect型的創建,表示要移動的影像的位置屬性,再回圈中方便利用他的屬性來實作影像的移動
bg1_rect = pygame.Rect(0, 0, 100, 100)
# 2> 繪制在螢屏
screen.blit(bg1, (100, 100))
pygame.display.update() #重繪螢屏內容
while True:
clock.tick(60)
bg1_rect.y -= 1
if bg1_rect.y + bg1_rect.height <= 0:
bg1_rect.y = 700
screen.blit(bg1, bg1_rect)
pygame.display.update()
for event in pygame.event.get(): # 回圈獲取事件
if event.type == QUIT: # 若檢測到事件型別為退出,則退出系統
pygame.quit()
sys.exit()
這樣寫會有一個錯誤,那就是沒有保證繪制程序中的背景的更新,就會出現以下情況:

他所掃過的一片,背景都會被抹掉,要解決以上問題,要在回圈內加一個背景更新的陳述句,并且這個陳述句要放在其他影像更新陳述句的前面:
import pygame, sys
from pygame.locals import *
pygame.init()
clock = pygame.time.Clock()
screen = pygame.display.set_mode((610, 610))
bg1 = pygame.image.load(r'C:\Users\TOMMY\Desktop\carrot.png')
bg_screen = pygame.image.load(r'C:\Users\TOMMY\Desktop\love.png')
bg1_rect = pygame.Rect(100, 100, 100, 100)
while True:
clock.tick(60)
bg1_rect.y -= 1
if bg1_rect.y + bg1_rect.height <= 0:
bg1_rect.y = 700
screen.blit(bg_screen, (0, 0))
screen.blit(bg1, bg1_rect)
pygame.display.update()
for event in pygame.event.get(): # 回圈獲取事件
if event.type == QUIT: # 若檢測到事件型別為退出,則退出系統
pygame.quit()
sys.exit()
運行圖片如下所示:

及時運行中經過背景圖片也不會被抹去,所以一定要先對screen進行重繪制(更新)
注意:要操作并進行移動的影像一定要提前定義為rect模式,因為只有這樣才能操作他的坐標進行移動操作
游戲回圈中的 監聽 和 事件
事件: 就是開始游戲后,用戶針對游戲所做的操作,例如點擊關閉按鈕,點擊滑鼠,點擊鍵盤
監聽: 在游戲中,判斷用戶的具體操作,因為只有捕獲到用戶的具體操作,才能作出具體的回應,
pygame 中通過 pygame.event.get()可以獲得 用戶當前所做動作的事件串列
代碼如下:
注解:所有的監聽代碼都大同小異,差不多都是如下模式,可以理解為模板:
# 游戲回圈
while True:
# 事件監聽
for event in pygame.event.get():
# 判斷用戶是否點擊了關閉按鈕
if event.type == pygame.QUIT:
print("退出游戲...")
pygame.quit()
# 直接退出系統
exit()
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/282386.html
標籤:其他
上一篇:5.1訓練總結
