【发布时间】:2012-03-08 09:16:14
【问题描述】:
我阅读了很多关于调度事件的信息,但仍然无法让它工作。我有一个类,并希望它的事件对使用该类的其他类可见。主类:
import special.proxy.ProxyStream;
public class testproxy extends Sprite
{
var textspace:TextField=new TextField();
var proxydata:*;
public function testproxy()
{
textspace.autoSize="left";
textspace.text="ready";
addChild(textspace);
try
{
proxydata=new ProxyStream();
addChild(proxydata);
proxydata.load(proxyurl_string, fileurl_string);
proxydata.addEventListener("COMPLETE", complete);
proxydata.addEventListener(Event.COMPLETE, complete);
}
catch(e:*){textspace.text=String(e);}
setTimeout(checkProgress, 2000);
}
function checkProgress(){textspace.text=proxydata.progressstate;}
function complete(){textspace.text="loaded";}
}
主类调度事件的类:
import flash.events.*;
public class ProxyStream extends Sprite {
public var progressstate:String="0";
//[Event(name="complete", type="flash.events.Event")]
[Event(name="complete", type="flash.events.Event.COMPLETE")]
private function complete(e:Event):void {
progressstate="1";
dispatchEvent(e);
dispatchEvent(new Event("COMPLETE", true, true));
//dispatchEvent(new Event(Event.COMPLETE, true, true));
//dispatchEvent(new DataEvent("COMPLETE", false, false, e.target.data));
}
}
我们可以看到,代理数据被添加到显示列表中。是的,函数完成触发,因为当我在 2 秒后检查进度状态时,它的值为 1。我尝试了许多不同的事件调度方式。我仍然无法在我的主要课程中获得此类活动。如果可能的话,我还希望能够使用此事件发送数据,而无需创建额外的自己的事件类。感谢您的帮助。
【问题讨论】:
-
在加载前尝试添加监听器
-
不确定这是否是问题所在,但 testproxy 类中的完整处理程序没有设置正确的参数(应该是
complete(event:Event)。这实际上应该导致编译器错误。) .如果您发布 ProxyStream 类的其余部分,它也可能会有所帮助。 -
尝试将 dispatchEvent 中的“COMPLETE”更改为小写。 flash.events.Event.COMPLETE == "完成"(小写)
-
完整的主类代码pastebin.com/mB6XqvkK并导入了一个pastebin.com/ZZvrrBKF 我的输出结果:0 [object Stage] 1 2 file://localhost/C:/Documents and Settings/speedy/Adobe Flash Builder 4.6/testproxy/bin-debug/testproxy.swf 3 4 5 6 8 9 字符串10 11
-
function complete(){textspace.text="loaded";} 必须有一个输入参数,即 function complete(evnt: Event){textspace.text="loaded";}
标签: actionscript-3