You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

动态创建闭合碰撞多边形失败,求排查解决方法

解决动态生成CollisionPolygon2D不显示填充的问题

你当前的代码存在几个关键遗漏点,导致碰撞多边形无法正确显示填充效果:

1. 未将构建的多边形数据赋值给CollisionPolygon2D

你已经完成了poly数组的构建,但没有把它绑定到collision_polygon的polygon属性上。需要在数组构建完成后添加以下代码:

collision_polygon.polygon = PackedVector2Array(poly)

注意必须将普通数组转换为PackedVector2Array类型,因为CollisionPolygon2D的polygon属性要求该类型数据。

2. 未闭合多边形

当前的poly数组首尾点并未连接,属于开放多边形,无法触发填充效果。需要在数组末尾添加第一个点,让多边形形成闭合回路:

# 在所有点添加完成后执行
poly.append(poly[0])

3. 可选:优化曲线烘焙精度

如果曲线的烘焙间隔过大,get_baked_points()返回的采样点会过于稀疏,可能导致多边形边缘不光滑甚至出现自交问题。可以通过调整曲线的烘焙间隔提升精度:

curve.bake_interval = 1.0 # 数值越小采样点越密集,可根据游戏性能需求调整

修正后的完整代码片段

# on timer tick every second after I append points to a curve   
... 
var baked = curve.get_baked_points()
var poly = []

for point in baked:
  poly.append(point)

var reversed_baked = baked.duplicate()
reversed_baked.reverse()
for point in reversed_baked:
  poly.append(point + Vector2(0, 20))

# 闭合多边形
poly.append(poly[0])
# 将数据赋值给碰撞多边形
collision_polygon.polygon = PackedVector2Array(poly)

另外,检查CollisionPolygon2D的visible属性是否开启,确保编辑器或运行时能看到填充效果;同时确认节点处于激活状态,无其他节点遮挡。

内容的提问来源于stack exchange,提问作者Lheonair

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.12 15:17:02