2016-07-05 14 views
0

Okay,Pygame Collision mit wechselnden Sprites

Ich habe überall hingeschaut und kann immer noch nicht PyGame Kollisionen herausfinden. Ich habe zwei Sprites: Ein Lander und eine Mondoberfläche. Der Mond ist eine unebene Oberfläche mit einem transparenten Hintergrund, während der Lander ein Sprite ist, der sich durch Bilder mit L-, D-, UP-Tasten drückt.

Ich mache etwas falsch, wenn es um Kollisionserkennung kommt. Ansonsten alles in meinem Programm geht swimmingly

Das ist mein Landers Klasse:

class ShipClass(pygame.sprite.Sprite): 
def __init__(self, image_file, position): 
    pygame.sprite.Sprite.__init__(self) 
    self.imageMaster = pygame.image.load(image_file) 
    self.image = self.imageMaster 
    self.rect = self.image.get_rect() 
    self.mask = pygame.mask.from_surface(self.imageMaster) 
    self.rect.topleft = position 

    ## This doesn't work 
# def checkCollision(self, Mask): 
# if Mask.overlap_area 

def update(self): 
    self.rect = self.image.get_rect() 

Und das ist meine Mondoberfläche Klasse:

class MoonSurface(pygame.sprite.Sprite): 
    def __init__(self, image_file, position): 
     pygame.sprite.Sprite.__init__(self) 
     self.imageMaster = pygame.image.load(image_file).convert_alpha() 
     self.image = self.imageMaster 
     self.rect = self.image.get_rect() 
     self.rect.topleft = position 

Was muss ich zu diesem so hinzufügen dass, während in meinem Spiel, wenn der Lander den Mond trifft, setzt er variablen Halt auf 1 und stürzt auf 1 ab? Ich plane auch Landeplätze mit dem MoonSurface Klasse hinzufügen und wenn es sie trifft nur stoppen Sätze 1.

Mein Sprite wie folgt verschoben:

speed = [0,0] 
position = [width-524,height-718] 
gravity = 0.05 
StartingFuel = 100 

done = False 
while not done: 
    event = pygame.event.poll() 
    if event.type == QUIT: 
     pygame.quit() 
     sys.exit(0) 
    elif event.type == pygame.KEYDOWN: 
     if event.key == K_ESCAPE: 
      pygame.quit() 
      sys.exit(0)    
    else: 
     lander = ShipClass('lander.png', position) 

    keys = pygame.key.get_pressed() 
    if keys[pygame.K_LEFT]: 
     lander = ShipClass('landerLeft.png', position) 
     # lander.set_colorkey(BLACK) 
     speed[0] += 0.3 
     fuel -= 1 
    if keys[pygame.K_RIGHT]: 
     lander = ShipClass('landerRight.png', position) 
     # lander.set_colorkey(BLACK) 
     speed[0] -= 0.3 
     fuel -= 1 
    if keys[pygame.K_UP]: 
     lander = ShipClass('landerUp.png', position) 
     # lander.set_colorkey(BLACK) 
     speed[1] -= 0.4 
     fuel -= 1 

    speed[1] += gravity 
    position[0] += speed[0] 
     position[1] += speed[1] 
     if position[0] < 0: 
      position[0] = width 
     elif position[0] > width: 
      position[0] = 0 
    screen.blit(lander.image, position) 

Antwort

0

Es sieht aus wie Sie, wenn die beiden überprüfen möchten Objekte überlappen sich. Zum Glück hat Pygame eine eingebaute Funktion colliderect, die prüft, ob sich zwei Rechtecke überlappen. Ich habe es in einer Klassenmethode hier setzen, als ich sah, war Ihre Objekte Pygame Rechteck Variablen rect genannt:

def overlaps (self, other_rect): 
    return self.rect.colliderect(other_rect) 

Hier ist die Dokumentation: pygame.Rect