首页 > 解决方案 > 我一直在 pygame 中开展一个项目,但即使没有出现错误,玩家的移动似乎也不起作用

问题描述

我需要准备好玩家的移动,我已经尝试从其他脚本中获取所需的代码,但即使没有出现错误,它似乎也无法正常工作,并且经过几次检查后代码似乎没问题。我正在使用的库是sys、pygame 和 glob。我正在关注本指南,但也对其进行了更改:https ://pythonprogramming.altervista.org/platform-game-in-detail-part-1/?doing_wp_cron=1603309265.4902870655059814453125

代码:

from pygame.locals import *
import pygame
import sys
import glob
map1 = """wwwwwwwwwwwwwwwwwwwwwwwwwwwww
w                           w
w                           w
w                           w
w                           w
w                           
w                           d
w            p               
w                           
w                           w
w                           w
w                           w
w                           w
w                           w
w                           w
wwwwwwwwwwwwwwwwwwwwwwwwwwwww"""

#-----------------------------

door = pygame.image.load("C:/Users/cuerv/Downloads/Door.png")
door_rect = door.get_rect(center=(100, 250))

tile = pygame.image.load("C:/Users/cuerv/Downloads/Wall.png")
tile_rect = tile.get_rect(center=(100, 256))

player = pygame.image.load("C:/Users/cuerv/Downloads/Player.png")
player_rect = player.get_rect(center=(100, 256))



def init_display():
    global screen, tile, door, player
    screen = pygame.display.set_mode((480, 250))


def tiles(map1):
    global tile, door, player
    for y, line in enumerate(map1):
        #counts lines
        for x, c in enumerate(line):
            #counts caracters
            if c == "w":
                #caracter is w
                screen.blit(tile, (x * 16.18, y * 15))
            if c == "d":
                screen.blit(door, (x * 16.2, y * 15))
            if c == "p":
                screen.blit(player, (x * 16.2, y * 15))







playerx=200
playery=130




map1 = map1.splitlines()
pygame.init()
init_display()
clock = pygame.time.Clock()
while True:
    tiles(map1)
    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            sys.exit()

            DISPLAYSURF.blit(sprite, (playerx, playery))

    if event.type == KEYDOWN:
        if (event.key == K_LEFT):
            playerx -= 5
        elif (event.key == K_RIGHT):
            playerx += 5
        elif (event.key == K_UP):
            playery -= 5
        elif (event.key == K_DOWN):
            playery += 5






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




    pygame.display.update()
    clock.tick(120)

标签: pythonpygame

解决方案


只是你必须添加一个缩进块:

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

            DISPLAYSURF.blit(sprite, (playerx, playery))

        if event.type == KEYDOWN:
            if (event.key == K_LEFT):
                playerx -= 5
            elif (event.key == K_RIGHT):
                playerx += 5
            elif (event.key == K_UP):
                playery -= 5
            elif (event.key == K_DOWN):
                playery += 5

推荐阅读