您現(xiàn)在的位置是:首頁(yè) » python編程資訊
資訊內(nèi)容
用python和pygame游戲編程入門-彈球[鍵盤變速]
極客小將2020-10-28-
上一節(jié)我們?yōu)閺椙騽?dòng)畫增加一個(gè)新的功能,就是背景隨著小球的移動(dòng)不斷變換,本節(jié)我們?cè)俳o這個(gè)動(dòng)畫增加一個(gè)空能,就是鍵盤改變小球速度。
上一節(jié)我們?yōu)閺椙騽?dòng)畫增加一個(gè)新的功能,就是背景隨著小球的移動(dòng)不斷變換,本節(jié)我們?cè)俳o這個(gè)動(dòng)畫增加一個(gè)功能,就是鍵盤改變小球速度。通過上下左右四個(gè)方向鍵控制小球在這四個(gè)方向的速度,具體的效果是:如果小球正往右移動(dòng),此時(shí)按右鍵小球加速向右,如果此時(shí)按左鍵,則減速;反之如果小球向左移動(dòng),按左鍵加速向左,按右鍵減速,上下鍵的效果同理,控制向上向下的速度。
具體的方法就是,在游戲的主循環(huán)中加入對(duì)鍵盤事件的偵測(cè),判斷鍵盤事件:
1、如果方向左鍵按下,x方向的速度增加-1,如果小球向左,speed[0]<0,再減1,那么會(huì)向左加速,反之向右運(yùn)動(dòng)的話會(huì)減速:
if event.key == pygame.K_LEFT: speed[0] = speed[0] - 1
2、如果方向右鍵按下,x方向的速度增加1,如果此時(shí)是向左移動(dòng),那么speed[0]<0給它加1也就是絕對(duì)值減1,速度就會(huì)減慢:
elif event.key == pygame.K_RIGHT: speed[0] = speed[0] + 1
3、同理,如果方向右鍵按下,y方向的速度增加1即:
elif event.key == pygame.K_DOWN: speed[1] = speed[1] + 1
4、如果方向右鍵按下,y方向的速度增加-1即:
elif event.key == pygame.K_UP: speed[1] = speed[1] - 1
完整的程序代碼:
import pygame, sys # 引入pygame sys pygame.init() # 初始化 對(duì)pygame內(nèi)部各功能模塊進(jìn)行初始化創(chuàng)建及變量設(shè)置,默認(rèn)調(diào)用 size = width, height = 600, 400 speed = [1,1] BLACK = 0, 0, 0 screen = pygame.display.set_mode(size) pygame.display.set_caption("彈球") # 設(shè)置窗口標(biāo)題 ball = pygame.image.load("img/ball.png") # pygame.image.load(filename) 將filename路徑下的圖像載入游戲,支持13種常用圖片格式 ballrect = ball.get_rect() # surface對(duì)象 ball.get_rect() pygame使用內(nèi)部定義 fps = 300 # Frame per second 每秒幀率參數(shù) fclock = pygame.time.Clock() # pygame.time.Clock() 創(chuàng)建一個(gè)Clock對(duì)象,用于操作時(shí)間surface對(duì)象表示所有載入的圖像,其中.get_rect()方法返回一個(gè)覆蓋圖像的矩形(圖像的外接矩形)rect對(duì)象rect中top, bottom, left, right表示上下左右,width, height表示寬度,高度 bgcolor = pygame.Color("black") def RGBchannel(a): #當(dāng)a<0時(shí) 返回值為0,當(dāng)a>255時(shí) 返回值為255,當(dāng)0255 else int(a)) while True: # 執(zhí)行死循環(huán) for event in pygame.event.get(): # 從事件隊(duì)列中取出事件,并從隊(duì)列中刪除該事件 if event.type == pygame.QUIT: # pygame.QUIT是Pygame中定義的退出時(shí)間常量 sys.exit() # sys.exit()用于退出結(jié)束游戲并退出 elif event.type == pygame.KEYDOWN: if event.key == pygame.K_ESCAPE: sys.exit() # sys.exit()用于退出結(jié)束游戲并退出 if event.key == pygame.K_LEFT: speed[0] = speed[0] - 1 elif event.key == pygame.K_RIGHT: speed[0] = speed[0] + 1 elif event.key == pygame.K_DOWN: speed[1] = speed[1] + 1 elif event.key == pygame.K_UP: speed[1] = speed[1] - 1 if pygame.display.get_active() : #當(dāng)顯示器上處于活動(dòng)狀態(tài)時(shí)返回True,進(jìn)一步半段后可以暫停游戲,改變響應(yīng)模式等 ballrect = ballrect.move(speed[0],speed[1]) # ballrect.move(x,y) 矩形移動(dòng)一個(gè)偏移量(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] # 碰壁后速度取反 print(speed) 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色彩體系 由于圖片不斷運(yùn)動(dòng),運(yùn)動(dòng)后原位置默認(rèn)填充白色,因此需要不斷刷新 screen.fill(bgcolor) screen.blit(ball, ballrect) # screnen,blit(src,dest)將圖像繪制在另一個(gè)圖像上,即將src繪制到dest位置上,通過rect對(duì)象引導(dǎo)對(duì)壁球的繪制 pygame.display.update() # 對(duì)顯示窗口進(jìn)行刷新,默認(rèn)窗口全部重繪 fclock.tick(fps) # clock.tick(framerate) 控制幀速度,即窗口刷新速度。
本站部分內(nèi)容轉(zhuǎn)載自網(wǎng)絡(luò),如有侵權(quán)請(qǐng)聯(lián)系管理員及時(shí)刪除。
