<p>你需要通过改变敌人的位置来缩短敌人和玩家之间的距离。这可以通过找到它们位置之间的差异,然后使用该向量计算<a href="https://en.wikipedia.org/wiki/Unit_vector" rel="nofollow noreferrer">normalized</a>(单位长度)方向向量来实现。这样,<strong>通过将速度乘以方向向量来改变敌人的位置。</strong></p>
<p>一种方法是在<code>Enemy</code>类中添加如下方法。数学运算可以使用内置的<code>math</code>模块或<code>pygame.math</code>模块来完成。后者还支持2D<code>Vector2</code>类,因此它可能是实际使用的更好的类。</p>
<pre><code>import math
import pygame
from pygame.locals import *
class Enemy(object):
...
def move_towards_player(self, player):
# Find direction vector (dx, dy) between enemy and player.
dx, dy = player.rect.x - self.rect.x, player.rect.y - self.rect.y
dist = math.hypot(dx, dy)
dx, dy = dx / dist, dy / dist # Normalize.
# Move along this normalized vector towards the player at current speed.
self.rect.x += dx * self.speed
self.rect.y += dy * self.speed
# Same thing using only pygame utilities
def move_towards_player2(self, player):
# Find direction vector (dx, dy) between enemy and player.
dirvect = pygame.math.Vector2(player.rect.x - self.rect.x,
player.rect.y - self.rect.y)
dirvect.normalize()
# Move along this normalized vector towards the player at current speed.
dirvect.scale_to_length(self.speed)
self.rect.move_ip(dirvect)
</code></pre>
<p>你将需要添加检查,以确定敌人的物体是否会超出,从而击中沿途的球员,如果它移动了这个距离,并作出相应的反应。提示:当移动量大于或等于速度向量的长度时,即对象的速度大于或等于它们之间的距离时,将发生碰撞。</p>