2012-04-04 3 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

0

move_ip и centerx/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) 
Смежные вопросы