Как мне переместить мой спрайт, используя назначенные мне комбинации клавиш? - PullRequest
1 голос
/ 24 марта 2019

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

import pygame
pygame.init()

window = pygame.display.set_mode((750, 750))

pygame.display.set_caption("PeaShooters")

avatar = pygame.image.load('Sprite 1 Red.png')
background = pygame.image.load('Bg.jpg')

x = 64
y =64
width = 40
height = 60
vel = 5 
white = (255, 255, 255)

def drawGrid():
    window.blit(background, (0,0))
    window.blit(avatar, (300,500))
    pygame.draw.line(window, white, [50,50], [50, 600], 5)
    pygame.draw.line(window, white, [50,50], [600, 50], 5)
    pygame.draw.line(window, white, [600,600], [600, 50], 5)
    pygame.draw.line(window, white, [50,600], [600, 600], 5)
    pygame.draw.line(window, white, [50,450], [600, 450], 5)
    pygame.display.update()

running = True
while running:
    pygame.time.delay(100) 

    for event in pygame.event.get():
        if event.type == pygame.QUIT:
            running = False

    keys = pygame.key.get_pressed()

    if keys[pygame.K_w] and y > 455:
        y += vel

    if keys[pygame.K_a] and x > 55:
        x -= vel

    if keys[pygame.K_s] and y < 565:
        y -= vel

    if keys[pygame.K_d] and x < 575 :
        x += vel
*I gathered something needs to be changed around here.
    drawGrid()



pygame.quit()

1 Ответ

1 голос
/ 24 марта 2019

С opensource.com :

Чтобы заставить ваш спрайт двигаться, вы должны создать свойство для вашего спрайта, которое представляет движение.Когда ваш спрайт не перемещается, эта переменная устанавливается на 0.

Если вы анимируете свой спрайт или если вы решите анимировать его в будущем, вы также должны отслеживать кадры, чтобы позволить циклу ходьбы остатьсяна дорожке.

Создайте переменные в классе Player.Первые две строки предназначены для контекста (они уже есть в вашем коде, если вы следили за ним), поэтому добавьте только последние три:

def __init__(self):
    pygame.sprite.Sprite.__init__(self)
    self.movex = 0 # move along X
    self.movey = 0 # move along Y
    self.frame = 0 # count frames

С этими переменными пора кодироватьдвижение спрайта.

Спрайту игрока не нужно постоянно отвечать на управление;иногда это не будет двигаться.Следовательно, код, который управляет спрайтом, является лишь небольшой частью всего того, что будет делать спрайт игрока.Когда вы хотите, чтобы объект в Python выполнял что-то независимое от остальной части его кода, вы помещаете свой новый код в функцию.Python-функции начинаются с ключевого слова def, которое обозначает define.

Создайте функцию в своем классе Player, чтобы добавить некоторое количество пикселей к позиции вашего спрайта на экране.Не беспокойтесь о том, сколько пикселей вы добавили;это будет решено в следующем коде.

def control(self,x,y):
    '''
    control player movement
    '''
    self.movex += x
    self.movey += y

Чтобы переместить спрайт в Pygame, вы должны указать Python перерисовать спрайт в его новом местоположении - и где это новое местоположение.

Поскольку спрайт Player не всегда перемещается, обновления должны быть только одной функцией в классе Player.Добавьте эту функцию после функции управления, которую вы создали ранее.

Чтобы создать впечатление, что спрайт движется (или летит, или все, что должен делать ваш спрайт), вам нужно изменить его положение на экране.когда соответствующая клавиша нажата.Чтобы заставить его перемещаться по экрану, вы переопределяете его позицию, определяемую свойствами self.rect.x и self.rect.y, в его текущую позицию плюс любое количество примененных movex или movey.(Количество пикселей, необходимое для перемещения, устанавливается позже.)

def update(self):
    '''
    Update sprite position
    '''
    self.rect.x = self.rect.x + self.movex        

Сделайте то же самое для позиции Y:

    self.rect.y = self.rect.y + self.movey

Для анимации, передвигайте кадры анимации всякий раз, когда ваш спрайтдвижется, и используйте соответствующий кадр анимации в качестве изображения игрока:

    # moving left
    if self.movex < 0:
        self.frame += 1
        if self.frame > 3*ani:
            self.frame = 0
        self.image = self.images[self.frame//ani]

    # moving right
    if self.movex > 0:
        self.frame += 1
        if self.frame > 3*ani:
            self.frame = 0
        self.image = self.images[(self.frame//ani)+4]
...