黑之翅膀吧 关注:160贴子:1,265
  • 0回复贴,共1

【Godot4】扇形检测范围原理

只看楼主收藏回复


已知扇形为圆的一部分,圆的半径=扇形的边长。
多边形Polygon2D系列,可以实现扇形。
首先以Vector2.Zero ,【坐标x0 y0 为第一个点。】
然后设定半径的长度,【设置坐标X=半径长度 Y=0。为第2个点】(既Vector(视野距离,0))
然后用Vector向量中的rotated方法,获取当前坐标被旋转一定角度后的新坐标。
Vector2 rotated(angle: float) const
返回将这个向量旋转 angle 的结果(单位为弧度)。另见 @GlobalScope.deg_to_rad()。
#------
新的向量 = Vector(半径,0).rotated(弧度)
#------
旋转后的【新向量 是第3个点】
此时我们已经得到3个顶点,Polygon2D就可以连成一个三角形。
扇形其实就是由多个三角形组成,现在我们用for循环去建立更多旋转一定弧度的向量位置,就可以实现扇形。
而视野的角度,就是在弧度那设置的。弧度转角度的方法名是:deg_to_rad(角度)
角度总共有360度,所以 for i in 角度:循环出来的点就是一个扇形。
由于扇形是从0°开始展开的,所以可以根据怪物的默认朝向,将Polygon2D的旋转角度 = 视野角度的一半
此时扇形就会朝向X的正方向,此时自身的转向就会带动视野旋转了。
由于是生成的,所以不必太担心性能问题。
最后:
如果角度很大,如180度,会创建180个顶点,如果不喜欢弧度太光滑,想减少一些顶点的话:
在for循环下面加入判断: if i % 10 == 0: 这可以限制只在每个十进制中绘制一个顶点,这是取余的方法。
if i % 2 == 0: 获取的i是双数,其中2个数有一个被整除。余数为0
%是求余运算符。
if i % 10 == 0: 获取的i是每10个数中有一个被整除。余数为0


IP属地:广东1楼2023-08-30 06:37回复