簡體   English   中英

Pygame問題:按下鍵時,精靈不會移動。 是的,我環顧四周

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM