查看: 132|回复: 5

救救孩子吧

[复制链接]

1

主题

7

帖子

41

积分

新手上路

Rank: 1

积分
41
发表于 2021-5-21 15:11:02 | 显示全部楼层 |阅读模式
大佬们,我想写一个扇形检测区域的代码,但我想了好久也不会;
这个区域可以检测碰撞体,求大佬们给个思路,或写下代码(GD),万分感谢!!
可以不用考虑方向

回复

使用道具 举报

1

主题

7

帖子

41

积分

新手上路

Rank: 1

积分
41
 楼主| 发表于 2021-5-21 15:13:44 | 显示全部楼层
本帖最后由 sunql1991 于 2021-5-21 15:18 编辑

像这样

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

1

主题

7

帖子

41

积分

新手上路

Rank: 1

积分
41
 楼主| 发表于 2021-5-21 18:22:27 | 显示全部楼层
怎么大家都没思路吗
回复

使用道具 举报

2

主题

9

帖子

54

积分

注册会员

Rank: 2

积分
54
发表于 2021-5-22 13:51:32 | 显示全部楼层
本帖最后由 bakc 于 2021-5-22 13:59 编辑


楼主,你可以在Sprite下建一个Area2d,再在Area2d下建一个collisionShape2d,用collisionShape2d在角色前面做一个扇形面积出来


因为父节点动的时候默认底下的子节点会一起动,于是Area2d和collisionShape2d都随着动,扇形面积也就动起来了area2d的信号里有检测进入物体的,连接一下就ok了








不过这样子扇形面积始终只能朝向一个方向,如果楼主你要做俯视角这样的游戏,要让扇形面积随着角色的面向而改变


可以用look_at()和rotation_degrees


底下这行代码:
motion是我定义的速度
  1. motion.x *= 2000
  2. motion.y *= 2000
  3. $Area2D.look_at(motion)
  4. $Area2D/CollisionShape2D.rotation_degrees = -$Area2D.rotation_degrees
复制代码


可以让角色面向哪里就转到哪里,如果想要更好的精确度,可以把motion.x和motion.y乘以的值放大,如果要更精确,可以用motion.normalized把坐标运动范围变成一个圆


回复

使用道具 举报

0

主题

1

帖子

22

积分

新手上路

Rank: 1

积分
22
发表于 2021-6-5 19:09:29 | 显示全部楼层
可以用多边形碰撞形状进行扇形的生成用多边形逼近扇形
圆有标准方程(x-a)^2+(y-b)^2=R^2
为了得到某点与x轴成θ角度的点坐标 可以使用圆的参数方程(中学知识)
x=a + R*cosθ   y=b + R*sinθ



代码文本 访问这里 Ubuntu Pastebin
以防上述连接失效贴上图 出于篇幅以下不重要的代码隐藏了如几个内容相似的set函数
主方法是create关键代码也就几行 其他的都是加快在编辑器内调试过程中的代码




本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复

使用道具 举报

1

主题

7

帖子

41

积分

新手上路

Rank: 1

积分
41
 楼主| 发表于 2021-6-10 10:05:36 | 显示全部楼层
生活 发表于 2021-6-5 19:09
可以用多边形碰撞形状进行扇形的生成用多边形逼近扇形
圆有标准方程(x-a)^2+(y-b)^2=R^2
为了得到某点与x轴 ...

大佬牛逼,赞
回复

使用道具 举报

高级模式
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Godot中文社区

GMT+8, 2021-6-18 19:37 , Processed in 0.474307 second(s), 21 queries .

Powered by Discuz! X3.4

Copyright © 2020, Godoter.top

快速回复 返回顶部 返回列表