最近在尝试做游戏的模组开发,在进行距离判断的时候遇到了一些问题
当我获得到一堆生物的ID的时候,通过ID获取到他们每个生物的坐标计算出其与玩家的距离后
我想计算出距离最近的生物,返回他们的ID
但是怎么获取到对应值出现了一点问题
这个是我目前的解决方案,但是感觉有点蠢,而且当多个生物距离相同的时候会出现bug
复制代码我尝试过另一种方案是
复制代码当我获取到这个tempList的时候[["生物ID1""距离1"],["生物ID2""距离2"]]
我就不知道该怎么处理这个temp,让我计算出最先的距离,然后返回对应的生物ID
当我获得到一堆生物的ID的时候,通过ID获取到他们每个生物的坐标计算出其与玩家的距离后
我想计算出距离最近的生物,返回他们的ID
但是怎么获取到对应值出现了一点问题
这个是我目前的解决方案,但是感觉有点蠢,而且当多个生物距离相同的时候会出现bug
-     def GetNearlyEntity(self, entity_list, player):        
 
-         player_pos = GetPos(player)              # 获取玩家坐标
 
-         dist_dict = {}
 
-         for entityId in entity_list:      
 
-             entity_pos = GetPos(entityId)        # 获取生物坐标
 
-             dist = Cala_3D_Dist(entity_pos, player_pos)    # 获取距离
 
-             dist_dict[dist] = entityId
 
- return dist_dict[min(dist_dict.keys())] # 返回ID
-     def GetNearlyEntity(self, entity_list, player):        
 
-         player_pos = GetPos(player)              # 获取玩家坐标
 
-         dist_list = []
 
-         for entityId in entity_list:      
 
-             entity_pos = GetPos(entityId)        # 获取生物坐标
 
-             dist = Cala_3D_Dist(entity_pos, player_pos)
 
-             dist_list.append(dist)
 
- temp = map(lambda x,y:[x, y],entity_list, dist_list)
我就不知道该怎么处理这个temp,让我计算出最先的距离,然后返回对应的生物ID
不能这样写吗 
复制代码
-     def GetNearlyEntity(self, entity_list, player):        
 
-         player_pos = GetPos(player)              # 获取玩家坐标
 
-         dist_min = 0
 
-         nearly_entity = None
 
-         for entityId in entity_list:      
 
-             entity_pos = GetPos(entityId)        # 获取生物坐标
 
-             dist = Cala_3D_Dist(entity_pos, player_pos)    # 获取距离
 
-             if dist < dist_min or dist_min == 0:
 
-                 dist_min = dist
 
-                 nearly_entity = entityId
 
-         return nearly_entity
 
 
xmdhs 发表于 2022-5-1 21:02
不能这样写吗
因为最近不一定是0的,这样写不行,而且这里距离没有负数
KarsonCN 发表于 2022-5-1 21:14
因为最近不一定是0的,这样写不行,而且这里距离没有负数
不太懂你在说什么,你可以在阅读一下,我认为还是很好理解的
xmdhs 发表于 2022-5-1 21:15
不太懂你在说什么,你可以在阅读一下,我认为还是很好理解的
额看懂了认真看,看懂了。但是我我感觉用min_dict == 0不太好,None应该更合适一点?然后这个好像也是只能运算单个,我想了想优化了一下解决了
-  def GetNearlyEntity(self, entity_list, player):
 
-         player_pos = create_pos(player).GetPos()
 
-         min_dist = None
 
-         victimList = []
 
-         for entityId in entity_list:
 
-             entity_pos = create_pos(entityId).GetPos()
 
-             dist = Cala_3D_Dist(entity_pos, player_pos)
 
-             if dist < min_dist or min_dist == None:
 
-                 min_dist = dist
 
-                 victimList.append(entityId)
 
- return victimList
 本帖最后由 KarsonCN 于 2022-5-1 23:53 编辑 
复制代码
终版
xmdhs 发表于 2022-5-1 21:15
不太懂你在说什么,你可以在阅读一下,我认为还是很好理解的
- def GetNearlyByEntityList(self, victimList, entityId):
 
-     entity_pos = create_pos(entityId).GetPos()
 
-     tempList = []
 
-     distList = []
 
-     for victim in victimList:
 
-         victim_pos = create_pos(victim).GetPos()
 
-         dist = Cala_3D_Dist(victim_pos, entity_pos)
 
-         distList.append(dist)
 
-     minDist = min(distList)
 
-     for i in map(lambda x, y: [x, y], victimList, distList):
 
-         if i[1] == minDist:
 
-             tempList.append(i[0])
 
- return tempList
终版