AS3 CookBook学习整理(八)

1. AS3的事件机制

事件流机制即为捕获--目标--冒泡,分别对应event.eventPhase的值1(EventPhase.CAPTURING_PHASE),2(EventPhase.AT_TARGET),3(EventPhase.BUBBLING_PHASE)

假设有3个Sprite,分别为绿、蓝、黄(如图),层叠关系为绿色包含蓝色,蓝色包含黄色

情况一:最顶层的黄色有一个点击事件,另外两个没有点击事件

结果:target是--黄色方块,currentTarget是--黄色方块,阶段是--2

情况二:三个Sprite都有一个点击事件,然后点击最上层的黄色方块

结果:

target是--黄色方块,currentTarget是--黄色方块,阶段是--2

target是--黄色方块,currentTarget是--蓝色方块,阶段是--3

target是--黄色方块,currentTarget是--绿色方块,阶段是--3

可以看出来,event的target始终是指单击的目标,属于目标阶段;而currentTarget指向处理事件(即活动)的目标,属于冒泡阶段,currentTarget属性应具备两个条件,一是它注册了侦听器,二是正在处理事件

 {flash.display.Sprite;flash.events.MouseEvent;flash.text.TextField;flash.text.TextFieldAutoSize;Sample0413Sprite{lblInfo:TextField;Sample0413(){greenRect:Sprite = Sprite();greenRect.graphics.beginFill(0x00FF00);greenRect.graphics.drawRect(100,100,200,200);greenRect.graphics.endFill();greenRect.addEventListener(MouseEvent.CLICK,onGreenClick);greenRect.name = ;.addChild(greenRect);blueRect:Sprite = Sprite();blueRect.graphics.beginFill(0x0000FF);blueRect.graphics.drawRect(130,130,150,150);blueRect.graphics.endFill();blueRect.addEventListener(MouseEvent.CLICK,onBlueClick);blueRect.name = ;greenRect.addChild(blueRect);yellowRect:Sprite = Sprite();yellowRect.graphics.beginFill(0xFFFF00);yellowRect.graphics.drawRect(160,160,100,100);yellowRect.graphics.endFill();yellowRect.addEventListener(MouseEvent.CLICK,onYellowClick);yellowRect.name = ;blueRect.addChild(yellowRect);lblInfo = TextField();lblInfo.background = ;lblInfo.x = 10;lblInfo.y = 20;lblInfo.width = 400;.addChild(lblInfo);}onGreenClick(event:MouseEvent):{.lblInfo.appendText();}onBlueClick(event:MouseEvent):{.lblInfo.appendText();}onYellowClick(event:MouseEvent):{.lblInfo.appendText();}onClick(event:MouseEvent):{targetStr:String =  + (event.target    Sprite).name;curTargetStr:String =  + (event.currentTarget    Sprite).name;phaseStr:String =  + event.eventPhase;.lblInfo.appendText(targetStr +  + curTargetStr +  + phaseStr + );}}
}

2. FocusEvent焦点事件

一共有4个焦点事件:FocusIn、FocusOut、KEY_FOCUS_CHANGE、MOUSE_FOCUS_CHANGE

当焦点改变时focusIn和focusOut 事件会同时激活,它们属于不可取消的事件

keyFocusChange和mouseFocusChange是可取消的事件,可以调用FocusEvent.preventDefault( )方法取消默认事件

FocusEvent有一个relatedObject属性,对于focusIn而言,relatedObject属性是刚才拥有焦点的对象的;对于其它三个事件,relatedObject属性是现在接收到焦点的对象

 {flash.display.Sprite;flash.events.FocusEvent;flash.text.TextField;flash.text.TextFieldAutoSize;flash.text.TextFieldType;Sample0414Sprite{lblInfo:TextField;Sample0414(){textBox:TextField = TextField();textBox.name = ;textBox.type = TextFieldType.INPUT;textBox.background = ;textBox.width = 200;textBox.height = 20;textBox.addEventListener(FocusEvent.KEY_FOCUS_CHANGE,onKeyFocusChange);.addChild(textBox);textBox = TextField();textBox.name = ;textBox.type = TextFieldType.INPUT;textBox.background = ;textBox.width = 200;textBox.height = 20;textBox.y = 80;textBox.addEventListener(FocusEvent.KEY_FOCUS_CHANGE,onKeyFocusChange);.addChild(textBox);lblInfo = TextField();lblInfo.y = 200;lblInfo.autoSize = TextFieldAutoSize.CENTER;.addChild(lblInfo);}onFocusIn(event:FocusEvent):{txt:TextField = event.target    TextField;txt.text = txt.name;(event.relatedObject!=null){lblInfo.text =  + (event.relatedObject    TextField).name;}}onFocusOut(event:FocusEvent):{(event.relatedObject!=null){lblInfo.text =  + (event.relatedObject    TextField).name;}}onKeyFocusChange(event:FocusEvent):{txt:TextField = event.target    TextField;(txt.text == ) {event.preventDefault();} (event.relatedObject!=null){
strRelatedObj:String = (event.relatedObject    TextField).name;lblInfo.text = + strRelatedObj;}}} }

3. 监听用户输入的文本

通过TextEvent事件监听用户对文本框内容的修改,如删除,剪切,插入或者拷贝等操作,对文本框的每一次修改都会激活textInput事件,可以通过event.preventDefault()取消显示输入的文本

 {flash.display.Sprite;flash.events.TextEvent;flash.text.TextField;flash.text.TextFieldType;Sample0414Sprite{lblInfo:TextField;Sample0414(){textBox:TextField = TextField();textBox.type = TextFieldType.INPUT;textBox.background = ;textBox.width = 200;textBox.height = 20;textBox.addEventListener(TextEvent.TEXT_INPUT,onTextInput);.addChild(textBox);}onTextInput(event:TextEvent):{(event.text.toLowerCase().indexOf()>-1){event.preventDefault();}}}
}

4. 为TextField添加超链接

同设置样式一样,也有三种方式实现:直接加入标记、设置TextFormatter、设置CSS

设置TextFormatter:

textBox:TextField = TextField();
textBox.text = ;
formatter:TextFormat = TextFormat();
formatter.color = 0xFF0000;
formatter.url = ;
formatter.target = ;
textBox.setTextFormat(formatter);
.addChild(textBox);

设置CSS:

textBox:TextField = TextField();
textBox.htmlText = ;css:StyleSheet = StyleSheet( );
css.parseCSS();
textBox.styleSheet = css;.addChild(textBox);

5. 用超链接调用ActionScript代码

在一个链接地址前加上event:,即可以响应TextEvent.LINK事件。TextEvent.text属性就是url的地址

 {flash.display.Sprite;flash.events.TextEvent;flash.text.TextField;flash.text.TextFormat;Sample0414Sprite{Sample0414(){textBox:TextField = TextField();textBox.addEventListener(TextEvent.LINK,onClickLink);textBox.htmlText = ;formatter:TextFormat = TextFormat();formatter.color = 0xFF0000;formatter.url = ;formatter.target = ;textBox.setTextFormat(formatter);textBox.addEventListener(TextEvent.LINK, onClickLink);.addChild(textBox);}onClickLink(event:TextEvent):{(event.text);}}
}

6. 高级文本布局

TextField 类定义了一系列API用于精确控制文本布局:

getCharIndexAtPoint(x,y) -- 得到坐标(x,y)下的字符

getCharBoundaries(index) -- 得到索引index对应字符的Rectangle

numLines属性 -- 得到TextField的文本行数

getLineIndexAtPoint(x,y) -- 得到坐标(x,y)下对应的行索引

getLineIndexOfChar(index) -- 得到索引index对应字符的行索引

getLineLength(lineIndex) -- 得到索引lineIndex对应行的字符数

getLineText(lineIndex) -- 得到索引lineIndex对应行的文本

getLineOffset(lineIndex) -- 得到索引lineIndex对应行的第一个字符的索引

getLineMetrics(lineIndex) -- 得到索引lineIndex对应行的度量信息,包括x,width,leading,height,descent,ascent相关属性

getFirstCharInParagraph(index) -- 如果给定一个字符索引index,则返回同一段落中第一个字符的索引

getParagraphLength(index) -- 如果给定一个字符索引,则返回包含该字符的段落的长度

 {flash.display.Sprite;flash.events.MouseEvent;flash.text.TextField;flash.text.TextFieldType;Sample0421Sprite{label:TextField;Sample0421(){textBox:TextField = TextField();textBox.type = TextFieldType.INPUT;textBox.multiline = ;textBox.htmlText = ;textBox.addEventListener(MouseEvent.CLICK,onClick);textBox.background = ;textBox.wordWrap = ;.addChild(textBox);label = TextField();label.background = ;label.x = 150;label.width = 250;label.height = 300;.addChild(label);}onClick(event:MouseEvent):{txt:TextField = event.target    TextField;label.text = ;{label.appendText(+txt.numLines+);label.appendText(+
txt.getLineIndexAtPoint(mouseX,mouseY)+);label.appendText(+
txt.getLineIndexOfChar(20)+);label.appendText(+txt.getLineLength(2)+);label.appendText(+txt.getLineText(2)+);label.appendText(+txt.getLineOffset(2)+);label.appendText(+txt.getLineMetrics(2).width+);label.appendText(+
txt.getFirstCharInParagraph(5)+);label.appendText(+
txt.getParagraphLength(3)+);(txt.text.charAt(5));}(ex:Error){label.text = ex.message;}}} }

7. 高级抗锯齿

对于嵌入字体可通过设置文本框的antiAliasType属性为flash.text.AntiAliasType.ADVANCED,然后设置gridTypeFit和sharpness属性

flash.text.AntiAliasType.NORMAL -- 应用常规文本消除锯齿功能。 这与 Flash Player 7 和更早版本中使用的消除锯齿类型匹配。

应用高级消除锯齿功能,这增加了文本的可读性。 (此功能在 Flash Player 8 中可用。) 高级消除锯齿功能可以高品质呈现小尺寸的字体。 它最适合在具有大量小字号文本的应用程序中使用。 建议不要对大于 48 磅的字体使用高级消除锯齿功能

gridFitType属性用于此文本字段的网格固定类型,仅在文本字段的 flash.text.AntiAliasType 属性设置为 flash.text.AntiAliasType.ADVANCED 时才应用此属性

flash.text.GridFitType.NONE -- 指定无网格固定。 不强制根据像素网格调整字型中的水平线和垂直线。 此设置通常适合动画或大号字。

flash.text.GridFitType.PIXEL -- 指定粗水平线和垂直线适合像素网格。 此设置仅适用于左对齐文本字段。 若要使用此设置,文本字段的 flash.dispaly.AntiAliasType 属性必须设置为 flash.text.AntiAliasType.ADVANCED。 此设置通常能为左对齐文本提供最佳可读性。

flash.text.GridFitType.SUBPIXEL -- 指定粗水平线和垂直线适合 LCD 显示器上的子像素网格。 若要使用此设置,文本字段的 flash.text.AntiAliasType 属性必须设置为 flash.text.AntiAliasType.ADVANCED。 flash.text.GridFitType.SUBPIXEL 设置通常适合右对齐或居中的动态文本,有时,为了在动画与文本品质之间达到一种平衡,也可使用此设置。

sharpness 属性范围在-400 到400,默认为0 ,它决定字体外框的清晰程度。值越低越模糊,越高越锐利。当文字比较模糊时可以设置gridFitType 为PIXEL 或SUBPIXEL 以提高清晰度

8. 替换文本

使用replaceSelectedText(newText)方法替换选中的文字或用replaceText(startIndex,endIndex,newText)方法替换某一范围的文字

 {flash.display.Sprite;flash.events.KeyboardEvent;flash.text.TextField;flash.text.TextFieldType;Sample0422Sprite{Sample0422(){textBox:TextField = TextField();textBox.type = TextFieldType.INPUT;textBox.background = ;.addEventListener(KeyboardEvent.KEY_DOWN,onKeyDown);.addChild(textBox);}onKeyDown(event:KeyboardEvent):{(event.keyCode == 13){txt:TextField = event.target    TextField;txt.replaceSelectedText();txt.replaceText(0,2,);}}}
}

9. 获取可用字体列表

Font.enumerateFonts(bool)方法返回可用字体列表,参数默认为false,将返回一个只包括嵌入字体的列表;为true则返回一个包括所有字体(设备字体和嵌入字体)的列表

 {flash.display.Sprite;flash.text.Font;[Embed(source=,fontName=,mimeType=)]Sample0422Sprite{Sample0422(){allFonts:Array = Font.enumerateFonts(); allFonts.sortOn(, Array.CASEINSENSITIVE);for (i:uint=0; i<allFonts.length; i++){  (allFonts[i].fontName);} }}
}

10. 改变颜色

先获取可视化对象的obj.transform.colorTransform对象,然后修改该对象,再重新赋值给对象

设置颜色,可以直接设置ColorTransform.color属性,也可以分开设置redOffset,greenOffset,blueOffset和alphaOffset;取值范围是-255到255(alpha 值范围在0 到100,与alphaOffset是不同的)

 {flash.display.Shape;flash.display.Sprite;flash.geom.ColorTransform;Sample0422Sprite{Sample0422(){rect:Shape = Shape();rect.graphics.beginFill(0xFF0000);rect.graphics.drawRect(100,100,150,100);rect.graphics.endFill();.addChild(rect);ct:ColorTransform = rect.transform.colorTransform;ct.redOffset = 128;ct.greenOffset = 128;ct.blueOffset = 128;ct.alphaOffset = 50;rect.transform.colorTransform = ct;}}
}

 

转载于:https://www.cnblogs.com/CoderWayne/archive/2010/07/15/1778065.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/423112.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

边缘计算+云计算

后续更新中 边缘计算云计算&#xff1a; 促进企业数字化向数智化发展概念1.以下是边缘计算的四个组织2. 边缘设备对IoT的增强作用 &#xff08;更新&#xff09;3. 边缘计算应用于IoT的四个层次4. AI在边缘设备计算领域的三种应用场景5. 云服务架构6.案例解析6.1国家电网&#…

【剑指offer - C++/Java】3、从尾到头打印链表

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 牛客网题目链接&#xff1a; 从尾到头打印链表 文章目录题目描述1、递归解法1.1、 递归解法一java代码&#xff1a;C代码分析&#xff1a;1.2 递归解法…

网络协议之http和tcp思维导图

http协议和tcp协议之前学的整理一部分&#xff0c;后续更新

【剑指offer - C++/Java】4、重建二叉树

牛客网题目链接&#xff1a;重建二叉树 文章目录0 题目描述&#xff1a;1、题目分析2、代码2.1、java代码2.2 C代码3、总结0 题目描述&#xff1a; 输入某二叉树的前序遍历和中序遍历的结果&#xff0c;请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字…

Windows下Android开发环境 搭建

1、 下载Android SDK &#xff08;1&#xff09;官网下载解压后即可用。 在http://androidappdocs.appspot.com/sdk/index.html 下选择 合适自己的平台下载&#xff0c;下载后解压 运行 【SDK Setup.exe】 出现在线安装包。 会出现“Failed to fetch URL https://dl-ssl.google…

【OS学习笔记】二 汇编语言和汇编软件

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 上一篇文章讲解了处理器&#xff0c;内存&#xff0c;和指令。学习了Intel 8086处理器的相关知识&#xff0c;如Intel通用寄存器的作用&#xff0c;程…

【软件开发底层知识修炼】一 深入浅出处理器之一 微处理器与微控制器

学习交流加&#xff08;可免费帮忙下载CSDN资源&#xff09;&#xff1a;个人微信&#xff1a; liu1126137994学习交流资源分享qq群1&#xff08;已满&#xff09;&#xff1a; 962535112学习交流资源分享qq群2&#xff1a; 780902027 深入浅出处理器这几篇文章可能你觉得对软件…

【软件开发底层知识修炼】二 深入浅出处理器之二 中断的概念与意义

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 上一篇文章我们学习了微处理器与微控制器的区别。点击链接查看上一篇文章的内容&#xff1a;微处理器与微控制器 本篇文章我们学习中断的概念与意义。…

推荐学习-数据结构与算法之美

推荐一个学习资源&#xff1a;数据结构与算法之美。主要包括以下几个学习内容&#xff1a; 20个经典数据结构与算法100个真实项目场景案例文科生都能看懂的算法手绘图解轻松搞定BAT的面试通关秘籍 作者&#xff1a;王争 前谷歌工程师 内容很强。扫描我的二维码买的话&#x…

【软件开发底层知识修炼】三 深入浅出处理器之三 内存管理与内存管理单元(MMU)

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 上一篇文章学习了中断的概念与意义&#xff0c;以及中断的应用-断点调试原理。点击链接复习上一篇文章&#xff1a;中断的概念与意义 本片文章继续学…

hbase思维导图

持续更新中 hbase思维导图 感谢分享1. hbase 概述2. hbase 数据模型3. hbase 架构4. hbase 的读写流程5. hbase 优化1. hbase 概述 2. hbase 数据模型 3. hbase 架构 4. hbase 的读写流程 5. hbase 优化

安卓从入门到进阶推荐学习方法与书籍整理(pdf)

前言&#xff1a;技术书阅读方法论 一.速读一遍&#xff08;最好在1~2天内完成&#xff09; 人的大脑记忆力有限&#xff0c;在一天内快速看完一本书会在大脑里留下深刻印象&#xff0c;对于之后复习以及总结都会有特别好的作用。 对于每一章的知识&#xff0c;先阅读标题&…

SharePoint中的权限体系

1.MOSS中的权限结构 MOSS中的权限结构主要有三部分&#xff1a;网站权限&#xff0c;列表权限&#xff0c;个人权限。 网站权限由18种如下图&#xff1a; 列表权限由12种&#xff0c;如下图&#xff1a; 个人权限由三种&#xff0c;如下图&#xff1a; 2.权限级别 上面提供…

MobaXterm_Personal_20.1最简单方式链接阿里云服务器

MobaXterm_Personal_20.1链接购买的阿里云服务器1.登录到阿里云首页2.阿里云首页3. 找到 服务器实例4. 重置密码5. 配置 MobaXterm_Personal_20.15.1 MobaXterm_Personal_20.1介绍6. 输入重置的密码1.登录到阿里云首页 2.阿里云首页 3. 找到 服务器实例 4. 重置密码 5. 配置 Mo…

机器学习和python学习之路精心整理技术书从入门到进阶

“机器学习&#xff0f;深度学习并不需要很多数学基础&#xff01;”也许你在不同的地方听过不少类似这样的说法。对于鼓励数学基础不好的同学入坑机器学习来说&#xff0c;这句话是挺不错的。不过&#xff0c;机器学习理论是与统计学、概率论、计算机科学、算法等方面交叉的领…

FusionChart完全入门手册8

动画样式类型 FusionCharts做得最好的事情之一就是图表动画序列&#xff0c;这是用户静静乐道的。默认情况下&#xff0c;FusionCharts仅在数据绘制&#xff08;柱状图、饼图、折线图等&#xff09;时候使用动画。但是FusionCharts V3不限制你的想象力。 使用动画样式,你可以…

算法与数据结构+一点点ACM从入门到进阶吐血整理推荐书单(珍藏版)

学习交流加&#xff08;可免费帮忙下载CSDN资源&#xff09;&#xff1a; 个人微信&#xff1a; liu1126137994 学习交流资源分享qq群1&#xff08;已满&#xff09;&#xff1a; 962535112 学习交流资源分享qq群2&#xff1a; 780902027 前言&#xff1a;技术书阅读方法论…

工作中使用的工具

工作中使用的工具分享一下后续持续更新

【软件开发底层知识修炼】四 深入浅出处理器之四 结合高速缓存以及TLB与虚拟内存

学习交流加 个人qq&#xff1a; 1126137994个人微信&#xff1a; liu1126137994学习交流资源分享qq群&#xff1a; 962535112 文章目录0、回顾1、高速缓存&#xff08;Cache&#xff09;的引入2、利用TLB加速地址翻译3、Cache与物理内存是如何映射的3.1、直接映射法&#xff1a…