簡體   English   中英

Pygame Keyup / Keydown

[英]Pygame Keyup/Keydown

我正在為我學校的計算機俱樂部制作一個小馬里奧。 (好吧,作為團隊的一員。)無論如何,我在使用“keyup / keydown”命令時遇到了一些麻煩。 這是我的代碼:

# 1 - Import library
import pygame
from pygame.locals import *

# 2 - Initialize the game
pygame.init()
width, height = 1280, 1000
screen=pygame.display.set_mode((width, height))
keys = [False, False, False, False]
playerpos=[100,100]

# 3 - Load images
player = pygame.image.load("images/totallynotgodzilla.png")
# 3.1 - Load Audio
music = pygame.mixer.Sound("audio/skyrim.wav")

# 4 - keep looping through
while 1:
    # 5 - clear the screen before drawing it again
    screen.fill(0)
    # 6 - draw the screen elements
    screen.blit(player, playerpos)
    # 7 - update the screen
    pygame.display.flip()
    # 8 - loop through the events
    for event in pygame.event.get():
        if event.type == pygame.KEYDOWN:
            if event.key==K_w:
                keys[0]=True
            elif event.key==K_a:
                keys[1]=True
            elif event.key==K_s:
                keys[2]=True
            elif event.key==K_d:
                keys[3]=True
        if event.type == pygame.KEYUP:
            if event.key==pygame.K_w:
                keys[0]=False
            elif event.key==pygame.K_a:
                keys[1]=False
            elif event.key==pygame.K_s:
                keys[2]=False
            elif event.key==pygame.K_d:
                keys[3]=False

        # 9 - Move player
        if keys[0]:
            playerpos[1]-=5
        elif keys[2]:
            playerpos[1]+=5
        if keys[1]:
            playerpos[0]-=5
        elif keys[3]:
            playerpos[0]+=5

基本上,問題是當我按下一個鍵時,它等待鍵盤命令發生再次移動之前。 所以基本上我必須快速按下按鈕才能移動。

我刪除了一些代碼,所以如果缺少某些內容,請告訴我,我會告訴你我是否擁有它。

縮進問題。 您需要在主游戲循環中測試關鍵狀態,而不是在事件循環中。 您需要將您的keystate測試保持一個級別。

while 1:
    # do init stuff 
    screen.fill(0)
    # .... (all main loop init stuff here)

    for event in pygame.event.get():
        # test events, set key states
        if event.type == pygame.KEYDOWN:
            if event.key==K_w:
                keys[0]=True
        # .... (all event stuff)

    # Indent moves back to main game loop
    # test key states here...
    if keys[0]:
        playerpos[1]-=5
    elif keys[2]:
        playerpos[1]+=5
    # .... (and so on)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM