Проблемы с Pygame: спрайт не перемещается при нажатии клавиши.И да, я осмотрелась на ТАК - PullRequest
0 голосов
/ 01 декабря 2018

Итак, я вернулся к созданию игры снова и использую Pygame.

Однако мне нужно переместить спрайт игрока.И он просто не будет взаимодействовать.

То, как это должно работать, заключается в том, что при нажатии клавиши со стрелкой он должен перемещать спрайт в направлении соответствующей стрелки.достаточно очевидно, ха-ха.

Но это не так.И никакого обратного следа тоже нет.

Так что я обращаюсь к своему хорошему другу, Переполнению стека.Я попробовал некоторые ответы, но они просто не работают для меня.Или механика игры и направление, в котором я ее принимаю (игра слов не предназначена)

Итак, у кого-нибудь есть идеи, как это исправить?Вот кодПолная информация о 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 голосов
/ 01 декабря 2018

Хорошо, поэтому мне пришлось отладить его для вас

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) значения, казалось, всегда сбрасывались.Это показало мне, что либо

  • экземпляр проигрывателя никогда не менялся

  • экземпляр проигрывателя всегда получал повторную инициализацию

Я оставлю вас, чтобы выяснить, какие изменения кода необходимо внести для решения вашей проблемы

...