2012-04-04 25 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)