我想在UI组件上处理多个操作(按钮,文本字段,swfs,自定义对象等)
像缩放,倾斜,颜色,旋转等,并保存它们。之前的动作已经完成
使用单个工具和单个MXML文件,但现在该工具被分成不同的工具。
想知道我如何设计/使用工具管理器类来处理动作等?
还有一个棘手的部分是,一些对象可以为它们定义更多的操作。就像'object1'有3个操作可以在它上面执行,'object2'有5个操作定义在它上面。
我们正在使用MVC设计模式,但没有框架。
有哪些不同的设计模式可以用来做到这一点?
编辑:
更准确地说,我想在as300方式实现这一点。该应用程序类似于绘图应用程序,支持添加各种图像,文本,音频,swfs等。添加的用户可以对对象执行各种操作,例如添加颜色,缩放歪斜,旋转等和自定义效果,之后导出绘图为PNG。同样,一些适用于文本的效果不适用于图像反之亦然。有些影响可能是常见的。
任何想法?
也许你可以有一个工具栏,工具(从公共基继承),和某种类型的属性面板,这些对象可以从一个管理器类,包装在一起,使一些变量对所有类访问。可能需要在管理器类中使用选择数组或向量,并使用选择工具来操作该集合
like (in the manager)
protected var _selection:Vector.<EditableBase> = new Vector.<EditableBase>();
public function get selection() { return _selection;}
和一个关于编辑库扩展及其可用工具的集合。每次选择工具更新选择集合时(可能从选择工具的onMouseUp方法调用manager上的方法),您都可以更新工具栏以显示当前选择的适当工具
(经理)
protected var _ToolsByType:Object (or Dictionary) = {"EditableAudio": ["toolA", "toolB", etc]};
protected var _defaultSet:Array = ["toolA", "toolB"];
public function onSelectionChangedCallback():void
{
var toolsToDisplay:Array = _defaultSet;
if(_selection.length == 1)
{
//not actual syntax
var type:String = getQualifiedClassName(_selection[0]);
if(type in _ToolsByType) toolsToDisplay = _ToolsByType[type];
}
myToolBar.showSet(toolsToDisplay);
}
工具的祖先应该看起来像这样:
public class ToolBase
{
protected var _manager:ToolManager;
function ToolBase(manager:ToolManager)//and probably a bunch of other params as well
{
_manager = manager;
}
function onSelect()
{
//you can manipulate the properties panel here
}
function onDeSelect()...
function onMouseDown(mouseData:event/whateverWrapperYouHaveCreated)...
function onMouseMove...
function onMouseUp...
}
等等:)有点直截了当。查看photoshop插件教程,或者谷歌"扩展{任何adobe的东西,比如flash之类的}"这就是javascript,但是这个概念也可以应用到这里
也许你可以通过在MVC实现中创建一些额外的类来使用策略设计模式
http://en.wikipedia.org/wiki/Strategy_pattern算法,检查这个工具的图像:http://www.senocular.com/demo/TransformToolAS3/TransformTool.html
再见!:)