2012-06-10 104 views
3

我正在製作一個自上而下的射手,並希望我的殭屍跟隨我的角色,而我的程序使用主循環。我角色的位置是x和y,他由箭頭鍵控制。我有一個殭屍,現在隨機在屏幕的左邊緣隨機產生。我怎麼能讓殭屍跟隨我的位置從它產生的位置?如何讓敵人在pygame中跟隨玩家?

這是殭屍功能:

def makezombie(): 
    global zom 
    zom = Rect (0,randint(0, height-40), 49, 38) 
    return zom 

我設置殭屍= makezombie()

在我的主循環我有以下幾點:

for shot in shots: 
    if zombie.collidepoint(shot[X],shot[Y]): 
     zombie=makezombie() 
     points+=1000 
     impact.play() 
     blood.play() 

回答

6

我不知道我完全理解這個問題,但基本上你可以做的是以玩家(x,y)座標和殭屍(x,y)座標。假設(XP,YP)是玩家座標和(XZ,YZ)是殭屍,你可以使用下面的算法來找到殭屍對玩家的方向:在主迴路

import math 
(dx, dy) = ((xp - xz)/math.sqrt((xp - xz) ** 2 + (yp - yz) ** 2), 
      (yp - yz)/math.sqrt((xp - xz) ** 2 + (yp - yz) ** 2)) 

然後你想要通過newCoord =(xp + dx * spped,yp + dy * speed)更新殭屍x和y位置座標,其中速度是您希望殭屍每循環移動的像素數。然後在這個新的位置重新繪製殭屍。

希望有幫助!如果沒有,請澄清這個問題。

+1

爲什麼不使用math.sqrt而不是** 0.5? – sloth

+0

任何一個都可以工作,但如果我不需要,我不想導入太多的模塊。我真的不確定一個人是否比另一個更好,儘管我會承認math.sqrt對於閱讀代碼的人可能更容易理解。 – user1413793

+0

在我的筆記本電腦上(在Ubuntu下爲Python 2.7),當使用''timeit.timeit()''函數測量時,使用''math.sqrt''快兩倍。 ''math.sqrt''每次計算大約需要631ns(平均超過100萬次),而''x ** 0.5''大約需要1260ns。單獨使用並不是一個很大的區別,但是如果您在循環中進行大量計算,比如在更新遊戲中大量角色的位置時,可能會產生很大的差異... – Blair

1

如果你知道向量數學(即:euclid),你可以使用向量減法。

zombie_speed = 50 # pixels/an update 
player = Vector2(player.rect.x, player.rect.y) 
zombie = Vector2(zombie.rect.x, zombie.rect.y) 
movement = player - zombie 
movement.normalize() 
movement *= zombie_speed 

然後加入運動的x,y值殭屍的矩形()

+0

注意:我最後兩行是否等於使用點積? – ninMonkey