2013-02-11 51 views
0

任何人都可以告訴我如何使撤消和重做功能?所以這是我目前的動作腳本。我不知道如何做到這一點,我看到一些網站的例子,行動腳本是要長期站下。 PLS展示一個簡單的辦法,我可以使這項工作..繪製應用程序撤銷和重做功能動作腳本3

抱歉語法錯誤...

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); 

回答

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); 
+0

什麼值劑量變量lastTracing hold ??? – 2013-02-12 04:26:41

+0

lastTracing有最後一次平局的信息 – cralph 2013-02-12 14:57:03

0

此,o使用雙顯卡切換,不會去

我想辦法,這是通過創建一個lineInfo類的方式的方式(看怎麼樣您只使用線),並具有起點,終點,lineColour,lineWidth和lineAlpha的信息。

然後創建一個數組或Vector,並用一個新的LineInfo類填充它,並用該行更新圖形。如果需要撤消,可以將最後一項use值設置爲false,並重新繪製陣列指令中的圖形。創建一個撤消步驟整數,用於跟蹤應忽略多少(從後面開始計數)操作。

爲了提高性能,最多可以創建25條指令,並創建一個圖形來緩存不在撤消列表中的項目。