在flash中,我使用lineTo
在两点之间画一条线。这很好用,但我发现在较慢的计算机上,线条是锯齿状的,因为没有多少鼠标事件被触发。
我希望'平滑'线,在鼠标注册的每个点之间添加更多的点:
黑线表示结果,绿色表示我想要的。红点是实际点,绿点是插值。
我自己尝试过编码,但我似乎无法做到正确,无论如何这里是代码:
var interX:Number = lastMouseX+(lastMouseSpeed.x/2);
var interY:Number = lastMouseY+(lastMouseSpeed.y/2);
//Also tried: lastMouseX+(this.mouseX-lastMouseX)/2;
// also jittery
graphics.lineTo(interX, interY);
graphics.lineTo(this.mouseX, this.mouseY);
lastMouseSpeed.x = this.mouseX-lastMouseX;
lastMouseSpeed.y = this.mouseY-lastMouseY;
lastMouseX = this.mouseX;
lastMouseY = this.mouseY;
结果比正常结果更加锯齿状。
抱歉,我无法提供截图(由于某种原因,它将我的屏幕复制为黑色)
答案 0 :(得分:2)
您可能需要类似spline interpolation的内容,但其他方法也是可行的。
你当前的方法不起作用的原因是你想要为红点1和2之间的点做什么取决于红点3,但是你的方程式没有考虑到这一点。考虑它可以适当地考虑曲率,但它更复杂。