0

たとえばcurveToを使用して描画された、パス内のカーブやアンカーを制御する方法を探していました。

基本的に、私がこのようなものを描くとき:

thingy.graphics.curveTo(220,100,150,140);
thingy.graphics.curveTo(60,200,50,300);
thingy.graphics.curveTo(40,495,250,500);
thingy.graphics.curveTo(460,495,450,300);

関数で何かを行うとき(たとえば、アンカーポイントをドラッグするとき)、これらの曲線を動的に変更したいと思います。つまり、次のように、特定の曲線の座標を更新したいだけです。

上書き

thingy.graphics.curveTo(220,100,150,140);

thingy.graphics.curveTo(120,100,250,670);

また

thingy.graphics.curveTo(220,100,mouseX,mouseY);

例えば。

私の質問に対する答えをグーグルで探している間、私は非常に複雑な式を含む長い記事しか見つけることができませんでしたが、ほとんどの場合、AS3コードを少しも伴わなかったのです。私は数学があまり得意ではないので、これを行う方法を示すだけの簡単な答えを好みます。

あるいは、Flash IDEで描画された曲線を制御する方がはるかに簡単であれば、気にしないでください。

4

1 に答える 1

0

これが私がそれにアプローチする方法です。

private var curveVals:Array = [];

private var thingy:Sprite;

public function constructor() {
   thingy = new Sprite();

   var obj:Object = {cx:220,cy:100,ax:150,ay:140}
   curveVals.push(obj);
   thingy.graphics.curveTo(220,100,150,140);

   obj = {cx:60,cy:200,ax:50,ay:300}
   curVals.push(obj);
   thingy.graphics.curveTo(60,200,50,300);
}

private function storeVals(cx,cy,ax,ay,index):void {
    var obj:Object = {cx:cx,cy:cy,ax:ax,ay:ay};
    curveVal[index] = obj;
    redraw();
}

private function redraw():void {
    thingy.graphics.clear();
    // loop through values and redraw
}
于 2013-01-15T17:13:12.693 に答える