我想在UI组件上处理多个操作(按钮,文本字段,swfs,自定义对象等)
在缩放,倾斜,颜色,旋转等方面也可以保存它们。之前的行动已经完成
使用单个工具和单个mxml文件,但现在该工具被分成不同的工具。
想知道我如何设计/使用类似Toolmanager类的东西来处理动作等?
另外棘手的部分是某些对象可以为它们定义更多操作。 就像'object1'有3个可以对它执行的操作而'object2'有5个操作定义在它上面。
我们正在使用MVC设计模式,但没有这样的框架。
可以使用哪些不同的设计模式来执行此操作?
修改
更确切地说,我希望以AS3 OO的方式实现这一点。
该应用程序类似于绘图应用程序,它支持添加各种图像,文本,音频,swfs等。一个添加的用户可以执行对象的各种操作。
添加颜色,缩放倾斜,旋转等等和自定义效果,然后将绘图导出为PNG.Likewise一些适用于文本的效果不适用于图像
反之亦然。并且一些影响可能是常见的。
有什么想法吗?
答案 0 :(得分:1)
可能你可以拥有一个工具栏,工具(继承自公共基础)和某种属性面板,这些对象可以从一个管理器类访问,它将它们包装在一起并使一些变量可供所有类访问。 您可能希望在管理器类中使用选择数组或向量,并使用选择工具来操作此集合
喜欢(在经理中)
protected var _selection:Vector.<EditableBase> = new Vector.<EditableBase>();
public function get selection() { return _selection;}
以及有关editbase扩展程序及其可用工具的集合。 每次选择工具更新选择集合(可能从选择工具的onMouseUp方法调用管理器上的方法)时,您可以更新工具栏以显示当前选择的适当工具
(经理)
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东西在这里,像闪存或东西} 这是javascript但这个概念也可以在这里应用
答案 1 :(得分:0)
也许您可以通过在MVC实现中创建一些额外的类来使用策略设计模式
http://en.wikipedia.org/wiki/Strategy_pattern
算法,检查此工具的图像: http://www.senocular.com/demo/TransformToolAS3/TransformTool.html
再见! :)