133*_*day 0 oop flash class object actionscript-3
所以我建立了不同食物的分类菜单.我有一个"类别"(按钮)类,基本上会返回一个字符串"沙拉","饮料"等.我现在有另一个类"menuItems"的类别中的项目,这处理大小,如"小","我现在的问题是,当我返回"沙拉"时,我想调用一个包含沙拉所有元素的数组,将它发送到menuItems,它将填充菜单.到目前为止,我有类别对象和菜单对象设置.我似乎无法发送类别对象返回的数据并将其传递给菜单对象.这两个都添加到舞台中,如下所示:
如果有一种方法,我可以说所有这些类添加到一个类,以便他们可以互相交谈,这将是伟大的,但我不知道如何做到这一点.
被困了几个小时,非常感谢任何帮助.
在对象之间传递数据的常见方法之一是分派自定义事件.这具有减少类之间的依赖性的优点.例如,假设您想在结构中添加"Drinks"类,如果所有类彼此互连,则可能难以更新您的应用程序.另一方面,对于事件,您可以决定创建一个新的CustomEvent或者为当前事件添加一个drink属性,那么破坏的可能性更大.
实际上,您需要一个事件调度程序,它将发送和接收事件,然后通知相关对象.
这是一个广泛的例子:
获取每个包并将它们保存在自己的文件中,为其指定带有.as扩展名的类的名称(例如:Main.as).所有文件应驻留在同一文件夹中.Main.as将是您的入口点,如果您使用的是Flash CS,那么这将是您的文档类.
花点时间检查一些关于AS3的教程,这是我经常给出的一个建议,因为它可以节省你的头痛和浪费时间来试图解决基本问题.例如,尝试Colin Mook的Lost Actionscript Weekend Video Tutorial,你应该在Adobe TV上找到它.
package
{
import flash.display.Sprite;
import flash.events.EventDispatcher;
public class Main extends Sprite
{
private var dispatcher:EventDispatcher;
private var salads:Categories;
private var menu:MenuItems;
public function Main()
{
dispatcher = new EventDispatcher();
menu = new MenuItems( dispatcher );
salads = new Categories( dispatcher );
}
}
}
******
package
{
import flash.events.Event;
public class MenuEvent extends Event
{
//Your Custom Event
public static const CATEGORY:String = "Category";
//Here I type the data property as an Object, but it could also
//be a String , depending on the type of info you need to pass
public var data:Object;
public function MenuEvent( type:String , data:Object ):void
{
super ( type );
this.data = data;
}
override public function clone():MenuEvent
{
return new MenuEvent( type , data );
}
}
******
package
{
import flash.events.EventDispatcher;
import flash.events.MouseEvent;
public class Categories
{
private var dispatcher:EventDispatcher;
public function Categories(dispatcher:EventDispatcher ):void
{
this.dispatcher = dispatcher;
//for this example, i dispatch the event here
//so you don't have to create a button...
dispatcher.dispatchEvent( new MenuEvent( MenuEvent.CATEGORY , "salads" ) );
}
private function clickHandler( event:MouseEvent ):void
{
//for instance , in the "salads" category...
dispatcher.dispatchEvent( new MenuEvent( MenuEvent.CATEGORY , "salads" ) );
}
}
}
******
package
{
import flash.events.EventDispatcher;
public class MenuItems
{
private var dispatcher:EventDispatcher;
public function MenuItems(dispatcher:EventDispatcher ):void
{
this.dispatcher = dispatcher;
dispatcher.addEventListener( MenuEvent.CATEGORY , menuEventHandler );
}
private function menuEventHandler( event:MenuEvent ):void
{
trace( event.data as String);
}
}
}
Run Code Online (Sandbox Code Playgroud)