嗨,新朋友,很高兴认识你,欢迎来到我的博客。

使textField的文字变透明

var txt:TextField = new TextField();
txt.blendMode = BlendMode.LAYER;
txt.alpha = .2;
txt.appendText("这里文字透明咯~");
 addChild(txt);

as3中的监听事件如何传参数

在AS3中,监听事件,比如:
**.addEventListener(Event.COMPLETE,hander);
function hander(event:Event):void

很多时候要向这个hander方法里传递参数。使程序更灵活。

下面有一个简单的方法:

**.addEventListener(Event.ENTER_FRAME,function(e:Event){ hander2(e,126); });//比如要传“12”“6”这个参数
hander2如下:
function hander2(event:Event,i:int,j:int):void {
 if ((event.target as  MovieClip).currentFrame == i) {
  event.target.gotoAndPlay(j);
 
 }
}

ActionScript3读取XML

正文:

对于如下的一个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);
 

DIV中图片垂直居中,与图片对齐

想让图片和文字垂直居中对齐的话,可以在IMG标签下添加align=absmiddle属性即可实现,但align=absmiddle属性在W3C验证下通不过,但可以用CSS来代替IMG的align=absmiddle属性来实现垂直居中。
可以在CSS中加入vertical-align:middle;就能实现了

Html代码 复制代码

  1. <div>  
  2.     <img style="vertical-align:middle;" src="xxx.gif"  />用CSS实现图片和文字垂直居中对齐   
  3. </div>  
  4. <br /><br />  
  5. <div>  
  6.     <img src="xxx.gif"  />这个是没加样式的效果   
  7. </div>  
  8. <br /><br />  
  9. <div>  
  10.     <img align=absmiddle src="xxx.gif"  />这个是用align=absmiddle实现图片和文字垂直居中对齐   
  11. </div>  

用AS3代码生成EA类图(转)

EA(Enterprise Architect)是支持多种流行语言脚本双向工程的UML建模工具。更难得的是,它还支持AS3,今天谈一谈怎样从AS3代码生成EA类图。

一、准备

下载安装EA:http://www.sparxsystems.com.au/products/ea_downloads.html

二、操作步骤

点击此处查看动画演示。

三、说明

  1. 此处的AS3代码指的是AS3类文件,当然也支持AS2类文件;
  2. 本操作中的sample类图名是EA根据AS路径自动生成的;
  3. 还可以通过工具栏菜单Project>Source Code Engeering>Import Source DirectoryImport ActionScript Files来导入AS代码。
  4. 如果修改了AS代码,不用再次导入,选择Project>Source Code Engeering>Synchronize Package Contents即可实现AS代码与EA类图的同步更新。

翻转bitmapdata对象方法

//向右旋转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;
}

AS3组件之UIScrollBar滚动条

?View Code ACTIONSCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import fl.controls.UIScrollBar;
import fl.controls.SliderDirection;//滑动条的方向
 
var outText:URLRequest=new URLRequest(&quot;UIScrollBarText.txt&quot;);
var inText:URLLoader=new URLLoader();
inText.load(outText);
inText.addEventListener(Event.COMPLETE,completeFun);
function completeFun(e:Event) {
	var bl:URLVariables=new URLVariables(inText.data);
	text1.text=bl.a2;//部分载入
	//text1.text=inText.data;//载入全部文本
}
 
var newUIScrollBar:UIScrollBar=new UIScrollBar();
addChild(newUIScrollBar);
with (newUIScrollBar) {
	x=text1.x+text1.width;
	y=text1.y;
	height=text1.height;
	direction=SliderDirection.VERTICAL;
	scrollTarget=text1;
}

在库里面导入NumericStepper组件

在库里面导入NumericStepper组件
舞台上有一个label组件,实例名称:newLabel

?View Code ACTIONSCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
import fl.controls.NumericStepper;
 
var style:TextFormat=new TextFormat();//字符样式
style.color=0x0000FF;
style.font=&quot;宋体&quot;;
 
var newNumericStepper:NumericStepper=new NumericStepper();
addChild(newNumericStepper);
with (newNumericStepper) {
	x=100;
	y=100;
	maximum=30;//最大值
	minimum=12;//最小值
	stepSize=1;//每按一下按钮,增加或减少的数值
	value=12;//初始值或当前值
}
 
newNumericStepper.addEventListener(Event.CHANGE,changefun);
function changefun(e:Event) {
	style.size=newNumericStepper.value;
	newLabel.setStyle(&quot;textFormat&quot;,style);
}

AS3组件之RadioButton单选按钮

在库里面导入RadioButton组件
舞台上面两个label组件,实例名称分别为label1和label2

?View Code ACTIONSCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
import fl.controls.RadioButton;
import fl.controls.RadioButtonGroup;//单选按钮的分组
import fl.controls.ButtonLabelPlacement;//字在按钮图标的左边还是右边或上下
 
var rbg1:RadioButtonGroup=new RadioButtonGroup(&quot;group1&quot;);
var rbg2:RadioButtonGroup=new RadioButtonGroup(&quot;group2&quot;);
 
var btn1:RadioButton=new RadioButton();
var btn2:RadioButton=new RadioButton();
var btn3:RadioButton=new RadioButton();
var btn4:RadioButton=new RadioButton();
var btn5:RadioButton=new RadioButton();
var btn6:RadioButton=new RadioButton();
 
for (var i:int=1; i&lt;=3; i++) {
	addChild(this[&quot;btn&quot;+i]);
	with (this[&quot;btn&quot;+i]) {
		x+=50+100*i;
		y=100;
		label=&quot;选项&quot;+i;
 
		//两种办法分组:
		group=rbg1;//第一种(推荐):按钮的分组,此 RadioButton 所属的RadioButtonGroup对象
		//groupName=&quot;分组1&quot;;//第二种:直接写,这样就不用上面导入RadioButtonGroup了
 
		value=&quot;按的是选项&quot;+i;//单选按钮所代表的值
		labelPlacement=ButtonLabelPlacement.RIGHT;//字在按钮图标的左边还是右边或上下
	}
}
for (var j:int=4; j&lt;=6; j++) {
	addChild(this[&quot;btn&quot;+j]);
	with (this[&quot;btn&quot;+j]) {
		x+=20+100*(j-3);
		y=300;
		label=&quot;选项&quot;+j;
		group=rbg2;
		value=&quot;按的是选项&quot;+j;
		labelPlacement=ButtonLabelPlacement.LEFT;
	}
}
 
//第一种判断办法
btn1.addEventListener(MouseEvent.CLICK,clickFun1);
btn2.addEventListener(MouseEvent.CLICK,clickFun1);
btn3.addEventListener(MouseEvent.CLICK,clickFun1);
btn4.addEventListener(MouseEvent.CLICK,clickFun2);
btn5.addEventListener(MouseEvent.CLICK,clickFun2);
btn6.addEventListener(MouseEvent.CLICK,clickFun2);
 
function clickFun1(e:MouseEvent) {
	label1.text=e.target.value;
}
function clickFun2(e:MouseEvent) {
	label2.text=e.target.value;
}
 
//第二种判断办法
/*
btn1.addEventListener(Event.ENTER_FRAME,clickFun1);
btn2.addEventListener(Event.ENTER_FRAME,clickFun1);
btn3.addEventListener(Event.ENTER_FRAME,clickFun1);
btn4.addEventListener(Event.ENTER_FRAME,clickFun2);
btn5.addEventListener(Event.ENTER_FRAME,clickFun2);
btn6.addEventListener(Event.ENTER_FRAME,clickFun2);
 
function clickFun1(e:Event) {
if (e.target.selected) {
label1.text=e.target.value;
}
}
function clickFun2(e:Event) {
if (e.target.selected) {
label2.text=e.target.value;
}
}*/

AS3组件之ScrollPane滚动加载组件

在库里面导入ScrollPane组件

?View Code ACTIONSCRIPT
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
import fl.containers.ScrollPane;
import fl.controls.ScrollPolicy;//滚动条
 
var newScrollPane:ScrollPane=new ScrollPane();
addChild(newScrollPane);
with (newScrollPane) {
	x=100;
	y=50;
	width=400;
	height=300;
	source=mc;//加载的路径
	scrollDrag=true;//当鼠标移到画面上时,是否允许移动图片,默认是false不允许
	horizontalLineScrollSize=5;//单击两边的左右移动按钮,横向滚动条一次移动多少像素
	horizontalPageScrollSize=10;//单击横向滚动条空白处时,滚动条移动多少像素
	horizontalScrollPolicy=ScrollPolicy.ON;//是否显示横向滚动条
	verticalLineScrollSize=5;//单击垂直方向,上下移动按钮,竖滚动条一次移动多少像素
	verticalPageScrollSize=10;//单击垂直滚动条空白处时,滚动条移动多少像素
	verticalScrollPolicy=ScrollPolicy.AUTO;//是否显示垂直滚动条
}