如何使用分配的按键移动精灵?

时间:2019-03-24 16:23:39

标签: python pygame sprite

我遇到的问题是我将精灵导入了游戏,它是静止图像,我想移动它,但是我遇到了问题,尽管我有主意必须更改主循环中的某些内容,但我一无所知关于到底要改变什么。头像是变量。

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 个答案:

答案 0 :(得分:1)

来自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

设置好这些变量后,就该编写精灵的运动了。

玩家精灵不需要一直响应控制;有时它不会移动。因此,控制Sprite的代码只是播放器Sprite要做的所有事情的一小部分。当您想使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]