我不是大佬。我说一下我来做的话会是什么思路。
首先是弄一个canvas item作为画板(但是如果你画出来的线需要有别的功能,比如能进行物理碰撞,那你应该用更复杂的节点来做)。
然后给canvas item一个数组array,其中每个元素都是一个有两个二维向量的数组,
比如说,有(0,0)指向(1,1)、(0,0)指向(3,4)、(1,1)指向(3,4)这三条线:
var Lines : array
Lines = [
[Vector2(0,0),Vector2(1,1)],
[Vector2(0,0),Vector2(3,4)],
[Vector2(1,1),Vector2(3,4)],
]
这样这个数组就把所有已有的线段的端点都记录下来了。
————————
接下来,通过raycast或者直接获取鼠标点击位置,给鼠标点击处生成端点,把端点位置append到Lines数组的数组里;
想要处理拖拽,还得把鼠标点击给添加到“项目设置”的“键位映射”里,
我有一段处理拖拽的函数是这么写的(键位映射是“ui_drag”):
dragging是一个bool变量,drag_pos是一个二维向量,记录自上一帧后鼠标的位置偏移量;以防万一需要在_process的最后把drag_pos清零。
————————
最后就是有关如何绘制了。太简单了就懒得讲了。
如果由于状态或其他更改而需要重新绘制,只需在同一节点中调用 CanvasItem.update() 就会发生新的_draw()调用。
在每次拖拽旧线段或者生成新线段时,记得要update()