我试图将图像作为背景进行blit,然后让精灵在所有方向上移动并旋转。到目前为止,我有以下内容:
import pygame, sys
from pygame.locals import *
BGimageName = 'joker.jpg'
FGimageName = 'bmanicon.tga'
pygame.init()
DisWidth = 900
DisHeight = 600
x = -500
y = -300
spriteROT = 1.0
SPHpos = (DisWidth//2, DisHeight//2)
DISPLAYSURF = pygame.display.set_mode((DisWidth, DisHeight), 0, 32)
BGimage = pygame.image.load(BGimageName).convert()
FGimage = pygame.image.load(FGimageName).convert_alpha()
def main():
while True:
for event in pygame.event.get():
if event.type == QUIT:
pygame.quit()
sys.exit()
if event.type == KEYDOWN:
if event.key == K_LEFT:
move_x = -1
elif event.key == K_RIGHT:
move_x = +1
elif event.key == K_UP:
move_y = -1
elif event.key == K_DOWN:
move_y = +1
elif event.key == K_r:
rotationDIR = + 1.0
elif event.key == K_w:
rotationDIR = - 1.0
elif event.type == KEYUP:
if event.key == K_LEFT:
move_x = 0
elif event.key == K_RIGHT:
move_x = 0
elif event.key == K_UP:
move_y = 0
elif event.key == K_DOWN:
move_y = 0
elif event.key == K_r:
rotationDIR = 0
elif event.key == K_w:
rotationDIR = 0
DISPLAYSURF.blit(BGimage, (x, y))
RotSPH = pygame.transform.rotate(FGimage, spriteROT)
w, h = RotSPH.get_size()
spriteDrawPos = (SPHpos[0] - w // 2, SPHpos[1] - h // 2)
DISPLAYSURF.blit(RotSPH, spriteDrawPos)
pygame.display.update()
main()
这对我来说都很新鲜。其中大部分是由我们的教授提供的,然后我们必须弄清楚其余部分并对其进行个性化。不幸的是,我没有在课堂上讨论活动,所以我不太了解它们。我认为我目前所有东西都在工作,因为背景和精灵都会显示,但是当按下任何按钮时,精灵都不会移动。我怎样才能让Python认识到我希望精灵移动?
我试图把FGimage.move_x
等等放在事件键中,即
if event.key == K_LEFT:
FGimage.move_x = -1
但这不起作用,给我错误
Attribute Error: 'pygame.Surface' object has no attribute 'move_x'
我想我已经接近了,但我还是错过了最后一步。
答案 0 :(得分:1)
你没有移动精灵的原因是因为你没有用事件改变任何变量。
具体而言,位置变量spriteDrawPos
没有变化,因为修改它的行spriteDrawPos = (SPHpos[0] - w // 2, SPHpos[1] - h // 2)
没有变化,因为SPHpos
永远不会改变,因为spriteROT
永远不会改变。
要解决此问题,请修改代码以使用您在事件中更改的变量。
spriteROT += rotationDIR
RotSPH = pygame.transform.rotate(FGimage, spriteROT)
w, h = RotSPH.get_size()
spriteDrawPos = (SPHpos[0] - w // 2 + move_x, SPHpos[1] - h // 2 + move_y)
DISPLAYSURF.blit(RotSPH, spriteDrawPos)
这有望让你的精灵移动,但可能太快了。