利用 Python Pygame 获取用户输入移动玩家图像

113 阅读2分钟

Pygame 是一个广泛用于 Python 游戏开发的跨平台模块。在此问题中,游戏开发者想要获取用户的输入,并根据输入移动玩家图像。然而,当按下 W、A、S 或 D 键时,玩家图像只能移动一个像素。开发者想知道如何让图像在按键按下时持续移动。

huake2_00017_.png 2. 解决方案

要让图像在按键按下时持续移动,开发者可以使用键盘事件。Pygame 为获取键盘事件提供了两种方法:event.type == pygame.KEYDOWN 和 event.type == pygame.KEYUP。

在 event.type == pygame.KEYDOWN 事件中,开发者可以检测到玩家按下了哪个键,并根据按键执行相应的操作,例如移动玩家图像。在 event.type == pygame.KEYUP 事件中,开发者可以检测到玩家松开了哪个键, 并停止相应的操作,例如停止移动玩家图像。

下面是实现此功能的代码示例:

import pygame
from pygame.locals import *

pygame.init()
size = width, height = 640, 480
screen = pygame.display.set_mode(size)
pygame.display.set_caption("Gaben's Future Adventure")

player = pygame.image.load("images/player.png")
player_rect = player.get_rect()

white = (255, 255, 255)
black = (0, 0, 0)

# 玩家移动速度
speed = 1

# 创建一个字典来存储按键和对应的移动方向
move_map = {
    pygame.K_w: (0, -speed),
    pygame.K_s: (0, speed),
    pygame.K_a: (-speed, 0),
    pygame.K_d: (speed, 0)
}

# 主函数
def main():
    running = True

    # 游戏主循环
    while running:
        screen.fill(white)

        # 获取事件
        for event in pygame.event.get():
            # 用户退出游戏
            if event.type == pygame.QUIT:
                running = False
                print("Exiting game.")

            # 用户按下键盘
            elif event.type == pygame.KEYDOWN:
                # 获取用户按下的键
                key = event.key
                
                # 检查按下的键是否在move_map中
                if key in move_map:
                    # 获取对应的移动方向
                    move_direction = move_map[key]

                    # 移动玩家图像
                    player_rect.move_ip(move_direction)

            # 用户松开键盘
            elif event.type == pygame.KEYUP:
                # 获取用户松开的键
                key = event.key
                
                # 检查松开的键是否在move_map中
                if key in move_map:
                    # 获取对应的移动方向
                    move_direction = move_map[key]

                    # 停止移动玩家图像
                    player_rect.move_ip((-move_direction[0], -move_direction[1]))

        # 绘制玩家图像
        screen.blit(player, player_rect)

        # 更新屏幕
        pygame.display.flip()

# 运行主函数
if __name__ == "__main__":
    main()

在上面的代码中,开发者使用了一个字典 move_map 来存储按键和对应的移动方向。在 event.type == pygame.KEYDOWN 事件中,开发者检查用户按下的键是否在 move_map 中。如果在,开发者就获取对应的移动方向,并移动玩家图像。在 event.type == pygame.KEYUP 事件中,开发者检查用户松开的键是否在 move_map 中。如果在,开发者就获取对应的移动方向,并停止移动玩家图像。这样,当用户按下 W、A、S 或 D 键时,玩家图像就会持续移动。