4

我正在制作一个自上而下的射击游戏,并希望我的僵尸跟随我的角色,我的程序使用主循环。我的角色的位置是 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()
4

2 回答 2

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 位置坐标,其中速度是您希望僵尸每次循环移动的像素数。然后在这个新位置重新绘制僵尸。

希望有帮助!如果不是,请澄清问题。

于 2012-06-10T19:33:34.853 回答
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 值添加到僵尸的 Rect()

于 2012-06-10T23:23:37.753 回答