2015-09-25 71 views
-1

我有兩種方法在我的板級內檢查碰撞。一個用於其他玩家對象,另一個用於地圖邊界。地圖的工作正常,但玩家的碰撞已關閉。 這裏是方法:基於控制檯的遊戲衝突不起作用

def check_mob(self, player, enemy): 
    dx = player.x - enemy.x 
    dy = player.y - enemy.y 
    distance = math.sqrt(dx ** 2 + dy ** 2) 
    if distance <= 1: 
     return True 
    else: 
     return False 

def check_brd(self, board, player, enemy, direction): 
    '''Deals with collision ''' 
    brd_x = len(self.board) 
    brd_y = len(self.board[0]) 
    if direction == 'down': 
     if player.x + 1 == brd_x or self.check_mob(player, enemy): 
      return False 
     else: 
      return True 
    elif direction == 'up': 
     if player.x - 1 == brd_x - brd_x -1 or self.check_mob(player, enemy): 
      return False 
     else: 
      return True 
    elif direction == 'left': 
     if player.y - 1 == brd_y - brd_y - 1 or self.check_mob(player, enemy): 
      return False 
     else: 
      return True 
    elif direction == 'right': 
     if player.y + 1 == brd_y or self.check_mob(player, enemy): 
      return False 
     else: 
      return True 

玩家或敵人會走到另一個,會被卡住。當這種情況發生時,我需要他們能夠彼此離開。 整個,現在的工作,代碼爲here.

+0

向我們展示在檢測到碰撞後您對玩家所做的事情。 –

+0

就像函數被調用時一樣?一旦發現碰撞,我認爲我沒有做任何事情。 –

+0

你必須做點什麼,否則球員會穿過對方或穿過牆壁。 –

回答

0

check_mob在當前位置,沒有位置,球員試圖去碰撞測試...... 還簡化

player.x - 1 == brd_x - brd_x -1 

player.x == 0 
+0

另外它會更清晰地分開的東西:check_brd只做邊緣,check_mob只做敵人,然後調用它們兩個,而不是從check_brd裏面調用check_mob – Julien

+0

我似乎無法將我的頭圍繞在這裏。我知道需要發生什麼,但我不知道如何將它放入代碼中。 –

+0

首先從check_brd中刪除敵方邏輯。其次爲check_mob添加方向作爲參數,以便您可以檢查玩家瞄準的位置,而不是他目前的位置。第三個調用這兩個函數,只有在兩個都返回True時才移動 – Julien