玩家不在pygame中移动

问题描述

我用pygame创建了一个程序。出现背景和播放器,但播放器没有移动。该程序没有给出任何错误,您可以帮我吗?我正在使用python 3.8.6。这是我的一些代码

 # Game Loop
running = True
while running:

for event in pygame.event.get():

    player(playerX,playerY)
    pygame.display.update()

        # Movment
if event.type == pygame.KEYDOWN:
    if event.key == pygame.K_a:
        player_x_change -= 10
    if event.key == pygame.K_d:
        player_x_change += 10
    if event.key == pygame.K_w:
            player_y_change -= 10
    if event.key == pygame.K_s:
            player_y_change += 10

if event.type == pygame.KEYUP:
    if event.key == pygame.K_a:
        player_x_change = 0
    if event.key == pygame.K_d:
        player_x_change = 0
        
    # Close the game
    if event.type == pygame.QUIT:
        running = False

解决方法

您需要在用户按下按钮移动角色然后更新玩家位置时检查事件。例如,这里检查玩家是否按下了向右箭头:

while running:
    for event in pygame.event.get():

        player(playerX,playerY)

        pygame.display.update()

        # checking if right arrow is being pressed
        if events.type == pygame.KEYDOWN:
            if events.key == pygame.K_RIGHT
                # update players x position here to move right
                # for example,player.x += 2

        # Close the game
        if event.type == pygame.QUIT:
            running = False
,

您的代码只是显示玩家,而不是移动玩家。
要移动播放器,首先必须定义一个速度变量。然后,您必须获取播放器的矩形。这样您就可以使用定义的速度变量来修改玩家位置。
另外,如果要移动播放器,则必须在绘制播放器之前先绘制背景。否则,您吸引的每个玩家都不会消失。
并且不要忘记定义游戏速度。

代码

#!/usr/bin/python3

import pygame

# set the game speed
delay = 10

screen = pygame.display.set_mode((800,600))

# loading player image and get pos
player = pygame.image.load('pixel_ship_yellow.png')
player_pos = player.get_rect()

# define speed variable
speed = [1,1]

while True:
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            break

    # drawing background
    screen.fill((0,0))

    # apply speed (position is automatically updated)
    player_pos = player_pos.move(speed)

    # drawing player
    screen.blit(player,player_pos)
    
    pygame.display.flip()

    # set the game speed
    pygame.time.delay(delay)