2014-03-26 50 views
0

所以我在過去的幾個月裏一直教自己一些pygame,做太空飛船遊戲。如果玩家在敵人的半徑範圍內,改變狀態

我有多個守衛某個區域的敵方宇宙飛船。如果玩家進入某個半徑範圍內,我想改變敵人的狀態。對於初學者而言,最好的方法是什麼,而不使用向量?

+3

計算他們之間的距離,在每次打勾時做,如果距離低於某個值,做些什麼......? – jonrsharpe

+0

好的,你打勾的是什麼意思? – CollisionOfConcepts

+0

我的意思是每次圍繞主遊戲循環時,你可能會調用['clock.tick()'](http://www.pygame.org/docs/ref/time.html#pygame.time.Clock.tick ) – jonrsharpe

回答

1

您可以在程序中創建一個名爲is_close的方法,然後將其與每個player and enemy進行比較。它看起來是這樣的:

def is_close(object1, object2, distance): 
    return math.hypot(object2.x-object1.x, object2.y-object1.y) < float(distance) 

... #rest of your code 

while True: #This is your main while loop 
    ... #rest of your code 

    for enemy in enemies: 
     if is_close(player, enemy, 25): 
      enemy.state = new_state #change state, this may simply be a color change 
+0

使用'return如果some_condition else False'是多餘的,只需使用'return some_condition'。另外,要獲得兩點之間的歐氏距離,只需使用內置的'math.hypot'函數;無需自己重新創建這樣的功能。所以'is_close'可以簡化爲'return math.hypot(object2.x-object1.x,object2.y-object1.y) sloth

+0

@DominicKexel,謝謝你的簡化。我已經相應地更新了答案。 – sshashank124