[英]Pygame problems: The sprite won't move when key pressed. And yes, I looked around on 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)
值似乎總是被重置的時候。 這表明我要么
玩家實例從未真正更改過
玩家實例總是被重新初始化
我讓您找出解決您的問題需要進行哪些代碼更改
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.