所以我又重新制作了游戏,而我正在使用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()
谢谢:)
答案 0 :(得分:2)
好的,所以我必须为您调试
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)在(x,y)
之后立即打印出玩家的handle_keys
坐标,那时我注意到(x,y)
的值似乎总是被重置。这表明我
玩家实例从未真正更改过
玩家实例总是被重新初始化
我将留给您找出解决您的问题需要进行哪些代码更改