Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/356.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python RPG:查找玩家是否有敌人';s范围_Python_Coordinates - Fatal编程技术网

Python RPG:查找玩家是否有敌人';s范围

Python RPG:查找玩家是否有敌人';s范围,python,coordinates,Python,Coordinates,在我正在制作的RPG中,在主游戏循环中,我需要检查生物是否在玩家(用户)的4格范围内,以便我可以启动/调用battle\u循环功能 我有一个类生物,用于所有敌人,它有属性PosX和PosY。(这些坐标在初始化新的生物实例时包括在内,并且永远不会更改)。玩家也有自己的PosX和PosY变量,当玩家移动时可以改变 那么,有没有一种方法可以检查生物的PosX值的任何实例是否比玩家的PosX值小两个或多两个,以及生物的PosY值的任何实例是否比玩家的PosY值小两个或多两个?这很常见,您可能需要计算两个

在我正在制作的RPG中,在主游戏循环中,我需要检查生物是否在玩家(用户)的4格范围内,以便我可以启动/调用
battle\u循环
功能

我有一个类
生物
,用于所有敌人,它有属性
PosX
PosY
。(这些坐标在初始化新的生物实例时包括在内,并且永远不会更改)。玩家也有自己的PosX和PosY变量,当玩家移动时可以改变


那么,有没有一种方法可以检查生物的PosX值的任何实例是否比玩家的PosX值小两个或多两个,以及生物的PosY值的任何实例是否比玩家的PosY值小两个或多两个?

这很常见,您可能需要计算两个位置点(x,y)之间的距离或距离,具体取决于生物在游戏中的移动方式。

您可以维护一个
生物
对象列表,并在其中循环。对于每个
生物
,计算与玩家的距离,并相应地调用
战斗循环

for creature in creatures:
    if abs(creature.x - player.x) <= 2 and abs(creature.y - player.y) <= 2:
        battle_loop()
对于生物中的生物:
如果abs(生物.x-player.x)只需运行一个for循环

for creature in creatureList:
然后像这样做:

if (creature.PosX > self.PosX - 2 & creature.PosX < self.PosX + 2) : doSomething()
if(biote.PosX>self.PosX-2&biote.PosX
…y值也有类似的值。如果生物距离玩家的距离在2 x和2 y范围内,if语句将返回true。

你想要2D距离(
sqrt(dx**2+dy**2)
)还是曼哈顿距离(
dx+dy
)或其他指标?
如果玩家.x-2