![](/img/trans.png)
[英]How to catch input events from USB joysticks in AS3 (Adobe AIR)?
[英]AS3 for Air events issues
我在解决为什么在从另一个函数中调用函数时某些事件不会触发时遇到了一些问题。
这是发生的事情,我无法弄清楚原因:
当应用程序存储目录中没有test.xml文件时,writecamfile()会执行,但似乎oncomplete()函数永远不会触发。 预加载器仍然可见,跟踪不起作用。
如果文件存在,readcamfile()触发就好了,oncomplete会隐藏预加载器并返回跟踪。
我的问题是为什么没有test.xml文件时oncomplete()不会触发? 我的逻辑是检查文件是否不存在,创建它然后读取它。
任何指针都非常感谢。 提前谢谢你,祝你有个美好的一天!
托尼
package util
{
import flash.filesystem.*;
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.events.*;
import flash.display.*;
import flash.events.Event;
import flash.events.MediaEvent;
import flash.events.MouseEvent;
import flash.media.CameraUI;
import flash.media.MediaPromise;
import flash.media.MediaType;
import fl.containers.*;
import fl.controls.*;
import flash.net.URLLoader;
import flash.net.URLRequest;
import flash.net.URLVariables;
import flash.net.URLLoaderDataFormat;
import flash.net.URLRequestMethod;
dynamic public class cam5 extends MovieClip
{
public var preloader:MovieClip;
public function cam5()
{
var tmp_file:File = File.applicationStorageDirectory.resolvePath('test.xml');
if (tmp_file.exists)
{// File exists
preloader.visible = true;
readcamfile(null); // check settings from the camera file
} else
{// File doesn't exist
writecamfile();
preloader.visible = true;
}
function readcamfile(event:Event):void
{
var loader:URLLoader = new URLLoader(new URLRequest(File.applicationStorageDirectory.resolvePath('test.xml').url));
loader.addEventListener(Event.COMPLETE, oncomplete);
}
function writecamfile():void
{
var xmlstr:XML = <images></images>;
var file:File = File.applicationStorageDirectory.resolvePath("test.xml");
var fileStream:FileStream = new FileStream();
fileStream.open(file, FileMode.WRITE);
var outputString:String = '<?xml version="1.0" encoding="utf-8"?>\n';
outputString += xmlstr.toXMLString();
fileStream.writeUTFBytes(outputString);
fileStream.addEventListener(Event.COMPLETE, readcamfile);
fileStream.close();
}
function oncomplete(event:Event):void
{
var xml:XML = new XML(event.currentTarget.data);
var chkcount : Boolean = (xml.children().length() > 0);
if(chkcount)
{
var xmlcount:int = xml.children().length(); //test children count
var camXMLList:XMLList = xml.img;
var count:int = camXMLList.length(); //test list count
for(var i:int=0; i<xmlcount; i++)
{
var _row = xml.children()[i];
}
preloader.visible = false;
trace(_row.text()+'\n'+xmlcount+'\n'+count);
}else
{
preloader.visible = false;
trace("no images");
}
}
}
}
}
我实际上已经想到了这个。 您可以在关闭流之后重新初始化对readcamfile的调用,而不是在writecamfile上添加事件列表器:
fileStream.close();
readcamfile();
如果你确实需要保留事件:你的函数中的事件参数你可能需要像这样重新启动函数:
readcamfile(null);
因为该函数需要一个参数
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.