2d - 我可以在 Godot 中进行半圆碰撞吗?
问题描述
我在 Godot 中制作了一个半圆形的 2D 形状。现在我试图给它适当的碰撞。到目前为止,我还没有找到办法做到这一点。CollisionShape2D 节点只允许简单的形状,如圆形和矩形,而 CollisionPolygon2D 形状不允许我制作我需要的弯曲形状。有什么办法可以得到正确的碰撞吗?
解决方案
我不熟悉执行此操作的内置函数。
但是,您可以做两件事:
- 使用 CollisionPolygon2D 近似圆形。这很简单并且会起作用。但是,可能效率不高。
- 您覆盖对象的碰撞方法。这也很简单:
假设它是 head_dir 方向的半圆。简单地:
dir := head_dir
position := this object position
circRadius := semi-circle radius
otherPos := other object position
inside = false
if(dotProduct(dir, otherPos) >= 0):
inside = true
if(inside):
if(norm(otherPos - position) > radius)
inside = false
return inside
第二种方法将为您提供您正在寻找的确切碰撞。您只需要更新 head_dir。
推荐阅读
- javascript - 嵌套 event.subscribe 解决方案
- python - r中的递归关系程序
- jupyter-notebook - 在 Jupyter 中隐藏单元格
- android - 如何在微调器下拉菜单和选定项目中设置不同的文本?
- python - 如何在 JupyterLab 中保存笔记本的当前状态
- python - 使用python通过websocket连接到api
- c# - Serilog LogContext.PushProperty 不工作
- python - 在python中用子类继承正确属性的问题
- reactjs - 使用useContext() 防止所有组件中的状态项发生变化?
- google-colaboratory - 使用 reg exp 的 Google Colab 笔记本查找和替换 (Ctrl + H)。捕获组反向引用是否适用于替换?