0

我一直在做一个学校项目,我需要一些关于球员运动的帮助。问题是我必须手动点击箭头/WASD键让玩家一次移动一个点。如果我按住键,玩家将不会移动。我该如何解决这个问题?

注意 - 我使用的是过时的 Python - Python 2.7.3

代码:

# Begin 'The Maze'
# Import modules

import os, sys, time, pygame
from pygame.locals import *
from pygame.time import *

# Initialise Pygame + Clock

pygame.init()
mainClock = pygame.time.Clock()

# Window Setup

WINDOWHEIGHT = 480
WINDOWWIDTH = 600
windowSurface = pygame.display.set_mode((WINDOWWIDTH, WINDOWHEIGHT), 0, 32)
pygame.display.set_caption('The Maze')

# Player Variables

player = pygame.Rect(50, 50, 50, 50)

# Colour Setup

BLACK = (0, 0, 0)
WHITE = (255, 255, 255)
RED = (255, 0, 0)
BLUE = (0, 0, 255)
GREEN = (0, 255, 0)

# Movement Variables

moveLEFT = False
moveRIGHT = False
moveUP = False
moveDOWN = False

MOVESPEED = 7

x,y = 0,0
charx,chary = 0,0
movex,movey = 0,0

# Game Loop & Events + Updates
while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        # Change the keyboard variables
        if event.type == KEYDOWN:
            if event.key == K_LEFT or event.key == ord('a'):
                moveLEFT = True
                movex = -0.5
            if event.key == K_RIGHT or event.key == ord('d'):
                moveRIGHT = True
                movex = -0.5
            if event.key == K_UP or event.key == ord('w'):
                moveUP = True
                movey = 0.5
            if event.key == K_DOWN or event.key == ord('s'):
                moveDOWN = True
                movey = -0.5
        if event.type == KEYUP:
            if event.key == K_ESCAPE:
                pygame.quit()
                sys.exit()
            if event.key == K_LEFT or event.key == ord('a'):
                moveLEFT = False
                movex = 0
            if event.key == K_RIGHT or event.key == ord('d'):
                moveRIGHT = False
                movex = 0
            if event.key == K_UP or event.key == ord ('w'):
                moveUP = False
                movey = 0
            if event.key == K_DOWN or event.key == ord('s'):
                moveDOWN = False
                movey = 0

            
        # Background Setup
        windowSurface.fill(WHITE)
        # Player Setup + Updating Screen
        if moveDOWN and player.bottom < WINDOWHEIGHT:
            player.top += MOVESPEED
        if moveUP and player.top > 0:
            player.top-= MOVESPEED
        if moveLEFT and player.left > 0:
            player.left -= MOVESPEED
        if moveRIGHT and player.right < WINDOWWIDTH:
            player.right += MOVESPEED
        pygame.draw.rect(windowSurface, GREEN, player)
        pygame.display.update()
        mainClock.tick(40)

谢谢!

4

1 回答 1

0

A simple dedent of the block of code after # Background Setup did the job.

while True:
    for event in pygame.event.get():
        if event.type == QUIT:
            pygame.quit()
            sys.exit()
        # Change the keyboard variables
        if event.type == KEYDOWN:
            if event.key == K_LEFT or event.key == ord('a'):
                moveLEFT = True
            elif event.key == K_RIGHT or event.key == ord('d'):
                moveRIGHT = True
            elif event.key == K_UP or event.key == ord('w'):
                moveUP = True
            elif event.key == K_DOWN or event.key == ord('s'):
                moveDOWN = True
        elif event.type == KEYUP:
            if event.key == K_ESCAPE:
                pygame.quit()
                sys.exit()
            elif event.key == K_LEFT or event.key == ord('a'):
                moveLEFT = False
            elif event.key == K_RIGHT or event.key == ord('d'):
                moveRIGHT = False
            elif event.key == K_UP or event.key == ord ('w'):
                moveUP = False
            elif event.key == K_DOWN or event.key == ord('s'):
                moveDOWN = False

         # <-- Dedent

    # Background Setup
    windowSurface.fill(WHITE)
    # Player Setup + Updating Screen
    if moveDOWN and player.bottom < WINDOWHEIGHT:
        player.top += MOVESPEED
    if moveUP and player.top > 0:
        player.top-= MOVESPEED
    if moveLEFT and player.left > 0:
        player.left -= MOVESPEED
    if moveRIGHT and player.right < WINDOWWIDTH:
        player.right += MOVESPEED
    pygame.draw.rect(windowSurface, GREEN, player)
    pygame.display.update()
    mainClock.tick(40)
于 2013-11-10T22:58:49.410 回答