AS3开发经验总结
2010年01月23日
[b]案例1. 2010-01-23 项目:ZAJBQCMD_PYFE[/b]
问题:点击已设置名称为nameX的Loader对象通过 event.currentTarget.name获得名称为instanceXXX;
原因: 错误的先添加事件监听后设置名字
原错误code:LoaderObj.addEventListener(MouseEvent.CLICK,methodX);
LoaderObj.name="nameX";
正确code:LoaderObj.name="nameX";
LoaderObj.addEventListener(MouseEvent.CLICK,methodX);
[b]案例2. 2010-01-25 项目ZAJBQCMD_WORDGAME[/b]
问题:code描述
step1 读取xml在方法method1中
var urlReq:URLRequest=new URLRequest("wordData.xml");
var urlLoader:URLLoader=new URLLoader();
urlLoader.load(urlReq);
urlLoader.addEventListener(Event.COMPLETE, initWordStruts);
step2 获得xml数据信息,其中wordStrutArray为ArrayList(ArrayCollection同样)
private function initWordStruts(event:Event):void
{
var dataXML:XML=new XML(event.target.data);
var dataXMLList:XMLList=dataXML.wordstrut;
for each (var wordXML:XML in dataXMLList)
{
var wordDemo:Object=new Object();
wordDemo.word=wordXML.word;
wordDemo.sheng=wordXML.sheng;
wordDemo.yun1=wordXML.yun1;
wordDemo.yun2=wordXML.yun2;
wordDemo.soundLevel=wordXML.soundlevel;
wordDemo.soundPS=wordXML.soundps;
wordStrutArray.addItem(wordDemo);
}
}
step3 获得数据操作
var currentWordStrut:Object=wordStrutArray.getItemAt(index);
var words:String=currentWordStrut.sheng + currentWordStrut.yun1 + currentWordStrut.yun2;
现象1.此时输出words;Alert.show(words);
获得的信息为abc 为 xml格式
2.输出currentWordStrut.sheng值,Alert.show(currentWordStrut.sheng);
结果为a
为获得正常的"abc"目前解决办法:
var shengword:String=currentWordStrut.sheng;
var yun1word:String=currentWordStrut.yun1;
var yun2word:String=currentWordStrut.yun2;
var words:String=shengword + yun1word + yun2word;
此时输出words的值,Alert.show(words);
结果为"abc";
[b]案例3. 2010-01-25 项目ZAJBQCMD_WORDGAME[/b]
将for each (... in ...)用于自定义类
自定义类:ThreeAlphabetBoxStruts
package
{
public dynamic class ThreeAlphabetBoxStruts
{
public var clipBoxOne:String="boxThreeAlphabetOne";
public var clipBoxTwo:String="boxThreeAlphabetTwo";
public var clipBoxThree:String="boxThreeAlphabetThree";
public function ThreeAlphabetBoxStruts()
{
}
}
}
错误做法:使用for each (var attributeValue in Object)遍历对象属性值
private var threeAlphabetBoxStruts:ThreeAlphabetBoxStruts=new ThreeAlphabetBoxStruts();
for each (var a:String in threeAlphabetBoxStruts)
{
Alert.show("boxname:" + a);
}
结果:无结果出现
原因: for each ( in ) 只能用于动态类的动态属性, clipBoxOne,clipBoxTwo,clipBoxThree在类定义时已经定义
正确做法
threeAlphabetBoxStruts.name="hcl";
for each (var a:String in threeAlphabetBoxStruts)
{
Alert.show("boxname:" + a);
}
结果:显示出结果,字符串:boxname:hcl
[b]案例4. 2010-01-25 项目ZAJBQCMD_WORDGAME 使发布的SWF可访问本地资源(如XML文件)[/b]
只有仅限于文件系统的 SWF 文件和可信的本地 SWF 文件可以访问本地资源.
flex项目上点右键-->properties-->ActionscriptCompiler-->Additional compiler arguments
加上 “ -use-network=false ”
SecurityError: Error #2028: 仅限于文件系统的 SWF 文件 file:///C|/Documents%20and%20Settings/Administrator/桌面/176854%5F1%5F0%5F1.swf 不能访问 Internet URL http://client.joy.cn/flvplayer/xml/adtemp.xml。
at flash.net::URLStream/load()
at flash.net::URLLoader/load()
at model::AdTemp/GetXMLData()
at model::AdTemp()
at com::FlvPlayerManager/RenderUI()
at com::FlvPlayerManager()
at com::MiddleTier$/get FlvManagerInstance()
at com::DocumentClass()
可以设置一下FlashPlayerTrust 配置文件, 使得swf文件被授予完全访问权限
引用:
Windows:app data\Macromedia\Flash Player\#Security\FlashPlayerTrust
(例如,C:\Documents and Settings\JohnD\Application Data\Macromedia\Flash Player\#Security\FlashPlayerTrust)
Mac:app data/Macromedia/Flash Player/#Security/FlashPlayerTrust
(例如,/Users/JohnD/Library/Preferences/Macromedia/Flash Player/#Security/FlashPlayerTrust)
Security.sandboxType 属性
SWF 文件的作者可以使用只读的静态 Security.sandboxType 属性来确定 Flash Player 向其分配该 SWF 文件的沙箱类型。Security 类包括表示 Security.sandboxType 属性可能值的常量,如下所示:
Security.REMOTE
2010年01月23日
[b]案例1. 2010-01-23 项目:ZAJBQCMD_PYFE[/b]
问题:点击已设置名称为nameX的Loader对象通过 event.currentTarget.name获得名称为instanceXXX;
原因: 错误的先添加事件监听后设置名字
原错误code:LoaderObj.addEventListener(MouseEvent.CLICK,methodX);
LoaderObj.name="nameX";
正确code:LoaderObj.name="nameX";
LoaderObj.addEventListener(MouseEvent.CLICK,methodX);
[b]案例2. 2010-01-25 项目ZAJBQCMD_WORDGAME[/b]
问题:code描述
step1 读取xml在方法method1中
var urlReq:URLRequest=new URLRequest("wordData.xml");
var urlLoader:URLLoader=new URLLoader();
urlLoader.load(urlReq);
urlLoader.addEventListener(Event.COMPLETE, initWordStruts);
step2 获得xml数据信息,其中wordStrutArray为ArrayList(ArrayCollection同样)
private function initWordStruts(event:Event):void
{
var dataXML:XML=new XML(event.target.data);
var dataXMLList:XMLList=dataXML.wordstrut;
for each (var wordXML:XML in dataXMLList)
{
var wordDemo:Object=new Object();
wordDemo.word=wordXML.word;
wordDemo.sheng=wordXML.sheng;
wordDemo.yun1=wordXML.yun1;
wordDemo.yun2=wordXML.yun2;
wordDemo.soundLevel=wordXML.soundlevel;
wordDemo.soundPS=wordXML.soundps;
wordStrutArray.addItem(wordDemo);
}
}
step3 获得数据操作
var currentWordStrut:Object=wordStrutArray.getItemAt(index);
var words:String=currentWordStrut.sheng + currentWordStrut.yun1 + currentWordStrut.yun2;
现象1.此时输出words;Alert.show(words);
获得的信息为abc 为 xml格式
2.输出currentWordStrut.sheng值,Alert.show(currentWordStrut.sheng);
结果为a
为获得正常的"abc"目前解决办法:
var shengword:String=currentWordStrut.sheng;
var yun1word:String=currentWordStrut.yun1;
var yun2word:String=currentWordStrut.yun2;
var words:String=shengword + yun1word + yun2word;
此时输出words的值,Alert.show(words);
结果为"abc";
[b]案例3. 2010-01-25 项目ZAJBQCMD_WORDGAME[/b]
将for each (... in ...)用于自定义类
自定义类:ThreeAlphabetBoxStruts
package
{
public dynamic class ThreeAlphabetBoxStruts
{
public var clipBoxOne:String="boxThreeAlphabetOne";
public var clipBoxTwo:String="boxThreeAlphabetTwo";
public var clipBoxThree:String="boxThreeAlphabetThree";
public function ThreeAlphabetBoxStruts()
{
}
}
}
错误做法:使用for each (var attributeValue in Object)遍历对象属性值
private var threeAlphabetBoxStruts:ThreeAlphabetBoxStruts=new ThreeAlphabetBoxStruts();
for each (var a:String in threeAlphabetBoxStruts)
{
Alert.show("boxname:" + a);
}
结果:无结果出现
原因: for each ( in ) 只能用于动态类的动态属性, clipBoxOne,clipBoxTwo,clipBoxThree在类定义时已经定义
正确做法
threeAlphabetBoxStruts.name="hcl";
for each (var a:String in threeAlphabetBoxStruts)
{
Alert.show("boxname:" + a);
}
结果:显示出结果,字符串:boxname:hcl
[b]案例4. 2010-01-25 项目ZAJBQCMD_WORDGAME 使发布的SWF可访问本地资源(如XML文件)[/b]
只有仅限于文件系统的 SWF 文件和可信的本地 SWF 文件可以访问本地资源.
flex项目上点右键-->properties-->ActionscriptCompiler-->Additional compiler arguments
加上 “ -use-network=false ”
SecurityError: Error #2028: 仅限于文件系统的 SWF 文件 file:///C|/Documents%20and%20Settings/Administrator/桌面/176854%5F1%5F0%5F1.swf 不能访问 Internet URL http://client.joy.cn/flvplayer/xml/adtemp.xml。
at flash.net::URLStream/load()
at flash.net::URLLoader/load()
at model::AdTemp/GetXMLData()
at model::AdTemp()
at com::FlvPlayerManager/RenderUI()
at com::FlvPlayerManager()
at com::MiddleTier$/get FlvManagerInstance()
at com::DocumentClass()
可以设置一下FlashPlayerTrust 配置文件, 使得swf文件被授予完全访问权限
引用:
Windows:app data\Macromedia\Flash Player\#Security\FlashPlayerTrust
(例如,C:\Documents and Settings\JohnD\Application Data\Macromedia\Flash Player\#Security\FlashPlayerTrust)
Mac:app data/Macromedia/Flash Player/#Security/FlashPlayerTrust
(例如,/Users/JohnD/Library/Preferences/Macromedia/Flash Player/#Security/FlashPlayerTrust)
Security.sandboxType 属性
SWF 文件的作者可以使用只读的静态 Security.sandboxType 属性来确定 Flash Player 向其分配该 SWF 文件的沙箱类型。Security 类包括表示 Security.sandboxType 属性可能值的常量,如下所示:
Security.REMOTE