如何在玩家的近战武器与敌人之间创建狭窄的碰撞检测

时间:2019-05-19 18:21:54

标签: python pygame

每当玩家在特定敌人的范围内时,玩家都可以挥剑挥舞并对其前方的敌人造成伤害。我这里有这段代码,演示了我现在使用的系统:

for event in pygame.event.get():
     if event.type == pygame.MOUSEBUTTONDOWN:
         if event.button == 1: #Event called when left click
             for enemy in enemies: #An array that holds instances of enemies 
                 if (math.sqrt( ( (enemy.x - x) **2) + ( (enemy.y - y)**2) ) < (100+reachBonus) ): #Using distance forumla to calculate player x and y values in corresondance to an enemies x and y position 
                     enemy.health -= woodenSword.damageAmount #subtracts the enemies health by the amount of damage that the woodenSword does 

该系统的问题在于,我仅检查玩家是否在特定范围内,因此从技术上讲,它将在敌人周围的循环范围内工作。这将适用于爆炸之类的事情,但是由于我正在使用战斗系统,并且玩家必须直接看向敌人,所以这实际上是行不通的。

作为一种可能的方法,我考虑进行光线追踪。我习惯了虚幻引擎,您可以在其中发出线迹,这基本上是一条不可见的线,如果直接击中某些东西,它将返回True。如果我在玩家面前投射多条光线并查看是否与敌人碰撞,这将是一个选择,但是我没有找到如何在pygame中做的事,而且这感觉不是很有效的解决方案,因为我可能需要发送多条光线到从...开始。这对于3D空间来说很常见-也许我拥有的2D游戏可以改用基本数学。

我该怎么做才能修复我的机械师,使其仅在玩家直视敌人而不仅仅是在范围内时才起作用?

1 个答案:

答案 0 :(得分:4)

您似乎正在尝试重新发明pygame中已经存在的功能的轮子。

您正在尝试确定剑是否与暴徒接触。

pygame的碰撞检测功能已经涵盖了这一点。

与其计算角色与每个暴民的接近程度,不如在鼠标单击时为剑身攻击区域生成一个精灵。然后测试小怪和武器精灵之间的碰撞。如果发生碰撞,请进行损伤计算。

https://www.pygame.org/docs/ref/sprite.html

关于光线投射,如果您要计算某种激光或绳索或其他要在起点和终点之间构造坚固的“物体”且需要了解的东西的端点,这将很有用屏幕上生成“事物”之前的终点。对于典型的近战攻击来说,这是没有必要的。