2012-03-28 6 views
0

Ich mache ein Spiel und ich möchte die Kollision zwischen Spieler und Block überprüfen, und Spieler zurückdrängen, wenn nötig.Pygame Kollision zwischen Spieler und Block

def collide(self,player): 
    if self.solid: 
     if self.rect.colliderect(player.rect): 
      if self.rect.bottom-1 <= player.rect.top and player.pos == 'up': 
       player.up = 0 
       player.rect.move(0,1) 
      if self.rect.top+1 >= player.rect.bottom and player.pos == 'down': 
       player.down = 0 
       player.rect.move_ip(0,-1) 
      if self.rect.left+1 <= player.rect.right and player.pos == 'right': 
       player.right = 0 
       player.rect.move_ip(-1,0) 
      if self.rect.right-1 >= player.rect.left and player.pos == 'left': 
       player.left = 0 
       player.rect.move_ip(1,0) 

aber aus irgendeinem Grund funktioniert es nicht. Kann mir jemand helfen? Vielen Dank im Voraus

+0

Ist das eine Klassenmethode und Sie haben das 'self' an die falsche Stelle gesetzt, oder haben Sie einfach das zweite Argument' self' genannt? Methoden sind normalerweise Kleinbuchstaben in Python, BTW. –

+0

Danke, ich habe es behoben. Ja, das ist Klassenmethode. – n3gative

Antwort

1

Wenn Sie möchten, dass Ihre Objekte zurückgeschoben werden, dann besteht der einfachste Weg darin, Ihre update() -Funktion nur ein wenig zu modifizieren.

Jedesmal, wenn Sie bewegen, um die aktuelle Position als „self._oldposition“ (oder so ähnlich) aufzeichnen Wenn Sie kollidieren, müssen Sie die aktuelle Position auf der alten Position (self._oldposition)

einstellen Dies wird für die meisten Ihrer Kollisionsprobleme sorgen.

+0

Vielen Dank :) – n3gative

1

Versuchen ersetzt

def Collide(player,self): 

von

def collide(self, player): 

wenn diese ein Verfahren zur Herstellung einer Art Obstacle Klasse. Einfach raten ... :)

+0

Ich habe das behoben, aber das ist nicht das Problem, das ich versuche zu lösen :) – n3gative

Verwandte Themen