2012-04-04 45 views
-1

我有下面的类移动精灵:如何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

变化move到:

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

这样,它只是通过增加您指定的移动量的位置。

+1

做笔记,转让必须是'self.shipRect.centerx + = x'和'self.shipRect.centery + = y'。中心本身就是一个不能被索引的元组。 – Linell 2012-04-04 17:29:15

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)