資訊內(nèi)容
用python和pygame游戲編程入門-彈球[變換背景]
上一節(jié)我們實現(xiàn)了一個簡單的彈球動畫,本節(jié)我們將在這個程序的基礎上進行改進,增加一個新的功能,就是背景隨著小球的移動不斷變換。
第一步:定義一個bgcolor對象,這是Pygame 中用于描述顏色的對象
bgcolor = pygame.Color("black")
Pygame 使用 Color 類表示 RGBA 顏色值,每個顏色值的取值范圍是 0 ~ 255。允許通過基本的算術運算創(chuàng)造新的顏色值,支持轉(zhuǎn)換為其他顏色空間,例如 HSV 或 HSL,并讓你調(diào)整單個顏色通道。當沒有給出 alpha 的值是,默認是 255(不透明)。
第二步:設置bgcolor對象的RGB色彩,色彩值與當前小球的位置相關聯(lián),實現(xiàn)小球位置變化,背景顏色也跟著改變
pygame.Color.r — 獲取或設置 Color 對象的紅色值
pygame.Color.g — 獲取或設置 Color 對象的綠色值
pygame.Color.b — 獲取或設置 Color 對象的藍色值
具體代碼:
bgcolor.r = RGBchannel(ballrect.left*255/width) bgcolor.g = RGBchannel(ballrect.left * 255 / height) bgcolor.b = RGBchannel(min(speed[0],speed[1]) * 255 / max(speed[0],speed[1],1))
RGBchannel(a)是自定義的一個方法,負責返回一個0~255的值,當a<0時 返回值為0,當a>255時 返回值為255,當0
第三步:定義RGBchannel(a)方法:
def RGBchannel(a): return 0 if a<0 else (255 if a>255 else int(a))
第四步: 由于圖片不斷運動,運動后原位置默認填充白色,因此需要不斷刷新,更新背景顏色,將之前的黑色背景改為bgcolor
screen.fill(bgcolor)
完整的程序代碼:
import pygame, sys # 引入pygame sys pygame.init() # 初始化 對pygame內(nèi)部各功能模塊進行初始化創(chuàng)建及變量設置,默認調(diào)用 size = width, height = 600, 400 speed = [1,1] BLACK = 0, 0, 0 screen = pygame.display.set_mode(size) pygame.display.set_caption("彈球") # 設置窗口標題 ball = pygame.image.load("img/ball.png") # pygame.image.load(filename) 將filename路徑下的圖像載入游戲,支持13種常用圖片格式 ballrect = ball.get_rect() # surface對象 ball.get_rect() pygame使用內(nèi)部定義 fps = 300 # Frame per second 每秒幀率參數(shù) fclock = pygame.time.Clock() # pygame.time.Clock() 創(chuàng)建一個Clock對象,用于操作時間surface對象表示所有載入的圖像,其中.get_rect()方法返回一個覆蓋圖像的矩形(圖像的外接矩形)rect對象rect中top, bottom, left, right表示上下左右,width, height表示寬度,高度 bgcolor = pygame.Color("black") def RGBchannel(a): #當a<0時 返回值為0,當a>255時 返回值為255,當0255 else int(a)) while True: # 執(zhí)行死循環(huán) for event in pygame.event.get(): # 從事件隊列中取出事件,并從隊列中刪除該事件 if event.type == pygame.QUIT: # pygame.QUIT是Pygame中定義的退出時間常量 sys.exit() # sys.exit()用于退出結(jié)束游戲并退出 elif event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: sys.exit() # sys.exit()用于退出結(jié)束游戲并退出 if pygame.display.get_active() : #當顯示器上處于活動狀態(tài)時返回True,進一步半段后可以暫停游戲,改變響應模式等 ballrect = ballrect.move(speed[0],speed[1]) # ballrect.move(x,y) 矩形移動一個偏移量(x,y)x,y為整數(shù) if ballrect.left < 0 or ballrect.right > width: speed[0] = -speed[0] if ballrect.top < 0 or ballrect.bottom > height: speed[1] = -speed[1] # 碰壁后速度取反 bgcolor.r = RGBchannel(ballrect.left*255/width) bgcolor.g = RGBchannel(ballrect.left * 255 / height) bgcolor.b = RGBchannel(min(speed[0],speed[1]) * 255 / max(speed[0],speed[1],1)) #顯示窗口背景填充為color顏色采用RGB色彩體系 由于圖片不斷運動,運動后原位置默認填充白色,因此需要不斷刷新 screen.fill(bgcolor) screen.blit(ball, ballrect) # screnen,blit(src,dest)將圖像繪制在另一個圖像上,即將src繪制到dest位置上,通過rect對象引導對壁球的繪制 pygame.display.update() # 對顯示窗口進行刷新,默認窗口全部重繪 fclock.tick(fps) # clock.tick(framerate) 控制幀速度,即窗口刷新速度。
本站部分內(nèi)容轉(zhuǎn)載自網(wǎng)絡,如有侵權請聯(lián)系管理員及時刪除。
