做起来可能非常困难和复杂,也可能非常容易,这取决于您的解决方案应该有多灵活。您首先需要设计程序的结构和解决问题的方法。
我喜欢从 API 的角度来看它应该是什么样子。我想我会创建一个这样的 GUI 元素:
var wholeGui:MyGUI = new MyGUI();
var window:IGuiElement = new GuiWindow(dataObject, skinObject);
wholeGui.addElement(window);
那么你需要什么?
1) 将管理所有 GUI 元素的对象。为什么?仅仅是因为如果用户在您的小窗口上单击“X”,您的 GUI 元素不应该被自己破坏。WholeGui 对象将管理它们并侦听任何事件,包括那些会破坏它们的事件。如果这种交互会很复杂,您可以考虑为整个Gui 对象和您的窗口对象之间的交互创建自定义事件。
2) GUI 对象的接口。这里的一些问题是 AS3 实际上没有 Sprite 的接口,你想像扩展 Sprite 一样与它进行交互。这里的解决方法是在这个接口中有一个这样的声明:
function asSprite():Sprite;
您在 GuiWindow 中的实现将如下所示:
public function asSprite():Sprite {
return this;
}
当然,您的 GuiWindow 类应该扩展 Sprite。然后,您可以通过编写示例来访问它的 Sprite 属性和方法: window.asSprite.startDrag();
该界面应该为您提供操作 GUI 元素所需的能力。
3) 你的 GUI 元素的类,在这个例子中是 GuiWindow。
4) 为您的元素注入数据的类。如果您要从某个位置动态加载数据,则需要处理无法提供数据的情况 - 但该逻辑将在您的窗口内。
5) 为您的皮肤分类 - 这样您就可以动态创建一个皮肤对象并使用它以您想要的方式创建您的窗口。
这只是需要考虑的几个想法。
PS。在创建 GuiWindow 对象之后而不是在构造函数中填充数据可能是个好主意,因为那时您将能够可视化加载过程。