Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/ant/2.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 如何在播放器';s的近战武器和敌人_Python_Pygame - Fatal编程技术网

Python 如何在播放器';s的近战武器和敌人

Python 如何在播放器';s的近战武器和敌人,python,pygame,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 hold

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

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 
pygame.event.get()中事件的
:
如果event.type==pygame.MOUSEBUTTONDOWN:
如果event.button==1:#左键单击时调用事件
对于敌人中的敌人:#保存敌人实例的阵列
如果(math.sqrt(((敌方x-x)**2)+((敌方y-y)**2))<(100+reachBonus)):#使用距离forumla计算与敌方x和y位置相对应的玩家x和y值
敌方.health-=woodenSword.damageAmount#用woodenSword造成的伤害减去敌方的生命值
这个系统的问题是,我只检查玩家是否在特定范围内,所以技术上它会在敌人周围的圆形范围内工作。这将适用于类似爆炸的情况,但由于我正在研究战斗系统,玩家必须直视敌人,所以这不会真正起作用

作为可能的方法,我考虑射线追踪。我习惯了虚幻引擎,在那里你可以发送一条线跟踪,这基本上是一条看不见的线,如果它直接击中了什么东西,就会返回真。这将是一个选项,如果我投几个射线在玩家面前,看看它是否与敌人碰撞,但我没有找到如何在pygame中做,这感觉不是非常有效的解决方案,因为我可能需要发送多个射线开始。这在3d空间中也很常见——也许我玩的2d游戏可以用基础数学来代替


我能做些什么来修复我的机械装置,使它只在玩家直视敌人而不是在射程内时才起作用

看起来您正试图为pygame中已经存在的功能重新发明轮子

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

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

与其计算你的角色与每个怪物的距离,不如用鼠标点击剑击区域生成一个精灵。然后测试怪物和武器精灵之间的碰撞。如果发生碰撞,请进行损坏计算


关于光线投射,如果您试图计算某种激光或绳索或其他东西的端点,在起点和终点之间构建一个实体“东西”,并且在屏幕上生成“东西”之前需要知道终点,那么这将非常有用。对于典型的近战攻击,这是不必要的。

基于你的问题,你的标题完全偏离主题。如果你想得到答案,请编辑你的问题并修复它。您可能正在寻找非碰撞检测。对此表示抱歉。我对这种事情还不熟悉。我对标题进行了编辑,以准确反映我的情况。你不能简单地检查玩家的注视向量和玩家对敌人的方向向量之间的角度吗?例如。类似于
V=敌方位置-玩家位置;如果(长度(V),我不确定如何获得玩家的凝视向量。同样让我困惑的是,你有一个“角度”功能。那该怎么办?我觉得pygame的碰撞检测功能只适用于绘制的矩形/圆形等。我正在加载我在photoshop中制作的png。如果我错了,并且该功能适用于自定义图像,我将如何生成精灵并使用它检查是否击中了暴徒?您的精灵有一个hitbox矩形。该点击框的大小可能与图像本身的大小不同。您甚至可以放置一组点击框来制作更复杂的形状,但这会变得不必要的复杂。此选项的限制是图像和碰撞区域可能不匹配。因此,碰撞区域可能比图像大或小。这有b甚至有一个问题是从时间的黎明起就开始玩游戏。我建议您认真阅读文档并查看一些示例代码-可能来自您喜欢的github上的项目。@NoIdea-碰撞检测除了使用
rect
s外,还可以使用位掩码。这将为您提供像素级的碰撞。