2012-03-28 10 views
0

私はゲームを作っています。プレイヤーとブロックの衝突をチェックし、必要ならプレイヤーをプッシュバックしたいと思います。プレイヤーとブロックのゲームの衝突

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) 

しかし、何らかの理由で動作しません。誰か助けてくれますか?これはObstacleクラスのいくつかの種類の方法である場合には、事前

+0

これはクラスメソッドで、あなたは間違った場所に 'self'を置いていますか、あるいは単に' self'という第2引数を呼び出しましたか?メソッドは通常、Pythonでは小文字で、btwです。 –

+0

ありがとう、私はそれを修正しました。はい、これはクラスメソッドです。 – n3gative

答えて

1

オブジェクトをプッシュバックしたい場合は、最も簡単な方法はupdate()関数を少し変更することです。

あなたが移動するたびに、「self._oldposition」(または類似したもの) あなたが衝突すると、古い位置に現在位置を設定する必要があります(self._oldposition)

として、現在の位置を記録これはあなたの衝突の問題の大部分を処理します。

+0

ありがとう:) – n3gative

1

で おかげで

def collide(self, player): 

によって

def Collide(player,self): 

を交換してみてください。ちょっと推測する... :)

+0

私はそれを修正しましたが、それは私が解決しようとしている問題ではありません:) – n3gative

関連する問題