Pygame问题:按下键时,精灵不会移动。是的,我环顾四周

时间:2018-12-01 14:40:31

标签: python pygame sprite

所以我又重新制作了游戏,而我正在使用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 个答案:

答案 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)的值似乎总是被重置。这表明我

  • 玩家实例从未真正更改过

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

我将留给您找出解决您的问题需要进行哪些代码更改