在我正在制作的角色扮演游戏中,在主游戏循环中,我需要在任何时候检查一个生物是否在玩家(用户)的4空间范围内,以便我可以启动/调用battle_loop函数。
我有一个用于所有敌人的类Creature,它具有PosX和PosY属性。(这些坐标在初始化生物的新实例时包括在内,并且永远不会更改)。播放器也有自己的PosX和PosY变量,这些变量可以随着玩家的移动而改变。
那么,有没有办法可以检查生物的PosX值是否比玩家的PosX值多两个或两个以内,以及生物的PosY值是否比玩家的PosY值多两个或两个以内?
发布于 2014-08-16 04:22:46
您可以维护一个Creature对象列表并遍历它们。对于每个Creature,计算到播放器的距离,并相应调用battle_loop:
for creature in creatures:
if abs(creature.x - player.x) <= 2 and abs(creature.y - player.y) <= 2:
battle_loop()发布于 2014-08-16 04:23:51
只需运行一个for循环。
for creature in creatureList:然后这样做:
if (creature.PosX > self.PosX - 2 & creature.PosX < self.PosX + 2) : doSomething()对于y值,...and也是类似的。如果生物在玩家的2x和2y范围内,if语句将返回true。
发布于 2014-08-16 04:22:01
这很常见,你可能想要计算两个位置点(x,y)之间的Manhattan或euclidean距离,这取决于生物在游戏中的移动方式。
https://stackoverflow.com/questions/25333524
复制相似问题