FlashPlayer10的FileReference增加了save方法,可以把数据保存在本地
1
2
3
4
|
import flash.net.FileReference;
var saveTxt:String="this is a test";
var file:FileReference = new FileReference();
file.save(saveTxt, "savetest.txt");
|
用法很简单啦
更多
flash网站有个漂亮的loading动画可以说是起到一定的出彩,这个网站是专门收集loading的
http://www.prettyloaded.com/
更多
var txt:TextField = new TextField();
txt.blendMode = BlendMode.LAYER;
txt.alpha = .2;
txt.appendText("这里文字透明咯~");
addChild(txt);
更多
在AS3中,监听事件,比如:
**.addEventListener(Event.COMPLETE,hander);
function hander(event:Event):void
很多时候要向这个hander方法里传递参数。使程序更灵活。
下面有一个简单的方法:
**.addEventListener(Event.ENTER_FRAME,function(e:Event){ hander2(e,12,6); });//比如要传“12”“6”这个参数
hander2如下:
function hander2(event:Event,i:int,j:int):void {
if ((event.target as MovieClip).currentFrame == i) {
event.target.gotoAndPlay(j);
}
}
更多
正文:
对于如下的一个XML文档,在flash中应该怎么读呢?

(图片来自kirupa.com)
按照Using XML in Flash CS3/AS3上的内容,包括了XML结构介绍等内容,在此我不再转述,对XML不怎么了解的话请先移步:XML 系列教程。
这里我分三步描述flash读XML的基本方法,以及外延一个对带命名空间的XML的读取方法,如下目录:
1、加载XML文件;
2、读取XML的数据;
3、过滤数据;
4、读取带命名空间的XML数据;
5、处理gb2312编码的XML;
注:在这里的AS脚本都是在 Adobe Flash CS3 版本以上中进行编写,flex用户请自行添加修改相应的包引用。
下面开始第一部分,如何加载XML文件!
1、加载XML文件
在脚本编辑器中写入以下代码:
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = null;
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
xmlLoader.load(new URLRequest("http://www.kirupa.com/net/files/sampleXML.xml"));
function LoadXML(e:Event):void {
xmlData = new XML(e.target.data);
trace(xmlData);
}
按Ctrl+Enter运行它,你会在输出窗口中看到整个XML的内容:

这里不进行代码解说,关于XML类,请查看:http://help.adobe.com/zh_TW/AS3LCR/Flash_10.0/XML.html
下面进入第2部分:如何读取XML数据。
2、读取XML数据
2.1直接读取XML数据
对XML数据的读取是十分简单的,不信请看:
function LoadXML(e:Event):void {
xmlData = new XML(e.target.data);
ParseBooks(xmlData);
}
function ParseBooks(bookInput:XML):void {
trace("XML Output");
trace("------------------------");
trace(bookInput.Book);
}
可得到如何结果:
XML Output
------------------------
Sir Arthur Conan Doyle
F. Scott Fitzgerald
Stephen E. Ambrose
Stephen E. Ambrose
同样的,把trace的内容改为bookInput.Book.author,会得到下面的结果:
XML Output
------------------------
Sir Arthur Conan Doyle
F. Scott Fitzgerald
Stephen E. Ambrose
Stephen E. Ambrose
而trace(bookInput.Book.author.text());可得到:
XML Output
------------------------
Sir Arthur Conan DoyleF. Scott FitzgeraldStephen E. AmbroseStephen E. Ambrose
同样的,要读具体的节点,可以这样
trace(bookInput.Book.author.text()[0]);
可得到
XML Output
------------------------
Sir Arthur Conan Doyle
2.2、XML和XMLList
这里我们会用到另外一个类XMLList,这个类可以把XML对象作为数组的方式读取,可以方便地进行for each操作。
function ParseBooks(bookInput:XML):void {
trace("XML Output");
trace("------------------------");
var authorList:XMLList = bookInput.Book.author;
for each (var authorElement:XML in authorList) {
trace(authorElement);
}
}
2.3历遍子元素
function ParseBooks(bookInput:XML):void {
trace("XML Output");
trace("------------------------");
var bookChildren:XMLList = bookInput.Book.children();
for each (var bookInfo:XML in bookChildren) {
trace(bookInfo);
}
}
结果如下:
XML Output
------------------------
Sherlock Holmes: Complete Novels and Stories, Vol 1
Sir Arthur Conan Doyle
The Great Gatsby
F. Scott Fitzgerald
Undaunted Courage
Stephen E. Ambrose
Nothing Like It In the World
Stephen E. Ambrose
同样的,我们可以用节点的.name()方法得知它的标签名:
function ParseBooks(bookInput:XML):void {
trace("XML Output");
trace("------------------------");
var bookChildren:XMLList = bookInput.Book.children();
for each (var bookInfo:XML in bookChildren) {
if (bookInfo.name() == "author") {
trace(bookInfo);
}
}
}
这样就可以得到所有author的值了。
2.4读取属性
历遍属性的方法:
function ParseBooks(bookInput:XML):void {
trace("XML Output");
trace("------------------------");
var bookAttributes:XMLList = bookInput.Book.attributes();
for each (var bookISBN:XML in bookAttributes) {
trace(bookISBN);
}
}
对于attributes,同样有一个.name()方法:
function ParseBooks(bookInput:XML):void {
trace("XML Output");
trace("------------------------");
var bookAttributes:XMLList = bookInput.Book.attributes();
for each (var bookISBN:XML in bookAttributes) {
if (bookISBN.name() == "ISBN") {
trace(bookISBN);
}
}
}
另外还有一种更直接的方法,直接用.attribute(“ISBN”) :
function ParseBooks(bookInput:XML):void {
trace("XML Output");
trace("------------------------");
var bookAttributes:XMLList = bookInput.Book.attribute("ISBN");
for each (var bookISBN:XML in bookAttributes) {
trace(bookISBN);
}
}
注意,这个.attribute(attributeName:*)方法不是.attributes()哦,少了个s的哦。
3、过滤数据
3.1过滤值
function ParseBooks(bookInput:XML):void {
trace("XML Output");
trace("------------------------");
var authorList:XMLList = bookInput.Book.(author == "Stephen E. Ambrose");
trace(authorList);
}
可得到:
XML Output
------------------------
<Book ISBN="0684826976">
<title>Undaunted Courage</title>
<author>Stephen E. Ambrose</author>
</Book>
<Book ISBN="0743203178">
<title>Nothing Like It In the World</title>
<author>Stephen E. Ambrose</author>
</Book>
所以在过滤之后,可以同样使用
var authorList:XMLList = bookInput.Book.(author == "Stephen E. Ambrose").title;
得到所有作者是Stephen E. Ambrose的书名了。
3.2过滤属性
function ParseBooks(bookInput:XML):void {
trace("XML Output");
trace("------------------------");
var bookList:XMLList = bookInput.Book.(@ISBN == "0743203178").title;
trace(bookList);
}
我们还可以进行一些复杂的过滤:
function ParseBooks(bookInput:XML):void {
trace("XML Output");
trace("------------------------");
var bookList:XMLList = bookInput.Book.(author == "Stephen E. Ambrose" && title != "Nothing Like It In the World").title;
trace(bookList);
}
4、读取带命名空间的XML数据
如果把上面的XML文件改一改,变成如下:
<Books xmlns:g="http://guitarbean.com/">
<Book ISBN="0553212419">
<title>Sherlock Holmes: Complete Novels and Stories, Vol 1</title>
<author>Sir Arthur Conan Doyle</author>
</Book>
<Book ISBN="0743273567">
<title>The Great Gatsby</title>
<author>F. Scott Fitzgerald</author>
</Book>
<Book ISBN="0684826976">
<title>Undaunted Courage</title>
<author>Stephen E. Ambrose</author>
</Book>
<Book ISBN="0743203178">
<title>Nothing Like It In the World</title>
<author>Stephen E. Ambrose</author>
<g:cost>XXXXXXX</g:cost>
</Book>
</Books>
这时要用到Namespace类了:
function ParseBooks(bookInput:XML):void {
trace("XML Output");
trace("------------------------");
var g:Namespace = new Namespace("http://guitarbean.com/");
trace(bookInput.Book.g::cost);
}
可得到:
XML Output
------------------------
XXXXXXX
这里的双冒号(::)就是命名空间符,只要建立了一Namespace对象,XML对象便可直接用点运算符来操作了,相对的比较方便。
5、处理gb2312编码的XML
有的XML文件可能不是UTF8的,如在中国常用的gb2312编码,侧需要转码一下,这时要用到ByteArray类,在建立XML对象前统一处理下即可:
var xmlLoader:URLLoader = new URLLoader();
var xmlData:XML = null;
xmlLoader.addEventListener(Event.COMPLETE, LoadXML);
xmlLoader.load(new URLRequest("http://www.kirupa.com/net/files/sampleXML.xml"));
function LoadXML(e:Event):void {
var BA:ByteArray = new ByteArray;
BA.writeBytes((e.target as URLLoader).data);
BA.position = 0;
//把gb2312转为UTF8编码:从字符集中读取字符串
var newData:String = BA.readMultiByte(BA.length,"gb2312");
//然后才建立XML对象:
xmlData = new XML(newData);
trace(xmlData);
}
或写个方法
public function DecodeFrom(_arg1:ByteArray):ByteArray{
var _local2:ByteArray;
_local2 = new ByteArray();
_arg1.position = 0;
while (_local2.length < _arg1.length) {
_local2.writeByte(uint((Number(_arg1.readUnsignedByte()) ^ password)));
};
return (_local2);
}
LoadXML中这样写:
xmlData = new XML(DecodeFrom(BA);
trace(xmlData);
更多
想让图片和文字垂直居中对齐的话,可以在IMG标签下添加align=absmiddle属性即可实现,但align=absmiddle属性在W3C验证下通不过,但可以用CSS来代替IMG的align=absmiddle属性来实现垂直居中。
可以在CSS中加入vertical-align:middle;就能实现了
- <div>
- <img style="vertical-align:middle;" src="xxx.gif" />用CSS实现图片和文字垂直居中对齐
- </div>
- <br /><br />
- <div>
- <img src="xxx.gif" />这个是没加样式的效果
- </div>
- <br /><br />
- <div>
- <img align=absmiddle src="xxx.gif" />这个是用align=absmiddle实现图片和文字垂直居中对齐
- </div>
更多
EA(Enterprise Architect)是支持多种流行语言脚本双向工程的UML建模工具。更难得的是,它还支持AS3,今天谈一谈怎样从AS3代码生成EA类图。
一、准备
下载安装EA:http://www.sparxsystems.com.au/products/ea_downloads.html。
二、操作步骤
点击此处查看动画演示。
三、说明
- 此处的AS3代码指的是AS3类文件,当然也支持AS2类文件;
- 本操作中的sample类图名是EA根据AS路径自动生成的;
- 还可以通过工具栏菜单Project>Source Code Engeering>Import Source Directory或Import ActionScript Files来导入AS代码。
- 如果修改了AS代码,不用再次导入,选择Project>Source Code Engeering>Synchronize Package Contents即可实现AS代码与EA类图的同步更新。
更多
//向右旋转90度
public function scaleRight(bmp:BitmapData):BitmapData{
var m:Matrix = new Matrix();
m.rotate(Math.PI/2);
m.translate(bmp.height,0);
var bd:BitmapData = new BitmapData(bmp.height, bmp.width,false);
bd.draw(bmp,m);
return bd;
}
//向左旋转90度
public function scaleLeft(bmp:BitmapData):BitmapData{
var m:Matrix = new Matrix();
m.rotate(-Math.PI/2);
m.translate(0,bmp.width);
var bd:BitmapData = new BitmapData(bmp.height, bmp.width,false);
bd.draw(bmp,m);
return bd;
}
更多
最新评论