我遇到的问题是我将精灵导入了游戏,它是静止图像,我想移动它,但是我遇到了问题,尽管我有主意必须更改主循环中的某些内容,但我一无所知关于到底要改变什么。头像是变量。
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()
答案 0 :(得分:1)
要使精灵移动,必须为精灵创建一个表示移动的属性。当精灵不移动时,此变量设置为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]