Python/Pygame 让一个对象跟随另一个对象

0 投票
2 回答
2600 浏览
提问于 2025-04-16 22:04

我已经尝试了好几天想要实现这个功能。基本上,你控制一个角色,僵尸会跟着你。
问题是,我似乎无法让僵尸跟上来!我试过用条件语句,比如说:

    if playerx > zombiex:
        zombiex=zombiex - 2
        screen.blit(zombie,(zombiex,zombiey))

但是这并没有奏效.... :/
有没有什么好主意?

2 个回答

0

首先,我不能回答你所有的问题,因为信息不够多。具体是哪里不工作呢?

其次,如果你想让僵尸跟着玩家走,你需要让它们的坐标和玩家的坐标重合,所以你需要一些像这样的代码:

if playerx > zombiex:
    zombiex = zombiex + max(zombiespeed, playerx - zombiex)
elif playerx < zombiex:
    zombiex = zombiex - max(zombiespeed, zombiex - playerx)

注意:

  • 我把 2 替换成了 zombiespeed,这个速度是在其他地方定义的,这样你将来只需要在一个地方修改速度。
  • 我使用 max() 来确保僵尸在非常靠近玩家的时候不会超过玩家的位置。
  • 你当然也要对 y 方向做同样的处理。
1

也许这就是你在找的东西。

def length(x, y):
    return (x ** 2 + y ** 2) ** .5

def norm(x, y):
    _len    = length(x, y)
    return x / _len, y / _len

class ZombieController(object):

    def __init__(self, zombie_view_range):
        self._zombs = []
        self.append = self._zombs.append
        self._range = zombie_view_range

    def NextFrame(self, player_pos):
        px, py      = player_pos
        _range      = self._range
        for zombie in self._zombs:
            x, y    = zombie.position
            dx, dy  = px - x, py - y
            _len    = length(dx, dy)
            if _len <= _range:
                speed       = zombie.speed
                direction   = norm(dx, dy)
                zombie.positon  = x + direction[0] * speed, y + direction[1] * speed

撰写回答