Actionscript 3 as3 addEventListner在另一个类中的函数上
我有一个类在另一个类中调用函数。我想知道 如果我们可以添加一个事件侦听器,以了解该函数是否已启动并已完成等 以下是代码的相关部分Actionscript 3 as3 addEventListner在另一个类中的函数上,actionscript-3,function,class,addeventlistener,Actionscript 3,Function,Class,Addeventlistener,我有一个类在另一个类中调用函数。我想知道 如果我们可以添加一个事件侦听器,以了解该函数是否已启动并已完成等 以下是代码的相关部分 myMC = new pictures(); addChild(myMC); myMC.loadImages("Joyful",1) // Add Event Listener here to let me know loadImages was called and worked. 如您所见,函数名为loadImages(),它位于名为pictures.As的
myMC = new pictures();
addChild(myMC);
myMC.loadImages("Joyful",1)
// Add Event Listener here to let me know loadImages was called and worked.
如您所见,函数名为loadImages(),它位于名为pictures.As的类中
我可以添加一个事件侦听器吗
这是一个新问题。我正在使用类似的方法,我使用了下面的示例,但它不起作用。我是不是错过了什么重要的东西?我只是展示了相关的功能,而不是我的整个脚本
主类
包裹
{
}//端包
viewLanguages.as
包com.views
package com.views
{
import flash.display.MovieClip;
import flash.filesystem.File;
import com.roundFlag;
import flash.events.*;
import flash.display.*;
public class viewLanguages extends MovieClip
{
var Flag:MovieClip;
//public static const FLAGS_LOADED:String = "flagsLoaded";
public function viewLanguages()
{
getLang();
}
function numCheck(num:int):Boolean
{
return (num % 2 != 0);
}
/// Get for App Opening
public function getLang()
{
/// When Live
var folderLanguages:File = File.applicationStorageDirectory.resolvePath("Languages");
var availLang = folderLanguages.getDirectoryListing();
var Lang = new Array();
var LangPath = new Array();
var fl:int = 0;
for (var i:uint = 0; i < availLang.length; i++)
{
if (availLang[i].isDirectory)
{
//flag = new Loader();
//flag.load(new URLRequest(File.applicationStorageDirectory.url + "Languages/" + Lang[i] + "/roundFlag.png"));
Lang.push(availLang[i].name);
LangPath.push(availLang[i].nativePath);
Flag = new roundFlag(availLang[i].name);
Flag.name = availLang[i].name;
if (numCheck(i)==false)
{
Flag.y = fl;
Flag.x = 0;
}
else
{
Flag.y = fl;
Flag.x = Flag.width + 33;
fl = fl + Flag.height + 33;
}
Flag.btext.text = availLang[i].name;
addChild(Flag);
trace(availLang[i].nativePath);// gets the name
trace(availLang[i].name);
}
}
trace("Get Lang Called");
dispatchEvent(new Event("MyEvent"));
}
}
}
package.com.views
{
导入flash.display.MovieClip;
导入flash.filesystem.File;
导入com.roundFlag;
导入flash.events.*;
导入flash.display.*;
公共类viewLanguages扩展了MovieClip
{
var标志:MovieClip;
//加载的公共静态常量标志:String=“flagsLoaded”;
公共函数viewLanguages()
{
getLang();
}
函数numCheck(num:int):布尔值
{
返回(数值%2!=0);
}
///获取应用程序的打开时间
公共函数getLang()
{
///活着的时候
var folderLanguages:File=File.applicationStorageDirectory.resolvePath(“语言”);
var availlanguage=folderLanguages.getDirectoryListing();
var Lang=新数组();
var LangPath=新数组();
var-fl:int=0;
对于(变量i:uint=0;i
是的,你可以。考虑到您正在将剪辑添加到显示列表中,我假设它扩展了Movieclip或Sprite,两者都扩展了EventDispatcher。在pictures类中,您可以简单地使用dispatchEvent(新事件(“MyEvent”);
来分派事件。然后您可以添加myMC.addEventListener(“MyEvent”,eventHandler”);
来对其作出反应
您也不应该对我上面写的事件使用字符串。如果您在pictures类中声明了一个公共静态常量IMAGES\u LOADED:String=“imagesLoaded”
,则会更好。然后您应该通过调度和侦听来使用此常量
编辑:这里是常量的外观:
//your class
package {
import flash.events.Event;
import flash.display.Sprite;
public class Pictures extends Sprite {
public static const IMAGES_LOADED:String = "imagesLoaded";
public function Pictures() {
}
public function onAllImagesLoaded():void {
dispatchEvent(new Event(IMAGES_LOADED));
}
//rest of your methods
}
}
//you would call it like this:
var myMc:Pictures = new Pictures();
myMc.addEventListener(Pictures.IMAGES_LOADED, onImagesLoaded);
myMc.loadImages();
function onImagesLoaded(e:Event):void {
//...etc
}
您必须创建自定义事件类才能使其工作。例如:
package com.some
{
import flash.events.Event;
public class SomeEvent extends Event
{
// Loading events
public static const MAINDATA_LOADING:String = "onMainDataLoading";
// Other event
public static const SOME_LOADING:String = "onSomeLoading";
public var params:Object;
public function SomeEvent($type:String, $params:Object, $bubbles:Boolean = false, $cancelable:Boolean = false)
{
super($type, $bubbles, $cancelable);
this.params = $params;
}
public override function clone():Event
{
return new SomeEvent(type, this.params, bubbles, cancelable);
}
}
}
在想要的类(图片)中添加事件分派,并将想要的参数传递给事件(此或任何其他)
处理事件侦听:
var myMc:Pictures = new Pictures();
myMc.addEventListener(SomeEvent.IMAGES_LOADED, onImagesLoaded);
myMc.loadImages();
function onImagesLoaded(e:SomeEvent):void {
// handle event.
var picts:Pictures = (e.params as Pictures);
}
你能举一个你建议的第二个选项的例子吗?使用static const等?太棒了,我在一个例子中让它工作了,但在上面的一个例子中它没有调用。关于为什么不这样做,有什么想法吗?感谢你在没有看到你的代码的情况下很难说。确保你的类扩展了EventDispatcher(或者扩展了扩展了EventDispatcher的某个类)或者实现IEventDispatcher接口。还要确保您的dispatchEvent实际触发-在它之前/之后放置跟踪语句并检查输出。好的,我发布了完整的代码。我想我之前发布了重要的内容,但现在是完整的代码。要筛选的内容很多,但我希望您能找到我之前发布的主要函数。我可能是m可能像您建议的那样取消导入。仅通过读取代码很难看到代码中发生了什么,但您正在从viewLanguages的构造函数中调度事件(您正在调用其中的getLang()来调度事件)。如果您创建它的新实例,它会立即分派事件而不实际侦听它:var vl:viewLanguages=new viewLanguages();vl.addEventListener(…)->构造函数会在调用addEventListener之前触发事件。这不是问题吗?关于这个XML问题有什么想法吗?真让我烦透了!
dispatchEvent(new SomeEvent(SomeEvent.IMAGES_LOADED, this));
var myMc:Pictures = new Pictures();
myMc.addEventListener(SomeEvent.IMAGES_LOADED, onImagesLoaded);
myMc.loadImages();
function onImagesLoaded(e:SomeEvent):void {
// handle event.
var picts:Pictures = (e.params as Pictures);
}