0

元に戻す機能とやり直し機能を作成する方法を誰か教えてもらえますか? これが私の現在のアクション スクリプトです。私はそれを行う方法を理解できず、いくつかのWebサイトでいくつかの例を見ています.アクションスクリプトは理解するのが長すぎます. Plsは、私がこれを機能させる簡単な方法を示しています..

悪い文法でごめんなさい...

var drawingLine:Shape=new Shape();
board.addChild(drawingLine);

var doDraw:Boolean=false;

var lineSize:Number=7;

var activeColor:uint = 0x000000;

function PencilTool(event:MouseEvent):void{
board.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown);
board.addEventListener(MouseEvent.MOUSE_UP, MouseUp);
}


function MouseDown(e:MouseEvent):void{

doDraw=true;

drawingLine.graphics.moveTo(drawingLine.mouseX, drawingLine.mouseY);
drawingLine.graphics.lineStyle(lineSize, activeColor);
board.addEventListener(MouseEvent.MOUSE_MOVE, MouseMove);

}

function MouseMove(e:MouseEvent):void{
        var curX:Number=drawingLine.mouseX;
        var curY:Number=drawingLine.mouseY;

        if(doDraw && checkCoords(curX,curY)){

            if(active=="Line"){

                    clearTemp();

            temporaryDrawing.graphics.lineTo(curX,curY);

            }else{

            drawingLine.graphics.lineTo(curX,curY);

            }


            e.updateAfterEvent();
            }
}

function MouseUp(event:MouseEvent):void{

doDraw=false;

}


btn_Pencil.addEventListener(MouseEvent.MOUSE_UP, PencilTool);
4

2 に答える 2

0

配列またはベクトルをクリックした後にすべての動きを保存できます。元に戻す場合は、最後の動きを除く配列内のすべての動きを再描画します。

このようなものである可能性があります:

var drawingLine:Shape=new Shape();
board.addChild(drawingLine);

// MOVEMENTS INFORMATION
var movements:Array = new Array();
var doDraw:Boolean = false;
var cacheIndex:int = 0;

var lineSize:Number=7;

var activeColor:uint = 0x000000;

function PencilTool(event:MouseEvent):void{
board.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown);
board.addEventListener(MouseEvent.MOUSE_UP, MouseUp);
}


function MouseDown(e:MouseEvent):void{

function PencilTool(event:MouseEvent):void{
board.addEventListener(MouseEvent.MOUSE_DOWN, MouseDown);
board.addEventListener(MouseEvent.MOUSE_UP, MouseUp);
}


function MouseDown(e:MouseEvent):void{

    doDraw=true;

    drawingLine.graphics.moveTo(drawingLine.mouseX, drawingLine.mouseY);
    drawingLine.graphics.lineStyle(lineSize, activeColor);
    board.addEventListener(MouseEvent.MOUSE_MOVE, MouseMove);
    lastTracing = {
        mainPoint: {
            x:drawingLine.mouseX, 
            y:drawingLine.mouseY
        }, 
        lineSize: lineSize, 
        activeColor:activeColor, 
        points:new Array()
    }
    cacheIndex = 0;
    movements.splice(movements.length - cacheIndex, cacheIndex);
    movements.push(lastTracing );

}

function MouseMove(e:MouseEvent):void{
    var curX:Number=drawingLine.mouseX;
    var curY:Number=drawingLine.mouseY;

    if(doDraw && checkCoords(curX,curY)){
        if(active=="Line"){

            clearTemp();

            temporaryDrawing.graphics.lineTo(curX,curY);

        }else{

            drawingLine.graphics.lineTo(curX,curY);
            lastTracing.points.push({x:curX, y:curY});

        }


            e.updateAfterEvent();
    }
}

function MouseUp(event:MouseEvent):void{

doDraw=false;

}
function undoFunction(event:MouseEvent=null):void {
    if(cacheIndex+1 <= movements.length){
        cacheIndex++;
    }
    drawCache();
}
function redoFunction(event:MouseEvent = null):void {
    if(cacheIndex-1 >= 0){
        cacheIndex--;
    }
    drawCache();
}
function drawCache():void {
    for(var i:uint=0;i<(movements.length-cacheIndex);i++){
         var tracingInfo:Object = movements[i];

         drawingLine.graphics.clear();
         drawingLine.graphics.moveTo(tracingInfo.mainPoint.x, tracingInfo.mainPoint.y);
         drawingLine.graphics.lineStyle(tracingInfo.lineSize, tracingInfo.activeColor);

         for(var j:uint=0;j<tracingInfo.points.length;j++){
              drawingLine.graphics.lineTo(tracingInfo.points[j].x,tracingInfo.points[j].y);
         }
    }
}

btn_Pencil.addEventListener(MouseEvent.MOUSE_UP, PencilTool);
于 2013-02-11T21:56:36.930 に答える
0

this、o 2つのグラフィックを使用することは、進むべき道ではありません

私がこれに取り組む方法は、lineInfoクラスを作成し(行のみをどのように使用しているかを確認する)、開始点、終了点、lineColour、lineWidth、およびlineAlphaの情報を取得することです。

次に、配列またはVectorを作成し、新しいLineInfoクラスを入力して、グラフィックを線で更新します。元に戻す必要がある場合は、最後の項目のuse値をfalseに設定し、配列の命令からグラフィックを再描画できます。省略すべき(後ろから数えて)アクションの数を追跡する取り消しステップ整数を作成します。

パフォーマンスを向上させるために、最大25の命令を作成し、取り消しリストにない項目をキャッシュするグラフィックを作成できます。

于 2013-02-11T21:57:07.760 に答える