Flash、Flex、RIA、web、Linux和我的生活
Flash Text Engine、Text Layout Framework在Flex、Flash中的实现
若需转载本站原创文章,请注明: 转载自zrong's Blog
本站转载的文章标题会标明[转]。
本文链接地址: Flash Text Engine、Text Layout Framework在Flex、Flash中的实现
在在Flex中实现聊天表情图片支持-资料篇一文中,我提到了FTE(Flash Text Engine)和TLF(Text Layout Framework)。它们的强大自不必多说,可去该文章提供的网址查看,或者直接看这个Demo。但是,在Flex与Flash中有对应的组件可以使用么?FTE和TLF是什么关系?下面就来说说吧 
关系
用下面这张图来说明是最好的了。TLF是建立在FTE的基础上的。或者说TLF在FTE的基础上实现了“高级功能”。直接使用FTE是很难受的(后面我会专门写文章演示代码),连Adobe都这样说:
“FTE 提供对文本度量、格式和双向文本的复杂控制的低级别支持。尽管可以使用 FTE 创建和管理简单的文本元素,但设计 FTE 的主要目的在于为开发人员创建文本处理组件提供基础。”
请注意加粗的部分。Adobe认为FTE并不适合做文本处理。因此,Adobe又做了TLF,并且将TLF整合到了Flex SDK 4.0(Gumbo)中。但TLF同样不是组件。不过TLF已经可以将需要显示的文本输入到DisplayObject当中,并加入了对选择文本、编辑文本、快捷键、事件的支持,虽然仍不能直接支持滚动条(配合事件和滚动条组件是可以支持的),但这已经前进了一大步,更方便我们使用了。
那我们就基于TLF来开发么?不是。我需要的是像Flash或者Flex中的TextArea组件一样来简单的使用TLF。为了实现我这个美好的愿望,Adobe针对Flash CS4制作了Text Layout Component组件,针对Flex的组件则包含在新的spark包中。
下载Text Layout Component:
Text Layout Component (1.5 MiB, 492 hits)
Text Layout Component 使用范例 (6.5 MiB, 592 hits)
说到这里,这个关系就比较顺了。TLF就是FTE的扩展,这个扩展其实还是代码层面多些。而Text Layout Component和spark中的相关组件又是TLF的扩展,它们才是真正的组件级别的应用。所以,我把主要的精力放在熟悉组件的功能与特性上(人懒,没办法
)。当然,对于TLF和FTE我也做了了解,毕竟它们是底层。

本图片采用国产软件EDrawMax绘制,本图片的源文件下载:
FTE/TLF的关系图(源文件) (8.2 KiB, 204 hits)
| 这篇文章由zrong于2009-08-21 10:10发表在技术。你可以订阅RSS 2.0 也可以发表评论或引用到你的网站。 |
没有评论
Flash CS3 9.02绿色版(解决JAVA运行环境和创建Flash放映文件的错误)
大约4天前 - 2个评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: Flash CS3 9.02绿色版(解决JAVA运行环境和创建Flash放映文件的错误) 不看文章中的废话直接下载 Flash自从被Adobe收购后,安装包就做得越来越大。回想起Flash MX 2004时代,安装包不到100M,可现在都被Adobe搞得过G了。安装一次更是耗时十几分钟,痛苦啊…… 在做Flash开发的时候,我更多的是使用纯AS做开发,Flash只是被用作资源保存的工具,而Flash CS3已经提供了AS3的支持,并且比CS4、CS5更加快速和稳定,这就足够使用了。 网上下载的Flash CS3 9.02 精简绿色中文版大多有两个问题,以下是解决办法: 问题:创建Flash放映文件时出错 解决:在绿色版安装目录下建立“player”文件夹,并下载一个最新的Flash Player 9独立播放器文件,将其复制进入“player”文件夹并将文件名改为“flashplayer.exe“即可解决。 问题:在使用AS编辑面板的时候以及编译的时候弹出“Java运行时环境初始化时出现错误,你可能需要重装Flash”提示 解决:在绿色版安装目录下建立“jvm”文件夹,然后下载并安装JAVA虚拟机(也就是上面出错提示中提到的JAVA运行环境),最后从JAVA虚拟机的安装目录中将“bin”和“lib”文件夹复制到“jvm”下即可。 我将上面两步都完成的Flash CS3 9.02版重新打包,集成jre6.21和Flash Player 9.0.280,一共65MB,需要的朋友可以在这里下载。
在基于Flex4的AIR程序中改变状态栏字体大小
大约1周前 - 没有评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: 在基于Flex4的AIR程序中改变状态栏字体大小 在Flex3时代,要改变AIR程序的状态栏字体,可以使用修改CSS的方法: ?View Code XML<mx:Style> .boldRed { color: red; fontSize: 12; fontWeight: bold; } WindowedApplication { statusTextStyleName: boldRed; } </mx:Style> 但是,在Flex4中,这招不管用了,默认的spark组件采用了新的方法来定义皮肤,这直接导致你根本找不到statusTextStyleName属性。 幸运的是,spark提供了更好的方法。spark的Window或者WindowedApplication组件的默认皮肤都包含statusText这个“外观部件”,我们对它的属性进行设置即可。当然,我们也可以完全重写默认的skin,skin采用MXML写成,更好编辑。这个组件的路径在这里: [Flash Builder安装路径]\sdks\[SDK版本]\frameworks\projects\airspark\src\spark\skins\spark\ ?View Code XML<?xml version="1.0" encoding="utf-8"?> <s:WindowedApplication xmlns:fx="http://ns.adobe.com/mxml/2009" xmlns:s="library://ns.adobe.com/flex/spark" xmlns:mx="library://ns.adobe.com/flex/mx" applicationComplete="init()" status="测试"> <fx:Style> @namespace s "library://ns.adobe.com/flex/spark"; @namespace mx "library://ns.adobe.com/flex/mx"; s|WindowedApplication { font-size: 12; font-family:"Microsoft YaHei,SimSun"; }
Flash大型在线游戏推荐
大约1周前 - 没有评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: Flash大型在线游戏推荐 http://tankionline.com http://www.smallworlds.com
[转]Flash/Flex Builder <-> Flash Professional 载入资源文件方法考
大约2周前 - 1个评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: [转]Flash/Flex Builder Flash Professional 载入资源文件方法考 资讯类型: 翻译 来源页面:http://richardleggett.co.uk/blog/index.php/2010/03/08/flash_builder_and_flash_pro_asset_workflows 资讯原标题: Flash/Flex Builder <-> Flash Professional Asset Workflows 资讯原作者: Richard Leggett 转自:http://bbs.9ria.com/viewthread.php?tid=46629 Flash/Flex Builder <-> Flash Professional 载入资源文件方法考 这篇文章描述了Flash/flex中载入图片等资源文件的几种方法,目前Flash最新的版本是Flash Pro CS4,CS5快要发行beta版。那么,我们来具体的看一看如何输出SWC文件,并通过[Embed]元标签来获得资源的方法。 背景 如果,你正在创建一个应用程序,一个游戏,或者一个网站。在设置你的Flash项目时,有两种选择。1 你可以创建一个FLA文件,指定一个文档类进行编码。或者2,你也可以选择Flash/Flex Builder,FDT,Flash Develop等,创建一个Flex或者AS3项目,然后使用Flex SDK编译它。几乎每一次,我都选择后者,因为后者增强了程序的可靠性,而且编译速度更快。 即使你选择了使用Flash Pro创建并编译FLA文件,你也可能会在Flash Builder或者其他IDE中修改代码。但问题是,之前你使用的是Flash Pro编译,接着要使用Flex SDK进行编译。写这篇东西的目的是,当我们使用Flex SDK编译Flex或者AS3项目时,我们如何通过FLA载入资源的。 我尽可能的将我所知道的写出来,但一定会有些技巧和窍门,甚至是方法,是我所不知道的。如果你发现任何错漏的地方,请一定让我知道,我会尽快修正。 为什么非要是FLA文件? 你可能已经知道,可以将PNG图像,SVG和其他文件类型嵌入到你的类中,并且永远也不需要通过FLA文件获取图形。当涉及到动画,你可以使用TweenLite或者GTween。但是涉及到帧动画,角色动画,或者干脆是按钮和手绘的元件时,你可能需要使用Flash Pro上强大的时间轴,图形和动画工具去创建元件,并使它们动起来,这时就需要FLA了。 这时候你该问问自己,如果我的项目不使用Flash Pro编译,那么如何从FLA中获取资源导入到项目中去? 工作流程 这里有五种将FLA中的资源嵌入到Flex或者纯AS3项目中的方法。为了照顾通用性,我已经排除了那些只适用于MXML的方法。 1 通过FLA发布SWC 这个方法涉及到库元素链接类,你必须在元素链接中写明类的路径,例如“com.package.MyClass”。接着你必须选择在“Flash发布设置面板中”勾选“导出SWC”,然后打开“AS3设置面板”勾选“自动申明舞台实例”选项以避免错误。最后,添加所有必须的类路径以避免在编译的时候出错。
Flash平台开发者”技能树”
大约2周前 - 没有评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: Flash平台开发者”技能树” http://swfever.com/?p=871
[转]Flex开发者需要知道的10件事
大约3周前 - 没有评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: [转]Flex开发者需要知道的10件事 转自InfoQ 不久前,Michael Portuesi发表了一篇博文,谈到了Flex开发者需要知道的10件事。文章介绍了每个进入Flex领域的开发者都需要掌握的基本知识与技能。 Michael Portuesi给出的10个条目中,有些是开发者需要了解的简单细节信息;有些则揭示了Flash/ActionScript/Flex与其他开发环境之间的差别。 如果你了解HTML/CSS并熟悉JavaScript,但却对ActionScript或Flex一无所知的话,那么应该花些时间学习一下面向对象编程,因为ActionScript是一门完全的面向对象编程语言,而Flex则是一个面向对象的框架。 1. 再简单的东西也是异步的 Flex是一个异步框架,因此我们绝对不能指望代码调用后就能立刻执行。事实上,我们是无法预知方法的调用序列的。 2. 搞清楚Flex组件的样式与属性 Flex UI组件(按钮、菜单等等)既有属性(通过ActionScript语言指定)也有样式(通过Flex框架指定)。搞清楚他们之间的区别是非常重要的,因为组件的某些可视化效果可以通过属性指定,但另一些却只能通过样式设定。通过属性指定: button.width = 100; button.height = 50; 通过样式指定: <mx:Style> Button { color: #cc0000; textRollOverColor: #ccff00; fontFamily: Trebuchet MS; } </mx:Style> <mx:Button id=”setupB” text=”Click Me” click=”onSetup()” /> 3. Flex中的样式与HTML中的不尽相同 可以使用标准的CSS样式表来为Flex组件添加样式,也可以在Flex应用中包含CSS样式表。虽然标准CSS使用连字符(例如text-font)格式来定义样式名称,但是Flex使用驼峰式的命名格式(例如textFont)。这是因为连字符不能出现在XML的属性中,所以不能用这样的名字作为MXML标签的属性。 当然了,如果把样式定义在外部的CSS文件中或者Style标签中,也可以使用连字符格式的样式名。此外,Flex还定义了很多HTML中不存在的CSS样式。 4. 尽管看起来不同,但MXML和ActionScript本质上是一回事 在Flex中声明的所有MXML标签都会被Flex编译器转换为ActionScript代码;当然了,也可以在MXML文件中嵌入内联的ActionScript代码。既可以使用MXML也可以使用ActionScript创建新组件。 5. 理解Flex的Code-behind模式 虽然MXML和ActionScript本质上是一样的,但他们各司其职。一般来说,MXML负责显示界面,而ActionScript用来完成功能。Code-behind用于解耦MXML和ActionScript,这样设计师可以直接修改MXML而无需阅读代码,程序员则可以更好地组织和重用功能。 6.
[转]Flash开发者需要知道的10件事
大约3周前 - 没有评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: [转]Flash开发者需要知道的10件事 转自InfoQ 近日John Lindquist谈到了在为Roundarch公司招聘Flash/Flex开发人员时的一些感受。他认为最难的地方在于问什么问题才能最好地了解到应聘者的Flash/Flex开发技能。因此,他给出了一个列表并说到:“根据我的经验,通过这个列表能更好地判断面试者的技术水平和经验”。 本文就将概要地介绍Flash开发者需要知道的10件事并给出进一步阅读的链接。 1. 弹性“跑道“模型 开发者应该知道事件何时被触发,代码何时被执行,Player何时进行渲染,这是每个Flash开发者都需要掌握的Flash Player基础概念。 延伸阅读 http://www.craftymind.com/2008/04/18/updated-elastic-racetrack-for-flash-9-and-avm2/ 2. FlexSDK、mxmlc、compc… 开发者应该知道在点击Eclipse中的“run”按钮时都发生了哪些事情。 延伸阅读 http://www.senocular.com/flash/tutorials/as3withmxmlc/ http://livedocs.adobe.com/flex/3/html/help.html?content=apparch_08.html 3. Player事件、客户化事件以及事件冒泡 没有帧(Frame)和鼠标点击的Flash Player是无法想象的。 延伸阅读 http://www.adobe.com/devnet/actionscript/articles/event_handling_as3_03.html http://livedocs.adobe.com/flex/3/langref/flash/events/package-detail.html http://www.tink.ws/blog/custom-events-in-as-30-dont-forget-to-override-the-clone-method/ http://jacwright.com/blog/70/how-to-listen-to-flash-events-that-dont-bubble/ 4. 语句、关键字和指令 开发者不应该对AS3中新出现的关键字感到惊讶。如果不知道“static”或是“override”是什么意思,学就行了。 延伸阅读 http://livedocs.adobe.com/flex/2/langref/statements.html 5. ASDoc 今后当你再一次阅读自己编写的代码时可能看不懂写的是什么了,因此恰当的文档是非常必要的,但如果能自动生成岂不美哉? 延伸阅读 http://livedocs.adobe.com/flex/3/html/help.html?content=asdoc_3.html 6. 管理好可视化资源(图片、字体、CSS等等) Flash是可视化的东西,因此有必要了解代码与资源的管理手段。 延伸阅读 http://www.gskinner.com/talks/flexlovesflash/ http://code.google.com/p/queueloader-as3/ http://code.google.com/p/bulk-loader/ 7. 理解Array、Collection、Dictionary与Map 通常开发者不会只处理一个MovieClip,因此需要了解如何控制多个对象。 延伸阅读 http://livedocs.adobe.com/flash/9.0/ActionScriptLangRefV3/Array.html http://www.gskinner.com/blog/archives/2006/07/as3_dictionary.html http://code.google.com/p/as3ds/
Flash Builder 4 For Linux
大约3月前 - 9个评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: Flash Builder 4 For Linux 工作原因,必须在Ubuntu下面安装Flash Builder和Flash CS4,搜索一番找到两篇文章: How to install Flash Builder on Linux Installing Adobe CS4 in Wine Flash Builder的那篇,针对的是Beta1,我用正式版试了一下,不成功。安装Flash CS4的那篇由于比较麻烦,就没有试。况且现在都CS 5了,试了也没意义。 Adobe的东西,在Wine下总是很麻烦。倒是原来Macromedia的Flash 8绿色版直接在Wine下运行得很好。 接下来就是重头戏了:安装Linux下原生的Flash Builder 4。 其实,Adobe labs有一个这样的项目:Flex Builder 3 for Linux,但这个项目多半已经停止开发了。因为Flash Builder是基于Eclipse的,而Eclipse本就跨平台,所以理论上可以将Window下的Flash Builder移植到Linux下面来。既然Adobe不愿意做,那么eshangrao就自己做了。 安装方法: 1.安装Eclipse,我直接安装源里的3.5.2版本 sudo apt-get install eclipse 2.下载FB4Linuxaa、FB4Linuxab、FB4Linuxac、FB4Linuxad、FB4Linuxae、FB4Linuxaf并放在同一个文件夹,然后执行: cat FB4Linux* >FB4Linux.tar.bz2 3.解压缩 tar xjf
[转]十个Flex/Air疑难杂症及解决方案简略
大约3月前 - 没有评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: [转]十个Flex/Air疑难杂症及解决方案简略 今天寻找原来写的关于FXG的文章,无意中发现sban写的几篇很不错的文章都看不到了,原来他的博客挂了。google到新的博客,也没有发现原来的博文。但又找到几篇不错的文章,看来还是转过来保险 原文作者:sban 原文地址:http://sban.biz/239 以下为转载 杂症病因及解决方案简略: 1, 在TileList中如果选择档过多,会出现卷轴,当拖动卷轴时,渲染的进度条会出现花屏现象; 并非TileList有这个问题,在Flex3内,DataGrid,List,Tree等控件如果使用不当,均存在这个问题;在先前的fl组件包内的TileList组件也有类似阴影。根本原因在于,使用ItemRenderer的大数据控件,其在渲染时,并不会一次创建所有数据列/行的显示对象 (ItemRenderer),它仅会创建在屏幕上可见的数据列/行,并且重复利用这些显示对象,以提交运行时效率。 可以做这样一种代码实验,以帮助人们理解这种机制:在一个TileList控件内,它本身有滚动条,它的ItemRenderer也使其有滚动条,在多屏数据的情况下,任意滚动一个ItemRenderer的滚动条,然后滚动TileList的滚动条到另一屏,你会发现,虽然数据已经变了,你从未滚动过这个数据,但它与你先前滚动过的那个数据具有相同的滚动位置。 从严格意义上讲,这并不能算是Adobe的bug,因为如果你严格按照Adobe的官方说明使用,多数情况下,是不会出现的,因此这个bug的复现也颇具难度。从Flex SDk 3.5开始,Adobe Flex团队,对所有基于ItemRenderer实现的数据控件针对开发者遇到的问题进行了改良,优化了SDK内部控件实现方法,并且添加了一个 offscreenExtraRowsOrColumns属性,该属性意为非显示区域的行或列数,用于帮助开发者在特定情况下遇到的花屏问题。 如果遇到这个问题,如果解决(方案按优先级自上向下排列): 1) 修改策划 显示大数据时,传统滚动条是一个糟糕的设计,因为人的眼晴对于大量的,重复结构的数据,很难定位上次查看的位置,多数人都是边察看边用指在屏幕上做标记。此种情况下, a)要么不使用滚动条,使用翻页,用户每次翻页后,重新取数据、向数据控件赋值,在这种情况下,DataGrid,TileList等均不会出现花屏问题,因为压根儿就不会有滚动,但在此时,使用Repeater效率更高。 b)要么设计一种粗粒度滚动条,在这种粗粒度滚动中,每一个点相关于翻页设计中的一页,用户拖动时还相当有手感,相对传统滚动条要好许多,这种设计在许多产品中都已经开始使用。 2)在更新DataProvider时手动刷新控件视图 每次当data有变化,均手动再次设置一次ItemRenderer,大意如下: list.itemRenderer = new ClassFactory(YourItemRenderer); 注:在Gumbo中,如果使用Bindable绑定数据,FB在编译时已经做了代码优化。所以,多数时候,按照官方方法可以避免很多问题。 3)使用offscreenExtraRowsOrColumns属性调整 这是最BT的方案,让人感觉是Adobe自己用算法难已处理了,所以请用户告诉控件目前有多少数据列/行在显示区外。具体用法请参照livedoc说明。 2-4,电子白板中,控制权转移;录制;画面同步 在白板开发中,控制权转移,画面同步,录影属于基本功能点。在技术技巧上,录影使用ImageSnapshot取得数据,剩下的便是系统架构师的事情。白板若要做好,方方面面必须设计好,特别是多人同时在线应用。 最基本的白板实现方案是基于ShareObject,但这种实现是demo级的,既浪费资源性能又低,比较合理的设计,作者认为应该是这样: 1)控制权转移实则是多人数据同步,数据同步不要使用SO,当控制权变化时,由Server处理并向Client广播,如果在同一时间内白板只充许有一人控制,此时仅需向二人广播,如果其它人也需要知道当前人控权者是谁,通过另外统一的状态广播实现。 2)画面同步必须设计出二种机制,一种为指令绘制型,另一种为图像同步型。对于后来进入观看白板的人用户,它第一次需要向server请求当前最新的白板画面,server选择一个最可靠的client的白板数据发给新来者,或者使用p2p技术直接由client端发送。指令绘制型用于在活动用户之间更新白板数据、动作。指令需自行设计,这种设计可以轻松实现白板重绘。 3)录影在这里有两种实现,一种为ImageSnapshot,另一种为指令重绘型。 5,FLASH的置顶问题 默认情况下,在网页中swf对象之上放置不了浮动层,解决方案是修改FlashVars属性值,把wmode修改为opaque,同时对照其它对象,排列z-index。 6,聊天表情無法复制粘贴,由于聊天表情是动态文本,所以添加到textflow中的是一个sprite对象 这个问题没有一步到位的方案,属于架构师考虑的设计问题。自定义一种输入框,自定义一套emoticon标签,每一个表情用一个自定义标签标识,监听输入框的copy与paste事件,送入剪辑板的数据仅包含emoticon标签,而不是图像数据,在paste时进行解析、替换。 7,老板模式,当系统焦点离开air程序后,无法检测到系统的key_down事件 系统焦点离开AIR后,即使在AIR中有KEY_DOWN事情监听也无济于事。解决方案是,rumtime升级到AIR 2.0,在AIR程序启动时,同时启动一个C++ native progress,当AIR程序最小化至系统托盘后,由C++程序负责监听系统按键,以此实现AIR程度快捷键呼出。 8,Air注册表操作(登陆启动look程序) Air直接写不了,解决方案有两种方向: 1)与问题7同,使用nvtive progress写注册表
[转]Flash Builder 4中构建纯ActionScript书写的AIR项目
大约5月前 - 没有评论
若需转载本站原创文章,请注明: 转载自zrong's Blog 本站转载的文章标题会标明[转]。 本文链接地址: [转]Flash Builder 4中构建纯ActionScript书写的AIR项目 转自:http://flash.9ria.com/viewthread.php?tid=48055 下面介绍个使用Flash Builder 4构建纯ActionScript书写AIR项目的窍门。 1. 文件 > 新建 > “Flex Project” 2. 填项目名: “Foo” 3. 选择 “Desktop (runs in Adobe AIR)” 4. 按 “Finish” 5. 删除 “Foo.mxml” 6. 文件 > 新建 > ActionScript类命名为”Foo”,并使用”flash.display.Sprite”作为超类 7. 按Finish. 8. 右击”Foo.as”并选择”Set as Default Application” 9. 在Foo.as的构造函数中,写下”this.stage.nativeWindow.visible = true;” 10. 完成!
Use OpenOffice.org