package com
{
import flashx.undo.IOperation;
public class UndoOperation implements IOperation
{
private var _previousX:Number = 0;
private var _previousY:Number = 0;
private var _previousObj:Object = new Object();
private var _currentX:Number = 0;
private var _currentY:Number = 0;
private var _currentObj:Object = new Object();
private var _shape:Object = new Object();
public function TransformOperation(currentObj:Object,previousObj:Object,previousX:Number, previousY:Number, currentX:Number, currentY:Number)
{
_previousX = previousX;
_previousY = previousY;
_previousObj = previousObj;
_currentX = currentX;
_currentY = currentY;
_currentObj = currentObj;
_shape = _currentObj;
trace('Transform _previousX: '+ _previousX +' _previousY: ' +_previousY+' _currentObj '+_currentObj+' _shape '+_shape);
trace('trans _currentX '+ _currentX +' '+'_currentY '+ _currentY);
}
public function performUndo():void
{
_shape = _currentObj;
//trace('_shape.x '+_shape.x+" _shape.y "+_shape.y);
_shape.x = _previousX;
_shape.y = _previousY;
//trace(_previousX +' '+ _previousY +' '+ _previousWidth +' '+ _previousHeight +' '+ _previousScaleX +' '+ _previousScaleY +' '+ _previousRotation);
//trace('_shape.x '+_shape.x+" _shape.y "+_shape.y);
//trace('_currentX '+ _currentX +' '+'_currentY '+ _currentY);
}
public function performRedo():void
{
_shape.x = _currentX;
_shape.y = _currentY;
trace(_currentX+' '+ _currentY);
}
}
}
이 내 사용자 정의 클래스 afor가 취소하고 무대에 여러 개체를 다시 실행합니다. 실행 취소 및 다시 실행에 사용할 수있는 다른 패턴이 있지만 나에게 이것은 실행 취소 및 다시 실행을위한 간단한 방법입니다. 나는 완벽하게 성공적으로 이것을 내 프로젝트에 구현했다.
이 클래스는 클래스를
import flashx.undo.UndoManager;
을 가져 사용하고 그 후 그
public static var _undo:UndoManager=new UndoManager();
public static var _redo:UndoManager=new UndoManager();
public static var PrevX:Number=0;
public static var PrevY:Number=0;
var operation:TransformOperation = new TransformOperation(this,this,PrevX,PrevY,this.x,this.y);
_undo.pushUndo(operation);
후 취소에 대한 클릭 이벤트를 생성하고 다시 실행하려면,이 작품을
public static function Undo(e:MouseEvent):void
{
_redo.pushRedo(_undo.peekUndo());
_undo.undo();
if(_undo.peekUndo()==null)
{
PlayerPosition.getClass.getChildByName("toolbar_mc").getChildByName("undo_mc").removeEventListener(MouseEvent.CLICK,Undo);
}
PlayerPosition.getClass.getChildByName("toolbar_mc").getChildByName("redo_mc").addEventListener(MouseEvent.CLICK,Redo);
}
public static function Redo(e:MouseEvent):void
{
_undo.pushUndo(_redo.peekRedo());
_redo.redo();
if(_redo.peekRedo()==null)
{ PlayerPosition.getClass.getChildByName("toolbar_mc").getChildByName("redo_mc").removeEventListener(MouseEvent.CLICK,Redo);
}
PlayerPosition.getClass.getChildByName("toolbar_mc").getChildByName("undo_mc").addEventListener(MouseEvent.CLICK,Undo);
}
을 나를 위해 좋아 ... 다른 사람들에게도 도움이되기를 바랍니다 ... :)
여러 객체에 대해 실행 취소 및 다시 실행을 구현하는 방법은 무엇입니까? as3에서 제 3 자 클래스를 사용할 수 있습니까? –