Pygam的Keydown事件

2024-09-29 19:18:36 发布

您现在位置:Python中文网/ 问答频道 /正文

我只想左右移动一个街区,但现在不知道为什么按键密码不能通过。当我打开程序,它只是显示'坦克'在其位置,但你不能用左键或右键移动它。你知道吗

import pygame, sys
from pygame.locals import *

WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600
TANK_SIZE = 20

BLACK = (0  ,0  ,0  )
WHITE = (255,255,255)

def drawArena():
    DISPLAYSURF.fill(BLACK)

def drawTank(tank):
    pygame.draw.rect(DISPLAYSURF, WHITE, tank)

def main():
    pygame.init()
    global DISPLAYSURF
    DISPLAYSURF = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
    pygame.display.set_caption('Tanks')

    tankX = 200
    tankY = 200

    tank = pygame.Rect(tankX, tankY, TANK_SIZE, TANK_SIZE)

    drawArena()
    drawTank(tank)

    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    tankX -= 20
                if event.key == pygame.K_RIGHT:
                    tankX += 20

        drawArena()
        drawTank(tank)

        pygame.display.update()

if __name__ == '__main__':
    main()

Tags: importeventsizeifmaindefdisplaywindow
2条回答

您不应该更新tankX和tankY变量,因为这不会影响tankRect对象。您不需要重新初始化tank对象,因为这可能会浪费资源。一种更有效的方法是直接使用tank对象的move\u ip()函数更新它的x和y值。你知道吗

在你的主循环中。。。你知道吗

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            pygame.quit()
            sys.exit()

        if event.type == pygame.KEYDOWN:
            if event.type == pygame.K_LEFT:
                tank.move_ip(-20, 0)
            if event.type == pygame.K_RIGHT:
                tank.move_ip(20, 0)

    drawArena()
    drawTank(tank)

    pygame.display.update()

这是因为更新的tankX值不会影响tank对象。有很多方法可以让它发挥作用。例如,在while True循环中插入tank的重新初始化:

import pygame, sys
from pygame.locals import *

WINDOW_WIDTH = 800
WINDOW_HEIGHT = 600
TANK_SIZE = 20

BLACK = (0  ,0  ,0  )
WHITE = (255,255,255)

def drawArena():
    DISPLAYSURF.fill(BLACK)

def drawTank(tank):
    pygame.draw.rect(DISPLAYSURF, WHITE, tank)

def main():
    pygame.init()
    global DISPLAYSURF
    DISPLAYSURF = pygame.display.set_mode((WINDOW_WIDTH, WINDOW_HEIGHT))
    pygame.display.set_caption('Tanks')

    tankX = 200
    tankY = 200

    tank = pygame.Rect(tankX, tankY, TANK_SIZE, TANK_SIZE)

    drawArena()
    drawTank(tank)

    while True:
        for event in pygame.event.get():
            if event.type == QUIT:
                pygame.quit()
                sys.exit()

            if event.type == pygame.KEYDOWN:
                if event.key == pygame.K_LEFT:
                    tankX -= 20
                if event.key == pygame.K_RIGHT:
                    tankX += 20

        tank = pygame.Rect(tankX, tankY, TANK_SIZE, TANK_SIZE)

        drawArena()
        drawTank(tank)

        pygame.display.update()

if __name__ == '__main__':
    main()

相关问题 更多 >

    热门问题