2012-03-28 4 views
0

Я делаю игру, и я хочу проверить столкновение между игроком и блоком и нажать обратно игрока, если это необходимо.Pygame столкновение между игроком и блоком

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) 

но по некоторым причинам не работает. Кто-нибудь может мне помочь? Заранее спасибо

+0

Является ли это методом класса, и вы положили 'self' в неправильное место, или вы просто вызвали второй аргумент' self'? Методы обычно строчные в Python, кстати. –

+0

Спасибо, я исправил его. Да, это метод класса. – n3gative

ответ

1

Если вы хотите, чтобы ваши объекты были отброшены назад, тогда самый простой способ - немного изменить вашу функцию update().

Каждый раз, когда вы двигаетесь, записать текущее положение как «self._oldposition» (или что-то подобное) При столкновении, вам нужно будет установить текущую позицию в прежнее положение (self._oldposition)

Это позаботится о большинстве ваших проблем с столкновением.

+0

Спасибо большое :) – n3gative

1

Попробуйте заменить

def Collide(player,self): 

по

def collide(self, player): 

если это метод какого-то класса Obstacle. Просто гадать ... :)

+0

Я исправил это, но это не проблема, которую я пытаюсь решить :) – n3gative

Смежные вопросы