Pygame问题:按键时角色不会移动。是的,我环顾了一下 SO



所以我又开始制作游戏了,我正在使用Pygame。

但是,我需要移动玩家精灵。它就是不合作。

它的工作原理是,当按下箭头键时,它应该沿着相应箭头的方向移动精灵。很明显哈哈。

但事实并非如此。而且也没有回溯。

所以我求助于我的好朋友Stack Overflow。我尝试了一些答案,但它们对我不起作用。或者游戏的机制和我的方向(双关语并非有意(

那么,有人知道如何修复它吗?这是代码。GitHub上的全部内容(以防万一(:https://github.com/E-Lee-Za/Eleeza-Crafter-The-Game

import sys
import time
import pygame
from pygame.locals import *
pygame.init()
#INITIALISE THE WINDOW.
#CONSTANTS ARE CAPITAL, VARIABLES ARE LOWERCASE
SCREENWIDTH = 1000
SCREENHEIGHT = 650
SCREENSIZE = [SCREENWIDTH, SCREENHEIGHT]
screen = pygame.display.set_mode(SCREENSIZE)
BG_COL = [255, 123, 67]
clock = pygame.time.Clock()
screen.fill(BG_COL)
pygame.display.update()
clock.tick(60)
class Player(pygame.sprite.Sprite):
def __init__(self):
self.sprite = pygame.image.load("Sprites/player.png")
self.x = 445
self.y = 550
#make functions        
def handle_keys():
""" Handles Keys """
key = pygame.key.get_pressed()
dist = 5 
if key[pygame.K_DOWN]: # down key
player.y += dist # move down
elif key[pygame.K_UP]: # up key
player.y -= dist # move up
if key[pygame.K_RIGHT]: # right key
player.x += dist # move right
elif key[pygame.K_LEFT]: # left key
player.x -= dist # move left
#MAIN GAME LOOP (WHERE WE PUT ALL THE FUNCTIONS TOGETHER)
running = True
while running:   
for events in pygame.event.get():
if events.type == QUIT:
pygame.quit()
exit()
running = False
#UNNECESSARY STUFF
player = Player()
#IF KEY PRESSED
#MOVE PLAYER SPRITE
screen.blit(player.sprite, (player.x, player.y))
handle_keys()
pygame.display.update()

谢谢:(

好的,所以我必须为你调试

1(player = Player()应该在while循环之外。在这种情况下,它不断地被重新初始化

2(player应传递到handle_keys


我假设你是一个新手,所以我将布局我的思维过程以及我如何调试它,因为我认为这对你未来更有用:

1( 在每个条件下放入一个打印语句,如

if key[pygame.K_DOWN]: # down key
print('Down')
player.y += dist # move down
elif key[pygame.K_UP]: # up key
print('Up')
player.y -= dist # move up
if key[pygame.K_RIGHT]: # right key
print('Right')
player.x += dist # move right
elif key[pygame.K_LEFT]: # left key
print('left')
player.x -= dist # move left

这些都打印正确-这意味着你的handle_keys是一种工作

2( 在handle_keys之后立即打印出玩家的(x,y)坐标,此时我注意到(x,y)值似乎总是被重置。这表明

  • 玩家实例实际上从未更改

  • 玩家实例总是被重新初始化

我会让你弄清楚你需要做什么代码更改来解决你的问题

相关内容

最新更新