您現在的位置是:首頁 » python編程資訊
資訊內容
用python和pygame游戲編程入門-控制角色移動
極客小將2020-10-30-
如何使用鍵盤事件控制角色移動,解決只能按一下動一下的問題,在鍵盤一直按下的狀態,角色一直移動。
在上一節中我們知道了事件,以及如何捕捉鍵盤事件進行響應,本屆我們結合第一節何上一節的內容,做一個用鍵盤控制角色移動的功能,代碼如下:
#!/usr/bin/env python #指定圖像文件名稱 background_image_filename = './img/Underwater.png' mouse_image_filename = './img/octopus.png' #導入pygame庫 import pygame #導入一些常用的函數和常量 from pygame.locals import * #向sys模塊借一個exit函數用來退出程序 from sys import exit #初始化pygame,為使用硬件做準備 pygame.init() #創建了一個窗口 screen = pygame.display.set_mode((960, 720), 0, 32) #設置窗口標題 pygame.display.set_caption("海底世界") #加載并轉換圖像 background = pygame.image.load(background_image_filename).convert() kcursor = pygame.image.load(mouse_image_filename).convert_alpha() #游戲主循環 x, y = 0, 0 move_x, move_y = 0, 0 while True: for event in pygame.event.get(): if event.type == QUIT: exit() if event.type == KEYDOWN: #鍵盤有按下? if event.key == K_LEFT: #按下的是左方向鍵的話,把x坐標減一 move_x = -1 elif event.key == K_RIGHT: #右方向鍵則加一 move_x = 1 elif event.key == K_UP: #類似了 move_y = -1 elif event.key == K_DOWN: move_y = 1 elif event.type == KEYUP: #如果用戶放開了鍵盤,圖就不要動了 move_x = 0 move_y = 0 #計算出新的坐標 x+= move_x y+= move_y screen.fill((0,0,0)) screen.blit(background, (0,0)) screen.blit(kcursor, (x,y)) #在新的位置上畫圖 pygame.display.update()
當我們運行這個程序的時候,按下方向鍵就可以把章魚移動,但是等等!為什么我只能按一下動一下啊……
因為KEYDOWN事件只有在你按下鍵的那一刻才發生一次,也就是for循環需要有事件發生才會再次執行,你可以試試在按下方向鍵不松開的時候不停的移動鼠標,這時候章魚就會一直移動了。
啊??這么麻煩,怎么修改呢?
因為當你按下按鍵的時候變量值已經進行了修改,所以只需要把計算新坐標后面的代碼縮進調整一下,放在跟for循環并列的位置,這樣事件發生只會修改坐標的變化數據,不斷更新坐標的任務就在while循環里執行了。
修改后的代碼;
#!/usr/bin/env python #指定圖像文件名稱 background_image_filename = './img/Underwater.png' mouse_image_filename = './img/octopus.png' #導入pygame庫 import pygame #導入一些常用的函數和常量 from pygame.locals import * #向sys模塊借一個exit函數用來退出程序 from sys import exit #初始化pygame,為使用硬件做準備 pygame.init() #創建了一個窗口 screen = pygame.display.set_mode((960, 720), 0, 32) #設置窗口標題 pygame.display.set_caption("海底世界") #加載并轉換圖像 background = pygame.image.load(background_image_filename).convert() kcursor = pygame.image.load(mouse_image_filename).convert_alpha() #游戲主循環 x, y = 0, 0 move_x, move_y = 0, 0 while True: for event in pygame.event.get(): if event.type == QUIT: exit() if event.type == KEYDOWN: #鍵盤有按下? if event.key == K_LEFT: #按下的是左方向鍵的話,把x坐標減一 move_x = -1 elif event.key == K_RIGHT: #右方向鍵則加一 move_x = 1 elif event.key == K_UP: #類似了 move_y = -1 elif event.key == K_DOWN: move_y = 1 elif event.type == KEYUP: #如果用戶放開了鍵盤,圖就不要動了 move_x = 0 move_y = 0 #計算出新的坐標 x+= move_x y+= move_y screen.fill((0,0,0)) screen.blit(background, (0,0)) screen.blit(kcursor, (x,y)) #在新的位置上畫圖 pygame.display.update()
本站部分內容轉載自網絡,如有侵權請聯系管理員及時刪除。
