AS3.0 Cookbook 读书笔记

ActionScript_cookbook

第一章 ActionScript基础
备注
1 创建AS工程 创建了类文件夹 自制快捷方式,实现输入private function
2.编译出来的项目swf和HTML 文件放在哪里 bin里面
2 调整应用程序属性 1.在项目properties->ActionScript compiler中->Additional compiler arguments ->
-default-size 800 600
-default-background-color 0x0000ff
-default-frame-rate 20
2.通过主类文件的元数据
[SWF(width="800",height="400",background="0x00ff00",framerate="10")]

3 ActionScript代码要放在哪里

4 追踪消息 1.在console里查看trace信息
2.当你启动应用程序的调试版时,也必须有安装Flash Player的调试版才行。调试版可以把追踪内容写入文件。
3.以上配置是由mm.xfg决定的 在个人文件夹下面。

TraceOutputFileEnable 是否把追踪内容写入文件
TraceOutputFileName = C:\flex.log 日志名
ErrorReportingEnable  是否写入
MaxWarnings   0 就是表示无上限
把flash player的版本要搞定!
5.处理事件 addEventListener(Event.ENTER_FRAME,onEnterFrame);
6.响应鼠标和按键事件 见笔记 as_cookbook_响应鼠标和按键事件
7.使用数学运算符 ++ -- 的方法
8.检查相等性或比较值  ==  ===  isNaN用于检查一个值是否是有效数字
基本数据按值比较,复杂数据按引用比较

9.依条件采取动作 if         switch           &&            ||         ! 
10.多次重复运算 for(){}
do{}while()
while(){}
for each( in )
for( in )  

11.随时间变化而重复任务 Timer enterFrame事件
12.创建可重用的代码 其实就是指实例方法,或者静态方法
13.让方法概括化以提升可重用性 把参数加入到你的方法中,就会让方法有足够的弹性去处理这些事情。
14.退出方法 return
15 取得方法的结果 return 值

16 处理错误 try catch finally  无论是否有return finally都一定会被抛出



第二章 自定义类 15页  20:30前
1.创建自定义类
2.决定在哪保存类 一定要把com文件夹的位置告诉编译器
1.Flash CS中 在classPath中,把com所在的路径加上
2.Flex中 项目属性->Source Path->把com所在的路径加上
3.纯SDK环境  mxmlc -source-path C:\libraries ExampleApplication.as

3.创建行为像方法的属性 显示方法
public function getCount():数据类型
public function setCount(var:uint):void
隐式方法 
public function get():数据类型
public function set(var:uint):void

4.创建静态方法和静态属性 static 
5.创建子类 注意学会选择 继承还是组合 聚合 还是 组合
6.实现父类方法的子类版本 复习殿堂
有时你想对父类的实现多加点什么。在这种情况下,你可以使用super关键字来引用父类。从子类的实现方法内调用父类的实现方法

7.创建常量 private const HIGH:uint = 100;
8.分派事件 dispatchEvent( ) 



第三章 运行时环境

1.举例 flash.system.Capabilities  flash.display.Stage flash.system.Security context menu

2.检测播放器版本好的方法 Flash Player Detection Kit 这个方法最好 ,还可以用flash.system.Capabilites.version 需要实验
WIN 10,2,153,1
3.检测操作系统 flash.system.Capabilities.os
Windows XP
4.检测播放器的类型 flash.system.Capabiltes.playerType  StandAlone
5.上面检测结果可能有哪些 PlugIn  ActiveX StandAlone External
fire插件  ie插件   单机        不会AS3.0 <wbr>Cookbook <wbr>读书笔记

6.检查当前系统所用的语言 flash.system.Capabilities.language
zh-CN
7.检查当前系统是否有input method editor flash.system.Capabilites.hasIME true
8.查看当前系统的IME信息 flash.system.IME
[class IME]
9.检查当前用户是否在使用IME flash.system.IME.enabled true
10.查看当前系统的分辨率 flash.system.Capabilites.screenResolutionX  flash.system.Capabilties.screenResolutionY 1366 768
返回的是屏幕分辨率
11.控制影片以适应播放器的方式,有四种,分别论述 stage.scaleMode = StageScaleMode.SHOW_ALL;保持长宽比适应播放器,会有边框
stage.scaleMode = StageScaleMode.NO_BORDER;保持长宽比适应播放器,但会出去
stage.scaleMode = StageScaleMode.EXACT_FIT;不保持长宽比,正好把播放器放满。
stage.scaleMode = StageScaleMode.NO_SCALE; 影片不会缩短,也会保持长宽比。这时候要注意设置影片的对齐方式
show_all 保持长宽比 可缩放,要完全显示
exact_fit 不保持长宽比
no_scale 保持长宽比
no_border 
12.影片的对齐方式 使用这个属性stage.align
它的值有StageAlign.TOP BOTTOM RIGHT LEFT  TOP_RIGHT TOP_LEFT BOTTOM_RIGHT BOTTOM_LEFT
 指定舞台在播放器中对齐方式 
13.隐藏FP的菜单项目 把stage.showDefaultContextMenu 的值设为false 那么只会显示 Settings About 调试器的选项。 显示为true的时候显示的是全的
14.检测当前播放器的音频功能 flash.system.Capabilites.hasAudio 检查这个播放器是否有音频设备(记住不是指电脑);
flash.system.Capabiltes.hasMP3 (查检这个播放器是否支持MP3);
全部是true
15.检测当前系统是否支持播放视频 1.flash.system.Capabilities.hasStreamingVideo  说明系统支持流媒体
2.flash.system.Capabilities.hasEbededVideo 说明系统支持嵌入式的视频
3.flash.system.Cppabilties.hasVideoEncoder 检查系统是否支持视频流编码,比如用户想开摄像头
全部是true
16.提示用户修改播放器的设定值 flash.system.Security.showSettings()
这个方法中可以传入参数,来表示显示哪个设置界面。P70

17.处理系统安全 三种方法
flash.system.Security.allowDomain() 
单向的
flash.system.Security.allowInsecureDomain();
如果被访问的swf文件是位于https://的安全服务器上,那么allowDomain是没用的。必须使用allowInsecureDomain()
crossdomain.xml文件
这个文件默认放到根目录下,如果没有放到根目录下,那么可以用flash.system.Security.loadPolicyFile()来加载进来。





第四章 数字 start from 18:47 ---> 
1.8进制数,和16进制数的显示方式 0是8进制的  0x是16进制的
2.十进制数据和其它任意进制数据的转换 十进制数.toString(任意进制数);  partInt(任意进制数,进制) =
3.对数字取整 Math.round Math.floor Math.ceil  NumberUtilites.round 
NumberUtilites在 ascb.utils中 
要从www.rightactionscript.com/ascb下载ascb包
4.格式化数据 用NumberFormat就可以实现,此类在ascb.utils里面
var stlyer:NumberFormat = new NumberFormat("##, ### . 0000");
括号里的字符串就做NumberFormat类的mask
国际化或者自定义化:逗号和句号
先import adcb.utils.Locale
Locale.slanguage = "fr"; 语言代码
Locale.sVariant = "ES"   国别代码
也可以用styler.format(12345,{group:"|",decimal:"\"});
或者这些styler.format(12345,new Locale("es","ES"));
要去下载
然后做实验
5.格式化金额 styper.currentFormat(group,decimal currency before); 21:00 -- 23:00 两个小时看我能看多少!
6.产生随机数 Math.random()  NumberUtilities.random(最小数,最大数)
7.Card P94 页  ascb.play.Cards 20:52开始
8.获得唯一值 NumberUtilities.getUnique() 
9.角度度量转换 var converter:Converter = Unit.DEGREEE.getConverterTo(Unit.RADIAN);
converter.convert(90);
p96开始 21:00
10.开平方,乘方 Math.pow(a,2) a的2次方的意思 , Math.sqrt(b)给b开方 p97开始 21:09
11.把数组转化成字符串的方法 letterArr.join();
12.contenLoaderInfo的本质是什么 它是LoaderInfo这个类的实例
13.解决鼠标移动时屏幕更新粗糙这个事情的其它办法是 使用ascb.display.DraggleableSprite .它集成了updateAfterEvent这个方法,而且有两个新的方法start()
drag()
do again












第6章 显示清单




第7章 绘图与遮罩

1.设置线条样式 lineStyle()
2.设置渐变线条样式 lineGradientStyle() 还是必须先调用 lineStyle()
3.绘制直线 Graphics.lineTo()
4.绘制曲线 Graphics.curveTo(前两个参数是控制点,后两个参数是目标点);
5.绘制弧线 Pen.drawAcr()
6.绘制矩形 Graphics.drawRect() Graphics.drawRoundRect()  Graphics.drawRoundRectComplex()
7.绘制圆 Graphics.drawCircle(x,y,r)
8.绘制椭圆 Pen.drawEllipse()
9.绘制三角形 Pen.drawTriangle()
10.绘制正多边形 Pen.drawRegularPolygon()
11.绘制星形 Pen.drawStar()
12.填充 Graphics.beginFill()  Graphics.endFill()
13.用渐变色填充 Graphics.beginGradientFill()  Graphics.endFill()
14.用位图填充形状 Graphics.beginBinmapFill()



第8章 位图

1.创建BitmapData对象 var bitmap:BitmapData = new BitmapData(width,height,transparent,fillColor);
比如设成(100,100,true,0x00ffffff);

2.把Bitmap添加到显示对象 var img:Bitmap = new Bitmap(bitmap);
addChild(img);

3.使用BitmapData的draw()方法把图形内容绘制到位图中。 bitmapdta.draw(_sprite); bitmapdata默认是白色
4.操作像素 ,即获取或设置位图中个别像素的值 setPixel()  getPixel()  setPixel32()  getPixel32()
5.创建矩形填充 var rect:flash.geom.Rectangle = new Rectangle(0,0,50,100);
_bitmapdata.fillRect(new Rectangle(25,25,50,50),0xffff0000);

6.复制一个位图的像素给另一个位图 _bitmapdata.copyPixels(sourceBmpdata,srcRect,dextPoint);
试过了,挺好用的。
7复制一个位图的channel 给另一个位图. -bitmapdata.copyPixels(sourceBmpdata,srcRect,destPoint,srcChannel,dextChannel);
8.创建噪声 _bitmapdata.noise(seed,low,high,channel,grayscale);
9.创建Perlin噪声 _bitmapdata.perlinNoise(baseX,baseY,octaves,seed,stitch,fractal,channels,grayscale,offsets);
10.使用阈值 _destBitmap.threshold(sourceBitmap,sourceRect,destPoint,operatin,threshold,color,mask,copySource);
11.对位图应用滤镜 _bitmapdata.applyFilter(); 或者把滤镜加入外层Bitmap的滤镜数组中。
1.destBmpdata.applyFilter(srcBmp, sourceRect,destPoint,filter);
2.略

12.两张位图的溶解过度 seed = srcBmpdata.pixelDissolve(destBmp,sourceRect,destPoint,seed,numPixels,fillColor);
13.滚动位图 _bitmapData.scroll(-1,-1);



第9章 文本

1.TextField在什么包里 flash.text.TextField
textColor 来设置文本的颜色

2.在文本域周围创建轮廓 _textField.border = true;
_textField.borderColor = 0xFF00FF;

3.为文本域创建背景 _texfField.backgroud = true;
_texfField.backgroudColor = 0x00ffff;

4.把文本域设为输入域
_texfField.type = flash.display.TextFieldType.INPUT;
_textField.selectable = true;

5.把文本域设为静态文本域 _textField.type = flash.display.TextFieldType.DYNAMIC;
6.建立密码输入域 _textField.displayAsPassword= true;
7.限制用户可以输入的字符 _texfField.restrict = "abcd";
8.设置域的最大长度 _texfField.maxChars = 10;
9.显示Html格式的文本 _texField.htmlText = "<u>test</u>";
10.在Html文本域显示时缩减空白 _textField.condenseWhite = true;
11.调整文本域大小以适应内容 _texfField.autoSize = 有三个值 TextFieldAutoSize.LEFT RIGHT CENTER NONE 不会自动换行
要想自动换行的话使用_textField.wordWrap = true; 同时请调整_textField的width属性

12.用程序滚动文本 没有实现这个,为什么。 要做实验
13.响应滚动事件 this._txt.addEventListener(Event.SCROLL,onTextScroll);
function onTextScroll(evt:Event):void{
     this._txt.scrollH = this._txt.maxScrollH;
}

14.格式化文本的方法 1.用HtmlText这个属性的方法
2.用TextFormat这个类
3.用CSS

15.HtmlText的使用方法 txt.html = true;
txt.htmlText = 

16 TextFormat的使用方法 var formatter :TextFormat = new TextFormat();
txt.setTextFormat(formatter);

17.StyleSheet的使用方法 var css:StyleSheet = new StyleSheet();
var sampleStyle:Object ={color:....textAlign};
css.setStyle(".sample",sampleStyle);  .sample是样式名
txt.styleSheet = css;
不成功
18.加载外部CSS文件 var css:StyleSheet = new StyleSheet();
css.parseCSS(外部css文件);
txt.styleSheet = css;
要去尝试
不成功
19.上面这种方法的注意事项 1.CSS只能应用到显示HTML格式的文本域'
2.HTML和CSS必须互相关联。例如,如果一个CSS定义一个类,名为someCSSClass,那么,只有当HTML将那个类用于文本的某个部分,该类才会有效
3.应用CSS之后,一定要应用HTML文本

20.当用户把文本敲进文本域时,对文本应用格式 1.把TextFormat类实例,赋值给文本域的defaultTextFormat属性。
21.格式化部分文本 txt.setTextFormat(startIndex,endIndex,TextFormat实例) 这也不成功
22.字体组的应用 有三个字体组 _sans _serif _typewriter
23.当用户电脑上没有安装字体的话,也要确保文本显示 p251页,我没看懂 为什么 p251 不会
24.创建旋转文本 当你旋转文本域时,设备字体会消失。这时必须用嵌入字体 不会!
25.显示Unicode文本 在附件->系统工具->字符映射表
26.给A添加焦点,
和移除焦点
stage.focus = A;
stage.focus = null;
不成功
27.把某些文本高亮 1.必须把stage.focus = 这个文本
2.这个文本.setSelection(startIndex,endIndex); 
成功
focus这个没有成功
28.设置文本插入点,获得当前插入点的位置 txt.setSelection(7,7)
txt.caretIndex.
好像成功了,但是看不到效果
29.响应文本的选取和取消选取 P256 
要点:
1.FocusEvent.FOCUS_IN  FocusEvent.FOCUS_OUT  这两个方法都是在焦点改变之后发生的。
2.上面这两个事件都有一个属性是relatedObject 表示的都是刚刚拥有焦点的对象
3.当用户准备把焦点变动时,FocusEvent.KEY_FOCUS_CHANGE 和 FocuEvent.MOUSE_FOCUS_CHANGE就会被派发。
4.用preventDefault()这个方法就可以阻止事件的默认行为执行
5.根据上面的方面,可以实现当txt1中的文本为空时,焦点不可以被移出的功能。
要背下来
看cookbook上是如何写的
30.响应用户文本输入 flash.events.TextEvent.TEXT_INPUT
TextEvent的一个属性text包含用户所输入的文本值

31.给文本添加超链接,下划线,颜色不同,找开链接的位置 1.可以用htmlText 来实现  href
2.也可以用TextFormat来实现  url
3.如果超链接指的是邮件的话,就用mailto:jianjun.xiao@foxmail.com
请看P258页
成功
TextFormat那个没有成功
32.从超链接调用AS3.0 <a href='event:http://www.rightactionscript.com'>website</a>
txt.addEventListener(TextEvent.LINK,onClickHyperlink);
TextEvent的text属性是那个网址。
因为使用的是event协议,所以超链接不会试着在浏览器中打开URL
成功
33.高级文本布局 numLines  getCharBoundaries()  getCharIndexAtPoint();
34 multiline

指示字段是否为多行文本字段。如果值为 true,则文本字段为多行文本字段;如果值为 false,则文本字段为单行文本字段。在类型为 TextFieldType.INPUT 的字段中,multiline 值将确定 Enter 键是否创建新行(如果值为 false,则将忽略 Enter 键)。如果将文本粘贴到其 multiline 值为 false  TextField 中,则文本中将除去新行。


35.应用高级锯齿功能,让文字更清晰 具体不懂
方法是:文本域的antiAliasType属性设为flash.text.AnitAliasType.ADVANCED 以及设置gridTypeFit 和sharpness功能
txt.antiAliasType = AntiAliasType.ADVANCED;
36.替换文本 直接把高亮的字符替换下来
_field.replaceSelectedText("new text");
_field.replaceText(startIndex,endIndex,"new text");
成功
37.取出系统字体清单 trace(TextField.fontList);  这个是静态属性 这个没



第10章 滤镜和转换

1.对显示对象应用颜色 var color:ColorTransform  = sampleSprite.transform.colorTransform;
color.color  = 0xffffff; 书上写错了。
sampleSprite.transform.colorTransform = color;

2.重置颜色 sampleSprite.transform.colorTransform = new ColorTransform;
3.切变 为什么  box.transform.matrix  = new Matrix(1,1,0,1,0,0);
4.应用滤镜 1.滤镜在包flash.filters.*下面
2.sampleSprite.filters = [new DropShadowFilter()]; 把含有filter实例的数组赋给显示对象的filters属性

5.有哪些滤镜 DropShadowFilter  BlurFilter GlowFilter BevelFilter GradientGlowFilter GradientBevelFilter
ConvolutionFilter ColorMatrixFilter   后面这两个可用来实现浮雕,检测边缘,锐化,制作数码负片,应用灰阶,改变饱和度,改变亮度,改变对比度



第11章 编程动画




第12章 字符串

1.join() 字符串 = 数组名.join();



第13章 正则表达式

1.






















第14章 日期和时间

1.取出日期与时间 Date对象有以下属性
1.fullYear
2.date
3.mouth
4.day
5.hours
6.minutes
7.seconds
8.milliseconds

2.用DateFormat var example:Date = new Date();
var formatter:DateFormat = new DateFormat(m/d/Y);
formatter.format(example);

3.把毫秒改成日期 var date:Date = new Date(毫秒数);
4.解析字符串日期 var formatter:DateFormat = new DataFormat(m/d/Y);
formatter.parse(05/01/2010)
没有DateFormat这个类



第15章 声音编程

1.声音编程包 flash.media.
晚上去找mp3 这章得做一个问答格
2.和声音编程有关的类有 Sound
SoundChannel
SoundLoaderContext
SoundMixer
soundTransform

3.Sound对象的加载 var urlRequest:URLRequest = new URLRequest("song.mp3");
var sound:Sound = new Sound();
sound.load(urlRequest);
加载,wma好像不行
4.控制开始播放 sound.play():

5.停止声音的播放,也停止声音文件的流送 sound.close();
6.重启声音数据的加载 sound.load();


7.设置声音缓冲区 1.当你告诉Sound对象去加载声音文件时,该对象就会建立1秒钟的缓冲区。在继续播放之前,会把1秒钟缓冲区填满。
2.var buffer:SoundLoaderContext = new SoundLoaderContext(5000);
sound.load(request,buffer);

8.偏移声音的起始位置 sound.play(起始的毫秒数)
9.多次播放声音 sound.play(起始的毫秒数,重复次数)    连续的话可以设成int.MAX_VALUE
10.制作缓冲进度条 利用sound的bytesLoaded 和 bytesTotal 这两个参数来实现。配合EVENT.ENTER_FRAME
11.读取声音文件的信息 sound.addEventListener(Event.ID3,onID3)
function onID3(evt:Event):void{
      sound.id3.songName;
      sound.id3.artist;
}

12.找出声音何时完成播放 soundChannel = sound.play();
soundChannel.addEventListener(Event.SOUND_COMPLETE,onNext);

13.当前声音已经加载的时间长度 sound.length
14.当前声音播放的时间长度 channel.position.
15.计算声音实际总长 sound.length/sound.byteLoaded     * sound.byteTotal

16.计算声音播放的进度 14 / 15
17.实现暂停,继续播放 channel = sound.play();
channel.stop();
position = channel.position
sound.play(position)

18.获取振幅 channel.leftPeak
channel.rightPeak

19.停止所有声音 SoundMixer.stopAll();
20.读取声音频谱 没看懂 为什么 P383 不会
21.改变声音的音量和平衡值 var soundTransform:SoundTransform = new SoundTransform(音量从0到1,平衡值从-1到1)
channel.soundTransform = soundTransform;




第16章 视频
一定要回过头,好好背背
1.载入和播放视频 1.var videoNetConnection:NetConnection = new NetConnection();
   videoNetConnection.connect(null);
2.var videoNetStream:NetStream = new NetStream(videoNetConnection);
3.var video:Video = new Video();
   video.attachNetStream(videoStream);
4.videoNetStream.play("video.flv");

2.控制声音和平衡值 var soundTransform:SoundTransform = new SoundTransform(音量从0到1,平衡值从-1到1)
videoNetStream.soundTransform = soundTransform;

3.读取播放时间 videoNetStream.time
4.读取视频会持续的时间 原理:所有编码器都会把视频的长度以元数据的形式放到flv中,当元数据载入后,就会调用onMetaData方法
代码:
var client:Object = new Object();
client.onMetaData = function(metaData:Object):void{ metaData.duration}
videoNetStream.client = client;

5。从第3秒开始播放 videoNetStream.seak(3);
6.视频缩放 1.Video的宽和高是width和height
2.Video也持有视频编码时的videoWidth videoHeight .但是这个不是马上就能获得的。
videoNetStream.addEventListener(NetStatusEvent.NET_STATUS, onStatus);
private function onStatus(evt:NetStatusEvent):void{
      if(video.videoWidth>0 && video.videoWidth!=video.width)
            video.width = video.videoWidth.
}
再背
7.管理与监控缓冲和加载 1.设置缓冲时间 videoNetStream.bufferTime = 100;
2.缓冲区进度条 videoNetStream.bufferLength/videoNetStream.bufferTime
3.byteLoaded和bytesTotal 这两个属性也是可以用的。
两个比例,缓冲比例。数据加载比例
8.监听信号点 1.信号点记录了什么。
   信号点名称name  
   信号点发生时间time
   信号点类型type不是event就是navigation
2.代码方式
  var client:Object = new Object();
  client.onCuePoint = function(cuePoint:Ojbect):void{ cuePoint.time .....}
获取信号点信息
9.对视频应用滤镜 直接用video的filters属性即可
10.暂停和继续播放视频 videoNetStream.pause(true);暂停
videoNetStream.pause(false);播放
这是错的
11.停止视频 1.videoNetStream.close() 这个方法会从播放器上删除flv文件
2.但是这种渐进式的方式,浏览器中肯定会缓存视频的,所有再play()的时候它的加载过程会快。
3.但是这又有了版本问题,可以加上版本控制,videoNetStream.play("video.flv?index="+new Data().getTime());
4.如果不想缓存的就话,就必须使用流媒体方式,就得使用诸如Flash Media Server技术,流送视频。
重点,好好背背
12.scrub视频 洗刷视频 就是用seek 配合一些逻辑 seek(秒数)
13.清理视频显示 当调用NetStream对象时,它并不会清理视频显示。视频的最后一个帧依然显示。
video.clear();
removeChild(video);
video.clear();
removeChild(video);
14.求出用户带宽 下载一个图片文件,计算下载时间,算出用户网络连接速度



第17章 存储持久化数据
文本                      10分钟 
滤镜                       5分钟
日期                       5分钟
声音                       40分钟


video                       10
so                           30
localconnection         30
发送和加载数据        30  
web service              30    20
js as                        30     30
file                           30     30
socket                      30     30
 
下午的安排:
13:00 -- 18:00
不想死的话给我必须完成!
1.创建和打开本地共享对象 1.LSO默认最大值为100KB.
2.可以通过flash player的settigns manager修改
3.LSO文件以二进制文件形式保存在客户端电脑上,后缀名为sol 
4.任何影片都可以通过flash.net.SharedObject类读写.sol文件
5.所在的路径为document and settings\username\application data\macromedia\flashplayer\#SharedObject\random.....
6.var sample:SharedObject  = SharedOjbect.getLoca("sample");

2.把数据写入共享对象 sample.data.username = "username";
sample.data.age = "18";

3.保存本地共享对象 var flushResult:String  = sample.flush(500*1024); 这个是要求系统最少得提供的空间.
P412 给出了各种不同的异常处理方式。
三种情况。
不让存,成功,pending

4.从共享对象读取数据 var sample2:SharedObject = SharedObject.getLocal("sample");
5.从共享对象移除数据 1.delete sample2.data.username
2.sample2.clear();

6.把Person类实例存储到共享对象里面 registerClassAlias("model.Person",Person);
var person:Person = new Person();
example.data.person  = person;
要知道registerClassAlias
在哪个包里面.

这个一定要记住!
很好用!
7.让同一个域的文件夹的swf可以访问同一个 var count:SharedObject = SharedObject.getLocal("count","/");


8.控制共享对象所用磁盘空间量 Security.showSettings() 方法.或者访问Flash Player Settings Manager
还有一种方法就是打开网页上的flash player管理器
这里面还有一些理论,还得多看看!像科比一样工作!



第18章 与其他影片通信
即同一台电脑上的swf间的通信!不同域间的也可以.
1.和其它影片通信的方式 1.在本地,使用LocalConnection
2.在远程
   1),使用远程共享对象 Remote Shared Object 和 Flash Media Server .
   2).用服务器套接字Socket
   3).对于非实时的通信,可以使用轮询 polling.方式来实现
要背下来
2.创建本地连接 1.只要那些影片是在相同电脑上运行的,就可以做连接,而不管影片是来自哪个域
2. var sender:LocalConnection:LocalConnection  = new LocalConnection();
   sender.send("channel的名字","接收方内的方法")
3.var receiver:LocalConnection:LocalConnecion = new LocalConnection();
   receiver.connect("channel的名字");
4.给监听方安排做些什么.receiver.example = function(){};等等.
  有三种方法:1.创d 建动态的LocalConnection的子类,2.创建LocalConnection子类,3.把请求重定向到客户对象。即receiver.client = {func : fun}.. 然后在接收方定义方法 fun;
5.为通信通道命名要在前面加上下划线,这样Flash Player就不会偷偷用域名信息把连接名称扩大。
6.使用LocationConnection时,通信是多对一的,几个发送者可以使用一条通道。但只有一个接收者。
  如果接收者试着连接另一个接收者已打开的通道,则connect()方法会抛出错误。
7.发送方和接收方影片必须同时在同一个电脑上播放,要让那些在相同电脑上不同时间播放的影片进行通信,可以使用Local Shared Object

3.发送数据 1.接受方swf代码
  registerClassAlias("model.Person",model.Person);
  var localConnet:...
  localConnet.connect("通道名")
  localConnect.client = this;

public function example(person:Person):void{
     trace(person.toString);
}

2.发送方的swf代码:
 registerClassAlias("model.Peson",Person)
var person:Person = new Person("名字",24);
var sender:ConnectConnection = new ...
sender.send("通道名","接收方的方法名","参数A", "参数B");

4.创建收条功能
很有用
发送方:
var sender:DynamicLocalConnection:...
sender.receipt = function(){....}
sender.connect("收条通道")
sender.send("数据通道","接收方里的方法","收条通道名")

接收方
var receiver:DynamicLocalConnect...
receiver.接收方里的方法名 = function(收条通道名:String):void{
     receiver.sender(收条通道名,"receipt");
}
receiver.connect("数据通道")
发送方发的时候,告诉发送方接收数据的通道和方法即可

当接受方接受到数据后,再把发送方提供给它的通道和方法用来反过来连接发送方并调用发送方的方法。
5.接收来自其他域的本地通信 1.receiver.allowDomain("adobe.com");



第19章 发送和加载数据

1.访问下载中的数据 用URLStream 
stream.byteAvaillable>0.
stream.readUTFBytes(要读取的长度);
很实用 ,即可以在加载的过程中通过侦听,ProgressEvent.PROGRESS
.

2.发送数据到服务端脚本 sendToURL    
navigateToURL() 这种方法是发送请求并在新窗口中打开响应。

要想有结果,那么得用URLLoaer.
这个是发送到服务器脚本。


第20章 xml 这是在补课 13:30前完成

1.XML 文档,此术语表示正在加载或发送的数据·

2.XML 包 只要是完整的块就可以叫包


3.XML 节点 有element text node 

4.XML 元素  这就是一个元素<tag></tag>   tag是一个标签

5.根节点 root node 

6.文本节点  包含文本的节点 

7.属性 以值对形式放在元素标签内 例如 <element name="value">

8.xml声明 <?xml version = "1.0"> 

9.xml树

10.节点和属性的选择,这两个其实差不太多
11.三种方式创建xml 1.var example:XML = <a></a>
2.var eg:XML = <a>{username}</a>
3.var str:String = "<a>"+username+"</a>"
  xml:XML = new XML(str)

2.删入节点 1. eg.a = ""  ;    
2. eg["a"] = '';  上面两种情况a即是新元素的标签名。
3. eg.insertChildBefore(eg.two,<one/>);
    eg.insertChildAfter(eg.two,<three/>);
4. eg.appendChild(<one/>)
    eg.prependChild(<one/>)
5. 添加属性  eg.@attrname = ""
也可以eg.@[属性的名字]

3.读取XML中的所有子元素 用elements()返回XMLList .然后用for each 来遍历
4.通过元素名来访问  点号 和 双点号 有时候还要用上[]号来访问 但双点号不能和[]来访问。
5.读文本节点的值   book.title.toString()
text()

6。读取元素的属性 attributes() 这是返回所有属性所组成的数组。
7.取出每二个属性的的名字 node.attributes()[1].name();
8.访问某个属性的值 node.attribute(属性的名字);
node.@*[0]  所有属性中的第一个

9.删除 用delete 如何使用都成
10.搜索xml  1.谓词过滤的方法。 var value:XMLList = group.fruits.fruit.(@color == "red");
2.group..*.(hasOwnProperty("@color")&&@color=="red");


11.如果里面有特殊的字符 <exp><![CDATA[    ]]></exp>
第21章 Web Services 和 Flash Remoting

1.一些论述 远端过程调用(Remote Procedure Call RPC ),是建立分布式和健壮应用程序的有力方式

RPC对多数Flash平台应用程序是必需的

你可以使用RPC从Flash Player发送数据给服务器,或者从服务器取出数据显示给用户看。

有很多种方式可从Flash Player 进行远程过程调用,然后,最突出的两个方式是:
Web services 和 Flash Remoting 

2.Web Services Web Services是基于SOAP(Simple Object Access Protocol,简单对象访问协议)的。这类Web Services使用SOAP作为服务器和客户端之间的通信方式。

SOAP可以把复杂数据类型序列化,意味着当你从客户端调用服务端方法时,既可以传递简单类型也可以复杂类型。服务端方法甚至可以返回复杂数据给客户端,例如数组,Date对象,以及自定义数据类型。

几乎每种平台都支持SOAP Web Services.包括Java,ColdFusion,PHP,.NET和Perl.但是Flash Player 没有内建Web Services机制,本身也不懂SOAP
3.AS调用Web Services FP可以通过HTTP通信,也可以分析XML数据,由于SOAP Web Services 是通过HTTP通信,而且是基于XML的协议,因此,使用AS调用Web Services方法便有了可能。
4.Flash Remoting的优点 1.Flash Remoting 也是使用HTTP.但是,不是使用SOAP,而是使用二进制协议,称为AMF(Action Message Format)。因为AMF数据包是二进制格式,你可以以较少代价传递较多数据。结果就是Flash Remoting 比 Web Service 更快
2.Flash Player本身支持Flash Remoting.
3.Flash Remoting 也可用于Java,ColdFusion,.NET.以及Perl .不过,似乎很多支持Web Service的非主流平台,目前并不支持Flash Remoting
web service     soap
flash remoting  amf
都是http协议
5.同步还是异步 Flash Remoting 和 Web Services都对服务方法采用异步请求,因此,两者都可用于创建高端的CS 应用程序。
6.调用Web Services方法 1.使用mx.rpc.soap.WebService对象,然后从WebService对象调用该方法
2.Flex框架包含,mx.rpc.soap.WebService类,可以通过AS简化Web Service的调用
  var webService:WebService = new WebService();
3.每个Web Service都必须有Web Service Description Language 即WSDL.你可以通过wsdl属性告诉WebService对象去哪找WSDL
  webSevice.wsdl = "http://www.rightactiosncript.com/webservices/FlashSurvey.php?wsdl";
4.调用方法前,必须使用loadWSDL()方法,从指定URL加载WSDL数据。
5.loadWSDL()方法会以异步方式请求WSDL数据,要加监听事件,以知道WSDL数据何时载入,当数据已经载入时,WebService对象为分派类型为mx.rpc.soap.LoadEvent的事件
webService.addEventListener(LoadEvent.LOAD,onWSDL)
6.一旦WSDL数据已经正确载入,就直接从WebService对象调用Web Service方法。例如,此例中所用的WSDL URL指向真实的Web service ,该服务有个方法,名叫getAverages().可以从WebService对象予以调用  
webService.getAverages();
7.如果该方法碰巧需要参数,就像正常AS方法一样,把参数传给该 方法。例如,同一个Web Service.也有一个名为takeSurvey()的方法,需要两个整数值参数,下面调用该方法,把10和15传进去。
webService.takeSurvey(10,15);
8.WebService 采用的是异步方式,意味着响应不会立即返回。
load 成功才可以调用方法!
7.处理Web services响应和错误 1.webServices.getAverages.addEventListener(ResultEvent.RESULT,onGetAverages)
然后你可以按正常方式调用该方法。
webService.getAverages()
2.webServices.addEventListener(FaultEvent.FAULT,onWebServiceFault);
FaultEvent类定义了一个类型为mx.rpc.Fault的fault属性,Fault对象以faultCode,faultDetail faultString rootCause属性返回有关错误的细节。

8.调用Flash Remoting的方法 1.使用NetConnection对象,连接到Flash Remoting网关,然后,使用call()方法调用该方法。
2.var netConnect:NetConnection = new NetConnection();
  netConnect.connect(Flash Remoting网关的URL)
3.connec()方法不会立刻尝试连接到网关URL,下上步是使用NetConnection的call()方法,以调用Flash Remoting的方法,call方法需要两个参数 call(服务和方法的名称和路径,如何处理方法调用的响应)
如果不用处理响应,那么第二个参数可以设为null
4.举例,如果你要使用http://........cfc里的ColdFusion组件,而CFC定义一个名为test()的方法。则以下代码可调用该方法。
netConnect.call("com.oreilly.as4cb.Example.test",null)
在这个括号后面还可以加上一些变量,表示想传进test方法的参数
要学会使用Flash Remoting
9.处理Flash Remoting响应 1.使用Responder 对象和call().
2.netConnect = new NetConnection()
  netConect.connect("http://........");
 var responder:Responder = new Responder(onResult,onRrror)
 netConnect.call("FlashSurvey.getAverages",responder)

function onResult(result:Object):void{}
function onError(result:Object):void{}
flash.net.Responder




第22章 建立集成应用程序

1.as调用js中的方法,向js的方法里传参 1.var title:String = ExternalInterface.call("getTitle")
2.js:function getTitle(){return window.title}
3.这个是同步的。即马上就会返回数据。
4.如果当前浏览器不支持ExternalInterface.那么
 var urlRequest:URLRequest = new URLRequest("javascript:alert('example')");
naivgateToURL(request); 这个方法是异步的。

2.js调用as中的方法 1.在as中
ExternalInterface.addCallBack("showMessage",displayMessage)
2.在js中
var flashPlayer
if(navigator.appName.indexOf("MicroSoft")!=-1){
       flashPlayer = window.objectId;
}else{
       flashPlayer = window.document.enbedName;
}
flashPlayer.showMessage();
在js中找到flashPlayer这步至关重要

if(navigator.appName.indexOf("MicroSoft")){
   flashPlayer = window.objectId
}else{
   flashPlayer = window.document.embedName
}
3.想从HTML传参数给SWF 1.在js中<embed src="example.swf" FlashVars="url1 = http://www...."/>
2.在example.swf的代码里。  root.loaderInfo.parameters 可以取出url1的值
3.应用: FlashVars只用于可以会改变的简单数据,而改变原因依赖于SWF部署的位置。




第23章 文件管理

1.相关类 flash.net.FileReference FileReferenceList 具体路径问题我还是搞不清楚
2.下载文件 try{
    fileReference.download(urlRequest,fileName);
}
catch(illegalOperation:IllegalOperationError){

}catch(security:SecurityError){

}

fileReference.addEventListener(Event.SELECT,onSelectFile);
fileReference.addEvnetListener(Event.CANCEL,onCancelFile);
fileReference.addEventListener(ProgressEvent.PROGRESS,onFileProgress)

function onFileProgress(evt:ProgressEvent):void{

}
fileReference的路径问题还没有搞清楚
下载和上传,我也还是没有搞清楚!
3.选择要上传的文件 fileReference.brower(); fileReference
browser
select以后
name 属性已经变了、
4.过滤可以看到的文件 var fileFilter:FileFilter = new FileFilter("Images","*.png;*.gif;*.jpg");
fileReference.browse([fileFilter1,fileFilter2]);
同样也适用于FileReferenceList.browse();

5.侦测用户何时选择要上传的文件 fileReference.addEventListener(Event.SELECT,onSelectFile);
fileReference.addEventListener(Event.CANCEL,onCancelFile);

6.上传文件 function onSelectFile(evt:Event):void{
   var urlRequest:URLRequest = new URLRequest();
   fileReference.upload(urlRequest,"UploadFile");
}
1.所有上传都使用POST
2.Content-Type为multipart/from-data 
3.默认情况下,Content-Disposition设置成Filedata.脚本需要知道Content-Disposition的值,才能读取文件数据。
4.如果脚本需要使用的Content-Disposition并非默认值,就得指定一个值,作为传给upload()方法的第二个参数。
5.如果使用的是FileReferenceList,那么你必须替该对象的fileList属性里的每一个文件都调用upload()方法




第24章  Socket编程

1.socket连接和服务器连接之间的主要差别在于 在于socket链接在数据传输完成后不会自动关闭
2.数据推送 当socket连接产生时,连接会一直开着,直到客户端或服务器端明确予以关闭。因此,socket可以进行特殊类型的通信,称为数据推送。
3.应用 一般应用于创建多用户应用程序。
4.两种socket连接 xml socket        flash.net.XMLSocket  
二进制 socket   flash.net.Socket
这两种连接都是异步的,直到事件处理器通知数据可用之前,都无法从socket连接读取数据

5.连接到Socket服务器 1.例子
var socket:Socket = new Socket();
socket.addEventListener(Event.CONNECT,onConnect);
socket.connect("localhost",2900);
2.要让Socket或XMLSocket对象使用跨域策略文件,需要使用flash.system.Security.loadPolicyFile()加载策略文件。
<cross-domain-policy>
   <allow-access-from domain="*" to-ports="80,110">
<cross-domain-policy>

6.发送数据 1.二进制socket的方法
socket.writeBytes(bytesArray,0,byteArray.length)......有很多写入方法
socket.flush() 把写入的数据发送出去,并把缓冲区清干净。
2.XML socket方法
socket.send();

7.接收数据 1.二进制socket 代码
var socket:Socket = new Socket()
socket.addEventListener(ProgressEvent.SOCKET_DATA,onSocketData);
socket.connect("localhost",2900);

function onSocketData(evt:ProgressEvent):void{
     while(socket.bytesAvailable){
        var data:int = socket.readByte();
        //var str:String = socket.readUTFBytes(socket.bytesAvailable);
    }
}

2.xml socket代码
  xmlSocket = new XMLSocket()
  xmlSocket.addEventListener(Event.CONNECT,onConnect);
  xmlSocket.addEventListener(DataEvent.DATA,onData);
  xmlSocket.connect("localhost",2900);

function onConnect(evt:Event):void{
     xmlSocket.send("<test/>");


function onData(evt:DataEvent):void{
     var response:XML = new XML (evt.data);
}


8.和Socket服务器握手 handshaking  而且需要知道所接收数据的context 请看代码code_cookbook_Socket的握手
9.关闭Sockets连接 1.主动地关闭
   socket.close()
2.当服务器关闭socket后
   var socket:Socket = new Socket() 
   socket.addEventListener(Event.CLOSE,onClose);

10.Socket两类错误 1.IOError
2.SecurityError   当swf文件为本地不受信赖文件,或者 端口号高于65535.

11.处理Socket错误 if(socket.connected){
  try{
      socket.flush();
  }catch(error:IOError){
      logInstance.write("socket.flush error\n" + error)
  }
  connectToSocketServer();
}





posted @ 2011-12-31 00:34  jason_xiao  阅读(203)  评论(0编辑  收藏  举报