Python/Pygame 让一个对象跟随另一个对象
我已经尝试了好几天想要实现这个功能。基本上,你控制一个角色,僵尸会跟着你。
问题是,我似乎无法让僵尸跟上来!我试过用条件语句,比如说:
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