国产日韩欧美一区二区三区综合,日本黄色免费在线,国产精品麻豆欧美日韩ww,色综合狠狠操

極客小將

您現在的位置是:首頁 » python編程資訊

資訊內容

用python和pygame游戲編程入門-控制角色移動

極客小將2020-10-30-
如何使用鍵盤事件控制角色移動,解決只能按一下動一下的問題,在鍵盤一直按下的狀態,角色一直移動。

pygame游戲編程入門控制角色移動

在上一節中我們知道了事件,以及如何捕捉鍵盤事件進行響應,本屆我們結合第一節何上一節的內容,做一個用鍵盤控制角色移動的功能,代碼如下:

#!/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()



本站部分內容轉載自網絡,如有侵權請聯系管理員及時刪除。

預約試聽課

已有385人預約都是免費的,你也試試吧...

主站蜘蛛池模板: 阳朔县| 新闻| 遵义市| 科技| 大荔县| 大余县| 萨迦县| 宜兴市| 巢湖市| 松阳县| 微山县| 淮滨县| 蒙阴县| 海丰县| 衢州市| 离岛区| 洛南县| 嘉善县| 江西省| 叙永县| 英超| 民和| 洞口县| 五指山市| 光山县| 金乡县| 德昌县| 台东县| 大理市| 大兴区| 安新县| 汾西县| 昌都县| 江都市| 西林县| 通辽市| 新昌县| 将乐县| 宜都市| 庆阳市| 衡阳县|