如何让敌人跟随pygame中的玩家?

时间:2012-06-10 19:27:10

标签: python pygame

我正在制作一个自上而下的射手,希望我的僵尸能够跟随我的角色,而我的程序使用了一个主循环。我的角色的位置是x和y,他由箭头键控制。我有一个僵尸,当时拍摄的时候,它会在屏幕的左边缘随机产生。如何让僵尸跟随我产生的位置?

这是僵尸功能:

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

我设置了zombie = makezombie()

在我的主循环中,我有以下内容:

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

2 个答案:

答案 0 :(得分: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 :(得分: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值添加到zombie的Rect()