所以我又开始制作游戏了,我正在使用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)
值似乎总是被重置。这表明
玩家实例实际上从未更改
玩家实例总是被重新初始化
我会让你弄清楚你需要做什么代码更改来解决你的问题