gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-28 22:11:01 24 4
gpt4 key购买 nike

只要玩家处于特定敌人的射程内,玩家就可以挥动剑并对面前的敌人造成伤害。我这里有这段代码,它演示了我现在拥有的系统:

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

这个系统的问题是我只检查玩家是否在特定范围内,所以从技术上讲它会在敌人周围的圆形范围内工作。这适用于爆炸之类的东西,但由于我正在开发一个战斗系统并且玩家必须直视敌人,所以这实际上行不通。

作为可能的方法,我考虑了光线追踪。我习惯了 Unreal Engine,在那里你可以发出一条线迹,这基本上是一条不可见的线,如果它直接碰到什么东西就会返回 True。如果我在玩家面前转换几条射线并查看它是否与敌人发生碰撞,这将是一个选项,但我没有在 pygame 中找到如何做并且感觉不是很有效的解决方案,因为我可能需要发送多条射线从...开始。这对于 3d 空间也很常见 - 也许我的 2d 游戏可以用基础数学代替。

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

最佳答案

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

你正试图确定剑是否与暴民接触。

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

不是计算您的角色与每个暴民的距离,而是在鼠标点击时为剑攻击区域生成一个 Sprite 。然后测试暴民和武器 Sprite 之间的碰撞。如果发生碰撞,则进行损伤计算。

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

关于光线转换,如果您正在尝试计算某种激光或绳索或其他您正在起点和终点之间构建实体“事物”并且需要知道的东西的端点,这将很有用在屏幕上生成“事物”之前的终点。对于典型的近战攻击,没有必要。

关于python - 如何在玩家的近战武器和敌人之间创建狭窄的碰撞检测,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56210758/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com