如何在Pygame中移动精灵

时间:2012-04-04 15:23:38

标签: python sprite pygame

我有以下课程:

class Enemy(pygame.sprite.Sprite):
def __init__(self):
    pygame.init()
    pygame.sprite.Sprite.__init__(self)
# Basic variables
    self.speed = [2,2]

# Sets up the image and Rect
    self.bitmap = pygame.image.load("badguy.png")
    self.bitmap.set_colorkey((0,0,0))
    self.shipRect = self.bitmap.get_rect()
    self.shipRect.topleft = [100,200]

def move(self, x, y):
    self.shipRect.center = (x,y)

def render(self):
    screen.blit(self.bitmap, (self.shipRect))

现在,只要我按箭头键,我就想移动它。但是,我的移动功能存在很大问题。它只是将船的中心移动到输入功能的坐标。如果您没有看到问题,那就是我试图这样称呼它:

if event.key == K_RIGHT:
    enemy.x += 5
if event.key == K_LEFT:
    enemy.move(-5,0)
if event.key == K_UP:
    enemy.move(0,5)
if event.key == K_DOWN:
    enemy.move(0,-5)

我期待它将我的五个移动到我击中的键的方向。然而,它射向屏幕的左上角,因为我将中心设置为在一个轴上为零而在另一个轴上设置为+ - 5。

可以使用什么方法让它以正确的方向移动,并且仍然可以让精灵放在我选择的屏幕上的起始位置。

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:2)

move更改为:

def move(self, x, y):
    self.shipRect.center[0] += x
    self.shipRect.center[1] += y

这样它只会按您指定的移动量增加位置。

答案 1 :(得分:0)

move_ipcenterx / y就是您想要的:

if event.key == K_RIGHT:
    enemy.centerx.move_ip(5,0)
if event.key == K_LEFT:
    enemy.centerx.move_ip(-5,0)
if event.key == K_UP:
    enemy.centerx.move_ip(0,5)
if event.key == K_DOWN:
    enemy.centerx.move_ip(0,-5)