2012-04-04 12 views
-1

Ich habe die folgende Klasse:So verschieben Sie ein Sprite in 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)) 

Jetzt will ich es haben zu bewegen, wenn ich einen Pfeil-Taste drücken. Allerdings gibt es ein großes Problem mit meiner Bewegungsfunktion. Es bewegt einfach die Mitte des Schiffes zu den Koordinaten, die in die Funktion eingegeben werden. Falls Sie das Problem nicht sehen, es ist, dass ich so nennen es ich versucht:

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) 

erwartete ich es meine fünf in Richtung der Schlüssel zu bewegen, die ich getroffen. Es schießt jedoch nach oben links vom Bildschirm, weil ich den Mittelpunkt auf Null auf einer Achse und + - 5 auf der anderen Achse setze.

Welche Methode kann verwendet werden, um es in die richtige Richtung zu bewegen und mir immer noch die Möglichkeit zu geben, die Sprites an einer Startposition auf dem Bildschirm, den ich wähle, zu setzen.

Jede Hilfe wird sehr geschätzt.

Antwort

2

Änderung move zu:

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

diese Weise ist es einfach die Position, die Sie angeben, durch den Bewegungsbetrag erhöht.

+1

Für Notiz, muss die Zuordnung 'self.shipRect.centerx + = x' und' self.shipRect.centery + = y' sein. Das Zentrum selbst ist ein Tupel, das nicht so indiziert werden kann. – Linell

0

move_ip und centerx/y ist, was Sie wollen:

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) 
Verwandte Themen