<?xml version="1.0" encoding="utf-8"?>
<?xml-stylesheet type="text/xsl" href="http://feeds.qzone.qq.com/rss.xsl" version="1.0"?>
<rss version="2.0" xmlns:qz="http://qzone.qq.com">
<channel>
<title><![CDATA[/hanx时间轴]]></title>
<description><![CDATA[ZF闪阁制造]]></description>
<link>http://81916919.qzone.qq.com</link>
<lastBuildDate>Tue, 24 Nov 2009 16:28:43 GMT</lastBuildDate>
<generator>Qzone</generator>
<language>zh-cn</language>
<copyright>Copyright (C), 2005-2008, Tencent Tech. Co., Ltd.</copyright>
<pubDate>Fri, 25 Sep 2009 15:35:53 GMT</pubDate>

<item>
<title><![CDATA[Flash Catalyst 最佳实践技巧]]></title>
<link>http://81916919.qzone.qq.com/blog/1253892953</link>
<description><![CDATA[Flash Catalyst 最佳实践技巧<br><a href="http://flash.9ria.com/tag-Flash%20Catalyst.html" target="_blank">Flash Catalyst</a><wbr />, <a href="http://flash.9ria.com/tag-Best%20Practice.html" target="_blank">Best Practice</a><wbr /><br><li style="margin:25px;">资讯类型: 翻译 <li style="margin:25px;">来源页面: <a href="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices.html?devcon=f4" target="_blank">http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices.html?devcon=f4</a><wbr /> <li style="margin:25px;">资讯原标题: Adobe Flash Catalyst best practices <li style="margin:25px;">资讯原作者: Andrew Shorten 我的评论: <br>对这篇文你有啥看法，跟贴说说吧！欢迎口水和板砖，哈哈。欢迎大家和我们一同分享更多资讯。Adobe Flash Catalyst是一个新的专业交互设计工具，可便捷地创建用户界面和交互功能而无需编写代码。<br><br>通常作为团队的一员你会和开发者一起工作，你需要和开发者共享Flash Catalyst工程文件，以便他们在你设计好的界面上实现程序功能。<br><br>如何将你在Illustrator里面的设计移植到Flash Catalyst里直接影响Flash Catalyst工作的结构，反过来对产品的质量和友好度也有影响。<br><br>在这篇文章时，我会提供一些提示和参考来帮助你更好地把Illustrator的作品移植到Flash Catalyst中，我还会特别提醒你使用一些最佳技巧来达到最少的重复工作，并且减少将工作迁到Flash Builder以后的重构工作。<br><br><span style="font-weight:bold"><wbr />设计Illustrator文件结构</span><wbr /><br>你要合理地设计Illustrator文件结构，使得不同状态、功能的部分布在不同的层和子层里面。<br>图1.图层面板，Illustrator(左),Flash Catalyst(右)<br><br><wbr /><a href="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig01b.jpg" target="_blank"><img style="width:254px;height:188px;border:0;" src="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig01b.jpg" /></a><wbr /><br><br>Illustrator里面的层、子层和组会被移植到Flash Catalyst中，设计好逻辑结构并给层命好有意义的名称会对后面在Flash Catalyst里面的工作有很大帮助。这很重要，因为你将设计转换成组件时需要根据不同的状态来指定层和组。<br><br><br><span style="font-weight:bold"><wbr />在一个面板上设计</span><wbr /><br>Flash Catalyst不支持多面板，所以你最好在一个面板上用不同的层来区分不同状态。<br><br><wbr /><a href="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig02.jpg" target="_blank"><img style="width:217px;height:302px;border:0;" src="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig02.jpg" /></a><wbr /><br><br>从图片2可以看到，背景和前景分布在不同的图层，其它的层分别代表不同的状态。<br><br><span style="font-weight:bold"><wbr />给所有的东西命名</span><wbr /><br>就像给层和组命名一样，给Illustrator文件里的每个图像命名也是很重要的。可以考虑将以后会被转换成Button组件的对象取名为Button_name,类似还有Text_name,TextInput_name,Custom_name。其它的组件也是一样的。<br><br>并没有正式的推荐命名方案，不过你可以工程交互设计师和开发者一起做好协定，以此避免重复工作。<br><br><span style="font-weight:bold"><wbr />不要链接到外部图像</span><wbr /><br>在团队里工作，你需要将Illustrator文件交给交互设计师在Flash Catalyst继续工作。将文件放到Illustrator内部而不是外部，你只需要传一个Illustrator文件给他们可以保证他们有所有的素材而继续工作，图像和元件会在Flash Catalyst的库面板里面找到。<br><br>将图片导入Illustrator后，记得使用Object-&gt;Rasterize选项根据屏幕分辨率来优化图像。在这个对话框里，选择72 DPI的屏幕效果,通常将背景设为透明。<br><br><span style="font-weight:bold"><wbr />标记复制组件</span><wbr /><br>在Illustrator里面经常用到重复的按钮、输入框以及其它元素来展现设计效果。在Flash Catalyst里面你要将这些重复的元素定义为一个单独的组件,相同的部分共用一个组件。<br><br>与用肉眼来区分哪些元素是重复使用的相比，最好还是在Illustrator里面标记好哪些元素是重复使用的，避免开发人员重复定义。<br><br>你可以选择通过命名来区分，例如用&quot;TextInput_Blue&quot;来指明组件的设计而用&quot;_textInput_Blue&quot;来指出它是复制的。或者，你可以像图3那样把复制的元件的透明度调整到40%来告诉开发者这是复制的元件，这样可以告诉开发者，在Flash Catastly里只需定义一个组件即可。<br><br><wbr /><a href="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig03.jpg" target="_blank"><img style="width:416px;height:234px;border:0;" src="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig03.jpg" /></a><wbr /><br><br><br><span style="font-weight:bold"><wbr />对有滤镜和特效的文字使用“creat outline”</span><wbr /><br><br>虽然Flash Catalyst对Illustrator文件支持得很好，但你可能发现有滤镜和特效的文字在Flash Catalyst里面的效果和原来的不一样，如图4<br><br><wbr /><a href="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig04b.jpg" target="_blank"><img style="width:204px;height:90px;border:0;" src="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig04b.jpg" /></a><wbr /><br><br>这种情况下，你可以使用&quot;creat outline&quot;选项来解决这一问题，不过，一旦这样，文字就不能再编辑了。<br><br>你也可以用这个方法来解决小规模的静态文本，这样你就不需要嵌入字体了，标题、Logo也是一样。<br><br><span style="font-weight:bold"><wbr />不要在Illustrator里面定义组件的所有状态</span><wbr /><br>虽然你可以在Illustrator里面定义组件的所有状态，但是这对Flash Catalyst没有什么用，Flash Catalyst提供了许多编辑文本和图片的选项，如填充、渐变、描边。<br><br><wbr /><a href="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig05.jpg" target="_blank"><img style="width:280px;height:339px;border:0;" src="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig05.jpg" /></a><wbr /><br><br>你会发现在Illustrator里面设计好作品，转化成Flash Catalyst工程后用状态面板来设置不同状态的属性会更简单。<br><br><span style="font-weight:bold"><wbr />为数据表单组件定义一个单独的元素</span><wbr /><br>当把一个设计作品转换成数据表单的时候只需指明一个重复元素即可。如果你想把整个数据数据表单放到你的设计里面，你可以定义两个不同部分：单独的元素和包含重复元素的表单。<br><br><wbr /><a href="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig06.jpg" target="_blank"><img style="width:199px;height:142px;border:0;" src="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig06.jpg" /></a><wbr /><br><br>这样的话，你可以通过包含重复元素的表彰来确定元素之间的对齐方式和间隔，然后再把它们移出工程。<br><br><br><br><span style="font-weight:bold"><wbr />Flash Catalyst</span><wbr /><br><br><span style="font-weight:bold"><wbr />经常使用“保存为副本”</span><wbr /><br>当你逐渐熟悉Flash Catalyst之后，你会发现经常使用&quot;保存为副本&quot;这个功能非常有用。尤其是在你要对工作的主要框架结构动手的时候，比如对图层和组的较大改动、添加新的程序状态、定义过度状态等等。<br><br>一旦事情没按你想像的结果发展，你可以快速地恢复到原来的版本，然后尝试其它的方法。<br><br><span style="font-weight:bold"><wbr />按正确的顺序工作</span><wbr /><br>在将Illustrator转换成Flash Catalyst工程的时候，合理的工作顺序非常重要，你可以按下面的顺序来做，然后根据自己的实际经验进行调整。<br><br>1.将所有的设计元素转换成组件。<br>2.创建能用组件来定义程序的子功能。<br><br>3.将一个状态的可见元素命名为一个组。这在为状态间设计过度效果时非常有用，因为你可以对组应用效果而不是单个的元素。<br><br><wbr /><a href="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig07.jpg" target="_blank"><img style="width:590px;height:197px;border:0;" src="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig07.jpg" /></a><wbr /><br><br>4.创建所有通用组件间的过度并定义组件里涉及到状态变化元素的交互。<br>5.一次性创建程序状态，对每个状态<br>   1.定义组件的位置，可见性和外观.<br>   2.用时间轴指出现有状态和新状态间的过度。<br>   3.定义涉及到状态改变的元素的交互。<br><br><span style="font-weight:bold"><wbr />优化图像</span><wbr /><br>导入Illustrator的复杂矢量图像在Flash Player渲染时可能产生性能问题。如果你的工程里有这样的图像，并且在运行时对图像的要求不高，那么你应该用Flash Catalyst里面的&quot;Convert to Optimized Graphic&quot;选项来优化图像。<br><br><wbr /><a href="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig09.jpg" target="_blank"><img style="width:526px;height:187px;border:0;" src="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig09.jpg" /></a><wbr /><br><br>如果想让Flash Catalyst在导入图像时自动优化图像，你要把你的图像在Illustrator里面定义成元件。<br><br><span style="font-weight:bold"><wbr />考虑组件重用</span><wbr /><br>在将设计转换成Flash Catalyst工程的时候，经常遇到将Illustrator里面的文本转换成按钮、复选框、单选框的情况。如果你打算在其它地方使用这些组件，记得增加文本域的宽度。<br><br><wbr /><a href="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig10.jpg" target="_blank"><img style="width:184px;height:54px;border:0;" src="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig10.jpg" /></a><wbr /><br><br><span style="font-weight:bold"><wbr />为不同状态取有意义的名字</span><wbr /><br>你最好和你的开发团队协商好不同状态的命名规则，再按规则命名。<br><br><wbr /><a href="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig11.jpg" target="_blank"><img style="width:590px;height:82px;border:0;" src="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig11.jpg" /></a><wbr /><br><br>无论如何，一个状态的名字应指出用户当前所做的操作、所看的界面，或者其它有意义的东西。<br><br><span style="font-weight:bold"><wbr />在库里面重命名组件</span><wbr /><br><br>和状态命名一样，库里面的组件名会在整个工作代码里面经常用到，好的命名对后面的交互设计和程序开发都有相当大的帮助。<br><br><wbr /><a href="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig12.jpg" target="_blank"><img style="width:280px;height:301px;border:0;" src="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig12.jpg" /></a><wbr /><br><br><br><span style="font-weight:bold"><wbr />用查看代码方式来优化</span><wbr /><br>你不必是一个代码专家，但有些事情你需要注意一下。<br>首先，你要确保使用的字体是系统自带(如Arial)的或者嵌入到了工程中，如果你在标题或者logo里面使用了非标准字体，你最好回到Illustrator，将这些东西打散。<br>其次，Illustratro里面导入的包含路径、渐变、描边的长长的代码的图像往往意味着可以在Flash Catalyst里面被优化，在代码里找到组名，然后在设计模式下找到对应组<br>选择“Convert to optimized graphic”进行优化。<br><br><span style="font-weight:bold"><wbr />牢记修改只对单独的元素有效</span><wbr /><br>在你对程序或者组件的一个元素进行修改后，你要告诉Flash Catalyst是不是对所有的状态进行相同的更改。如果选择否的话，修改只对当前状态有效。右键选择修改后的元件选择“Make Same in All Other State”可以全部应用修改。<br><br><wbr /><a href="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig13.jpg" target="_blank"><img style="width:460px;height:456px;border:0;" src="http://www.adobe.com/devnet/flashcatalyst/articles/flash_catalyst_best_practices/fig13.jpg" /></a><wbr /><br><br><br><span style="font-weight:bold"><wbr />经常在浏览器中预览效果</span><wbr /><br>虽然你可以在Flash Catalyst里面预览效果，但是运行程序在浏览器里面看真实的效果会更好。(File--&gt;Run Project)</li> <!--v:3.2--> ]]></description>
<category><![CDATA[Fc研究]]></category>
<author><![CDATA[81916919@qq.com(/hanx时间轴)]]></author>
<comments>http://81916919.qzone.qq.com/blog/1253892953#comment</comments>
<qz:effect>134218241</qz:effect>
<pubDate>Fri, 25 Sep 2009 15:35:53 GMT</pubDate>
<guid>http://81916919.qzone.qq.com/blog/1253892953</guid>
</item>

<item>
<title><![CDATA[Flash Catalyst 入门指南]]></title>
<link>http://81916919.qzone.qq.com/blog/1253892814</link>
<description><![CDATA[Flash Catalyst 入门指南<br>     本指南中我们将按步骤建立一个模拟登山运动服务平台的微型网络。在使用Flash Catalyst MAX Release 时所需要的操作都将在此指南中得到说明展示。要开始这个程序，电脑必须安装Flash Catalyst,Photoshop CS4，并需要点击此处（<a href="http://www.digitalbackcountry.com/flashcatalyst/tutorial01/downloads/Expedition_Simple.psd" target="_blank"><span style="color:#2e6ab1;font-size:16px;line-height:1.8em;">PSD file here</span><wbr /></a><wbr /><span style="font-size:16px;line-height:1.8em;">）</span><wbr />下载PSD文件。作为screencast，此教程也可有一些小的变动（感谢screencast之父，<a href="http://www.yeeyan.com/editor/start/89047/The%20Flash%20Blog.htm" target="_blank"><span style="color:#2e6ab1;line-height:1.8em;">李布莱姆洛</span><wbr /></a><wbr />）。<br><span style="font-weight:bold"><wbr />导入图片</span><wbr /><br><span style="font-weight:bold"><wbr />      </span><wbr />可以先浏览PSD文件。为优化Flash Catalyst 操作程序，一些无需使用的图层已被合并。注意图层与文件夹结构。接着打开Flash Catalyst,在“从设计文档中建立新项目”栏中选择“从Adobe Photoshop PSD文档---”，并选择将要下载的文档：Expendition_Simple.psd.<br><br>在此导入界面上有一系列的选项。目前可以将其保留为定值，但Flash Catalyst提供个性化设计制作功能。其中所有的图层都可编辑，并允许导入隐藏图层。而且在左下角有一个高级设置目录，可以通过它逐层指定操作导入文档，编辑或者使其平面化。<br><span style="font-weight:bold"><wbr />Flash Catalyst </span><wbr /><span style="font-weight:bold"><wbr />界面介绍</span><wbr /><span style="font-weight:bold"><wbr /></span><wbr /><br>一旦导入库加载完毕，导入对象将得到显示，与在Photoshop中的显示别无差别。图层都被罗列在左边的图层面板中，在页面底部有一个“时间轴”，而且在“页面／状态”面板中单独呈现“页面一”的状态。此时界面会给出提示：“‘自动效果’不可用”。Flash Catalyst会根据操作者处理对象和内容的方式自动转换状态。如果一次处理很多图层或对象，会使操作速度变慢，因而操作者往往会将其默认关闭。Flash Catalyst文档相当简单易操作，只需要在“时间轴”下拉栏中选择“自动转换效果”，就可以实现状态间的自动转换功能。<br><a href="http://www.digitalbackcountry.com/flashcatalyst/tutorial01/photos/flash_catalyst_screen_002.png" target="_blank"></a><wbr /><br>现在一切就绪。首先双击“时间轴”，使其最小化，移出操作界面。接着需要创建一个新状态。在页面上部的“页面∕状态”面板中，点击“复制状态”，便会使页面一中所有的信息复制到页面二中去。在此过程中，界面会产生一些变化。首先“时间轴”会弹回，为页面一与页面二间的转换腾出空间。在图层面板中，所有图层旁边有两个图框，传统面板中只有一个图框。有色图框是分辨哪个图层属于哪个页面或是状态的视觉线索。注意建立的两个页面的边框颜色与图层面板框的颜色一致。接着将页面一重命名为“Main”，而页面二命名为“Most_Popular”(在页面名中不允许存在空格)。  <br><a href="http://www.digitalbackcountry.com/flashcatalyst/tutorial01/photos/flash_catalyst_screen_003.png" target="_blank"></a><wbr /><br>保证“Most_Popular”被选择，然后点击图层面板中Popular Detail旁边的视窗框，而Popular Detail可以隐藏或者显示文件夹中的所有内容。此过程中，注意时间轴为我们创建了一整套转换，因为Flash Catalyst检测到“Main”和“Most_Popular”之间的差别是我们使那些图层可见。现在我们要做一些自定义制作，所以双击标签隐藏时间轴面板，然后点击Popular Detail文件夹旁边的箭头以显示其内容。<br> <br><a href="http://www.digitalbackcountry.com/flashcatalyst/tutorial01/photos/flash_catalyst_screen_004.png" target="_blank"></a><wbr /><br><span style="font-weight:bold"><wbr />创建自定义／通用组件</span><wbr /><br>首先我们要在Mont Blanc目录项中创建一个自定义组件。我们有一个拥有悬浮状态和正常状态的文件夹。点击Mont Blanc Hover 旁边的箭头，并选择所有的子层。点击Control+G（或者Option+G）键组合它们。点击这个组合旁边的箭头之后，所有的图层仍然存在，这只是让它们更容易操作。也可以双击组合文本并将其重命名。可以称其为“Mont Blanc Hover”。现在可以创建自定义组件了。<br><a href="http://www.digitalbackcountry.com/flashcatalyst/tutorial01/photos/flash_catalyst_screen_005.png" target="_blank"></a><wbr /><a href="http://www.digitalbackcountry.com/flashcatalyst/tutorial01/photos/flash_catalyst_screen_006.png" target="_blank"></a><wbr /><br>   选择刚刚创建的组合以及Mont Blanc文件夹中的图层。它该如下图所示。一旦这些被选中，就可以用平视显示器创建一个自定义组件。平视显示器是一个黑色浮动框，它会根据操作者的选择而变化，所以在处理对象时就会得到正确的文本背景。在这种情况下，我们有两个选择对象，并（正确地）假定来处理属性。使用平视显示器可以点击“将图片转换为组件”，并在列表底部选择“自定义／通用组件”。此时Mont Blanc Hover文件夹应该显示一个图层“自定义组件一”。双击文本，并将其名改为“Mont Blanc”。<br>为确实编辑组件，需要在主要设计区域内双击组件。此过程中，设计视频产生变化，因而我们只需要处理组件中的内容。此时其他部分无法运作，在页面／状态面板中只有一个状态栏，而图层面板发生了细微的变化—现在在自定义组件一的标题下，有两个图层（Mont Blanc Hover组合和原先的Mont Blanc图片）。以前处理一个固有的元件，比如按钮的时候，在状态面板里会有向上、覆盖、向下和无效等状态，因为这些是按钮的固有状态。但是在自定义／通用组件中可以创建自己的状态。现在让我们使用复制状态按钮复制状态一，将其重命名为“正常”，并将状态二命名为“悬浮”。<br><a href="http://www.digitalbackcountry.com/flashcatalyst/tutorial01/photos/flash_catalyst_screen_007.png" target="_blank"></a><wbr /><br><span style="font-weight:bold"><wbr />用时间轴切换</span><wbr /><br>现在我们需要对状态进行操作。在“正常”状态中，我们打算显示一些常规图像，所以务必选中“正常”状态，并点击Mont Blanc悬浮图层旁边的视窗。然后双击时间轴标签，就会看到Flash Catalyst自动创建出隐退效果。如果点击播放按钮，就会看到转换效果。但目前还不是非常好的或是有趣的程序，现在让我们更深入一些吧。我们想要达到的效果是放大常规图像，并在它变大的时候渐渐现出更多细节性的信息。选择“悬浮”状态，然后使用图层面板选择常规Mont Blanc图像（因为它隐藏在更大的悬浮图像后面，所以主要的设计区域是不能使用的。）现在锁定左下角的蓝色矩形，并将其拖长到与Mont Blanc悬浮对象相同的尺寸。正确操作后，Flash Catalyst会自动产生移动和调整大小的功能，与先前在时间轴面板中的隐退功能共同起作用。然后播放一下看看效果。可以在“正常”与“悬浮”之间的进行切换以检查两者间的转换。<br><a href="http://www.digitalbackcountry.com/flashcatalyst/tutorial01/photos/flash_catalyst_screen_008.png" target="_blank"></a><wbr /><br>而正如你所见，这些并不完美。但幸运的事，我们可以在时间轴中进行处理以改变效果。我现在在移动和调整效果结束前，将隐退功能框缩短，并将其移至右边。但如果你想，可以改变它，只要确保“正常—悬浮”与“悬浮—正常”两个状态都得到改变。恭喜！你已经在Flash Catalyst中创建了你的第一个自定义Flex组件。现在点击在设计区域之上黑色条框内的Expidition_Simple文本，以回到主要应用区间。<br><span style="font-weight:bold"><wbr />创建互动</span><wbr /><br>我们已经创建了自定义组件，现在需要为它创建互动，因而当使用者滚动它的时候，就能转到悬浮状态。此时你的自定义组件理应已被选中，如果没有的话，在主要设计区域选择它，或是在图层面板里点击“Mont Blanc”。现在选择平视显示器中的互动标签，你将会看到一个编辑组件的按钮，但因为这个步骤已完成，所以我们将要做的是创建一个自定义互动，可以通过点击加号完成它。我们将为“鼠标位于按钮上”创建一个新的自定义互动。创建后列表中会增加一个“鼠标位于按钮上”互动项。现在可以点击“内部活动”目录，并选择“播放切换状态”。这能调出状态框，因而能更方便的选择需要转换的状态。在状态框目录中，有两个主要应用状态：“Main”和“Most_Popular”,另外还有刚刚创建的组件所处的状态。接着选择Mont Blanc下的悬浮状态。我们也需要创建“鼠标滑出按钮”的效果，所以只需要复制以上步骤，但是状态必须转换为“正常”状态，而不是“悬浮”状态。<br><a href="http://www.digitalbackcountry.com/flashcatalyst/tutorial01/photos/flash_catalyst_screen_010.png" target="_blank"></a><wbr /><br>您可能会注意在互动目录下可以处理动作顺序。我暂时不会涉及这个问题，但如果你想环绕组件外周不断变化的对象，就可以使用动作序列功能。这会使应用程序的其他部分更灵活地对互动事件产生反映。<br><span style="font-weight:bold"><wbr />页面间操作</span><wbr /><span style="font-weight:bold"><wbr /></span><wbr /><br>既然我们已经创建了自定义组件，那么现在可以开始创建两个页面间的转换程序了。切换到“Main”状态，会发现现在创建自定义组件是可见的，那么继续使用图层面板将剩下的通俗图像处理为可视。使瑞尼尔和沃丁顿图像可视，但通俗图像的介绍信息一暂时保持为不可见，待会再做处理。我们想要达到的效果是那三个图框从页面的右边跳入。在主要设计区域内或图层面板中选中这三个图框，然后只需用箭头或鼠标将它们移出屏幕即可。正如自定义组件一样，Flash Catalyst能自动为我们生成切换，可以用播放按钮进行测试。<br><a href="http://www.digitalbackcountry.com/flashcatalyst/tutorial01/photos/flash_catalyst_screen_011.png" target="_blank"></a><wbr /><br>我对有趣的切换很感兴趣，决定对它们做一点改变，使得顶端的瑞尼尔能第一个跳入，其他的紧随其后。如果你想就可以创建它，但我们的时间轴如下图所示（切记要改变两个状态的切换）：<br><a href="http://www.digitalbackcountry.com/flashcatalyst/tutorial01/photos/flash_catalyst_screen_012.png" target="_blank"></a><wbr /><br><span style="font-weight:bold"><wbr />绘图工具的操作</span><wbr /><span style="font-weight:bold"><wbr /></span><wbr /><br>我们已经创建了页面和切换，现在使用者需要一条通往页面和切换功能的途径。在右上方有一些文本链接，那么来将“Most_Popular”文本链接转变成一个按钮吧。当带有光标的文本被导入进Flash Catalyst时，产生了文本对象和光标对象，所以先使用图层面板选中它们，然后再用平视显示器将两者转换成按钮组件。操作时显示器工作，使得我们可以自动编辑任何状态。在显示器中点击“覆盖”状态，就可以开始编辑该按钮了。<br>现在我们可以使用内置的绘图工具来创建一个图框，因而当我们停留在文本上时，该图框就会出现在文本旁边。选择矩形工具，在文本旁边画出一个矩形。此时平视显示器会弹出，您可以改变一些属性。将填充色改为黑色，光标颜色改为“d0d1d9”，并将不透明度设为70。<br><a href="http://www.digitalbackcountry.com/flashcatalyst/tutorial01/photos/flash_catalyst_screen_013.png" target="_blank"></a><wbr /><br>但那些看起来似乎不太对劲。正如使用所有的Adobe设计工具可以操纵图层面板改变深度一样，使用Flash Catalyst中的图层面板，可以将文本下的“Rect1”拖到底部。<br><a href="http://www.digitalbackcountry.com/flashcatalyst/tutorial01/photos/flash_catalyst_screen_014.png" target="_blank"></a><wbr /><br>我们也需要改变“下状态”以包括矩形框，或许把它变得更透明一些。使用页面∕状态目录选择“下状态”。<br>你可能已经注意到“Rect1”在图层面板中淡出，而唯一带色的是蓝色框，在下状态中只会用到它。跟自定义组件操作一样，我们也可以通过点击视窗栏将它添加到状态中去。务必保证矩形被选中，然后将不透明度改为60，并增加光标宽度为2。<br><a href="http://www.digitalbackcountry.com/flashcatalyst/tutorial01/photos/flash_catalyst_screen_015.png" target="_blank"></a><wbr /><br>现在回到主要应用程序，使用平视显示器创建一个点击互动，操作与先前创建Most_Popular按钮的操作一样。我们只需要创建一个点击互动和转换到Most_Popular状态的切换。<br><a href="http://www.digitalbackcountry.com/flashcatalyst/tutorial01/photos/flash_catalyst_screen_016.png" target="_blank"></a><wbr /><br><span style="font-weight:bold"><wbr />组件和皮肤操作</span><wbr /><br>只要再设置让人们搜索的功能后，就可以完成应用了。在界面中有一个矩形框，框中有“搜索旅游”几个字，可以用来创建搜索框。使用图层面板，选择一下三个图层：搜索旅游图层，图层21，图层21的外光标图层；然后使用平视显示器将图像转换成文本输入组件。这时平视显示器会产生一些变化，编辑组件按钮不见了。接着点击平视显示器。<br><a href="http://www.digitalbackcountry.com/flashcatalyst/tutorial01/photos/flash_catalyst_screen_017.png" target="_blank"></a><wbr /><br>然后进入先前经常看到的组件编辑模式。使用图层面板选中“搜索旅游”图层，这个图层是真正的文本图层。当点击它时，平视显示器又一次发生变化，并出现“指定部件”对话框，该对话框可以将图像转化成文本输入部件。<br><a href="http://www.digitalbackcountry.com/flashcatalyst/tutorial01/photos/flash_catalyst_screen_018.png" target="_blank"></a><wbr /><br>在Flex4中出现了皮肤组件这个概念。例如，在可卷起的横条部件中可以看到不同的皮肤组件：记录按钮，向上按钮和向下按钮。当处理复杂一些的组件时，Flash Catalyst允许指定图像与某个特殊的皮肤部件相联系。文本输入控制有一个皮肤部件和实际文本，而Flash Catalyst能够分析出当你选择了一个矩形图框和文本图框时，文本必须是“文本视窗”部件。如果想突出这个特征的话，务必保证仍然选中“旅游搜索”图层，并使用“将图框转换成文本输入部件”将文本指定为“文本视窗”部件。<br><span style="font-weight:bold"><wbr />完成</span><wbr /><br>使用文档&gt;运行项目目录<a href="http://www.yeeyan.com/editor/start/89047/Expedition_Simple.files" target="_blank"><span style="color:#2e6ab1;line-height:1.8em;">去看看效果</span><wbr /></a><wbr />。“最受欢迎”按钮可以互动，停在“蒙特布朗克”图像上可以显示细节信息，并且在输入文字后可以进入搜索框。注意Flash Catalyst准确保存了Photoshop中的字体信息。<br><span style="font-weight:bold"><wbr />从这里出发</span><wbr /><span style="font-weight:bold"><wbr /></span><wbr /><br><a href="http://www.digitalbackcountry.com/flashcatalyst/tutorial01/photos/flash_catalyst_screen_019.png" target="_blank"></a><wbr /><br>现在你有几个不同的选择。我们一直在处理一个Flex项目。你可以切换到代码视图，看看这些部件和状态是怎样创建起来的。完成之后，可以使用文档目录将效果输出为SWF格式并部署进网页。因为Flash Catalyst项目多，所以需要增加一些逻辑操作与数据。为此，可先以FXP文档形式保存这个项目。该FXP文档只是一个包含了所有操作Flex Builder时需要的信息和代码的zip文档。使用Flex Builder的“Gumbo”可以打开完全一样的项目，并对其做一些改进。注意到了吗？当我们停留在Mont Blanc图像上时，那个小的Goole地图呈现为方形。嗯，使用Flex Builder Gumbo创建互动的话，将会是件有趣的事。我会在以后的教程中讲到 <!--v:3.2--> ]]></description>
<category><![CDATA[Fc研究]]></category>
<author><![CDATA[81916919@qq.com(/hanx时间轴)]]></author>
<comments>http://81916919.qzone.qq.com/blog/1253892814#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Fri, 25 Sep 2009 15:33:34 GMT</pubDate>
<guid>http://81916919.qzone.qq.com/blog/1253892814</guid>
</item>

<item>
<title><![CDATA[关于FLEX的LCDS在myEclipse中的配置详解]]></title>
<link>http://81916919.qzone.qq.com/blog/1253260203</link>
<description><![CDATA[<span style="font-size:13px;line-height:1.8em;">作者：张帆</span><wbr /><br> <br><span style="font-size:13px;line-height:1.8em;">研究了几天Flex LCDS的配置，今天终于配置成功，所以写下此文章。</span><wbr /><br><span style="font-size:13px;line-height:1.8em;">由于我看的是人民邮电出版社的《精通Flex 3.0-基于ActionScript 3.0实现》，关于配置LCDS这块看的很头疼，可能是由于各个软件或插件版本的问题，造成了配置上的困难，不是这个插件不对就是那个选项没有。由于本人使用的是myEclipse6.6，可能很多地方和书中的eclipse（版本不明，不过至少是3.2以上版本）不太一样，经过长时间的摸索今天终于配置成功。</span><wbr /><br><span style="font-size:13px;line-height:1.8em;"></span><wbr /> <br><span style="font-size:13px;line-height:1.8em;">本实例需要用到Flex Builder 3.0 win plug。它是eclipse的插件版本，关于下载和安装过程请去其他地方搜索</span><wbr /><br><span style="font-size:13px;line-height:1.8em;">首先我们需要在myEclipse中配置Tomcat，我使用的是Tomcat5.5，myEclipse6.6（至少带有WTP功能），下面我们配置Tomcat：</span><wbr /><br><span style="font-size:13px;line-height:1.8em;"> </span><wbr /><br><span style="font-size:13px;line-height:1.8em;">如图：选择Window-&gt;Preferences</span><wbr /><br><span style="font-size:13px;line-height:1.8em;"><wbr /><a href="http://b24.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63f7532a49a89377784d6251e1515d23ec80ef8837551c2d7aaf1b8de6fde29786a3ddbe0bf497fac8980e23f0e305d7e6f80048197520e4b41a14e91166bebc4d2d19adc1f" target="_blank"><img style="border:0;" src="http://b24.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63f7532a49a89377784d6251e1515d23ec80ef8837551c2d7aaf1b8de6fde29786a3ddbe0bf497fac8980e23f0e305d7e6f80048197520e4b41a14e91166bebc4d2d19adc1f" /></a><wbr /></span><wbr /><br><span style="font-size:13px;line-height:1.8em;">会打开如下窗口：</span><wbr /><br><span style="font-size:13px;line-height:1.8em;">我们找到MyEclipse EnterPrise Workbench-&gt;Servers-&gt;Tomcat-&gt;Tomcat 5.x，将Tomcat server选项选为Enable，在下面的Tomcat home directory处点击Browse键找到你的Tomcat的安装路径，前提是你已经装了Tomcat。</span><wbr /><br><span style="font-size:13px;line-height:1.8em;"><wbr /><a href="http://b25.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63f6647476100efe28409b872383876c27300d0e8bbaefab9f22d443828b77fe8e1d1a82fdff1a7ee4c8a37d1c60251050b79c02f23e8b40269ce8f96f3bee983a4da3cf171" target="_blank"><img style="border:0;" src="http://b25.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63f6647476100efe28409b872383876c27300d0e8bbaefab9f22d443828b77fe8e1d1a82fdff1a7ee4c8a37d1c60251050b79c02f23e8b40269ce8f96f3bee983a4da3cf171" /></a><wbr /></span><wbr /><br><span style="font-size:13px;line-height:1.8em;">接下来我们新建一个Flex项目，</span><wbr /><br><span style="font-size:13px;line-height:1.8em;"><wbr /><a href="http://b23.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63f6f7fde09595240e3c06f78c744e3d868aa9fdb7d3972b809076bc0044969334fa5b328af5fa1b0337eeaec9c86fb575792215878bc738c101101a773c810cb82281202de" target="_blank"><img style="border:0;" src="http://b23.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63f6f7fde09595240e3c06f78c744e3d868aa9fdb7d3972b809076bc0044969334fa5b328af5fa1b0337eeaec9c86fb575792215878bc738c101101a773c810cb82281202de" /></a><wbr /></span><wbr /><br><span style="font-size:13px;line-height:1.8em;">起个项目名称为：LCDSFlexStu，按照下图配置好然后点击Next，注意红色的部分，不要弄错</span><wbr /><br><span style="font-size:13px;line-height:1.8em;"><wbr /><a href="http://b25.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63ff7e5c55d504a4bcb7c5629bf8dcc1018b492a74a579e0050108bf104a3b6d1549a40e2860c65623833e760fa66a2bed48a653c7806cfb051d22ad825456f204f86ee3838" target="_blank"><img style="border:0;" src="http://b25.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63ff7e5c55d504a4bcb7c5629bf8dcc1018b492a74a579e0050108bf104a3b6d1549a40e2860c65623833e760fa66a2bed48a653c7806cfb051d22ad825456f204f86ee3838" /></a><wbr /></span><wbr /><br><span style="font-size:13px;line-height:1.8em;">然后进入如下窗口，选择Flex WAR包，我使用的是LCDS中的flex.war，配置完点击Finish完成（关于LCDS插件，请去其他地方查阅相关文章）</span><wbr /><br><span style="font-size:13px;line-height:1.8em;">注意：Compilation options选择下面的Compile application on the server when the page is viewed，说明我们的mxml文件在服务器访问的时候才会被编译。</span><wbr /><br><span style="font-size:13px;line-height:1.8em;"><wbr /><a href="http://b25.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63fa85e29c0a1c95c7f9d6ddeb87cc9e87dd4aed45d5287114c53e1e679830a3f614dfc322799c13d71b14d6bc52ee45cfb08f5599cc9063328035bd87bac2e71b0447c8b9d" target="_blank"><img style="border:0;" src="http://b25.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63fa85e29c0a1c95c7f9d6ddeb87cc9e87dd4aed45d5287114c53e1e679830a3f614dfc322799c13d71b14d6bc52ee45cfb08f5599cc9063328035bd87bac2e71b0447c8b9d" /></a><wbr /></span><wbr /><br><span style="font-size:13px;line-height:1.8em;">这样我们就建成了一个Flex工程，现在工程的配置如下：</span><wbr /><br><span style="font-size:13px;line-height:1.8em;"><wbr /><a href="http://b24.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63f97b854f116fc9b9c6280f7ed30b38b87d8b7cf6671b12180b8fb5f8b76a5e1b14adf36642a1fbf3d0427ab2414af2946b2f36bf51dcc3a4eb816faf4028e84aea6dae01b" target="_blank"><img style="border:0;" src="http://b24.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63f97b854f116fc9b9c6280f7ed30b38b87d8b7cf6671b12180b8fb5f8b76a5e1b14adf36642a1fbf3d0427ab2414af2946b2f36bf51dcc3a4eb816faf4028e84aea6dae01b" /></a><wbr /></span><wbr /><br><span style="font-size:13px;line-height:1.8em;">打开LCDSFlexStu.mxml，我们编写点测试用的东西：</span><wbr /><br><span style="color:#3366ff;font-size:13px;line-height:1.8em;">&lt;?xml version=&quot;1.0&quot; encoding=&quot;utf-8&quot;?&gt;<br>&lt;mx:Application xmlns:mx=&quot;</span><wbr /><a href="http://www.adobe.com/2006/mxml" target="_blank"><span style="color:#3366ff;font-size:13px;line-height:1.8em;">http://www.adobe.com/2006/mxml</span><wbr /></a><wbr /><span style="color:#3366ff;font-size:13px;line-height:1.8em;">&quot; layout=&quot;absolute&quot;&gt;<br> &lt;mx:Style&gt;<br>  global<br>  {<br>   fontSize:12pt; <br>  }<br> &lt;/mx:Style&gt;<br> &lt;mx:Script&gt;<br>  &lt;![CDATA[<br>   import mx.controls.Alert;<br>   <br>   private function showMessage():void<br>   {<br>    Alert.show(&quot;我是一个基于LCDS的Flex应用&quot;,&quot;web应用&quot;);<br>   }<br>  ]]&gt;<br> &lt;/mx:Script&gt;<br> &lt;mx:Button label=&quot;click&quot; verticalCenter=&quot;0&quot; horizontalCenter=&quot;0&quot; click=&quot;showMessage();&quot;/&gt;<br>&lt;/mx:Application&gt;</span><wbr /><span style="font-size:13px;line-height:1.8em;"> </span><wbr /><br><span style="font-size:13px;line-height:1.8em;">接下来我们要将工程部署到Tomcat上：</span><wbr /><br><span style="font-size:13px;line-height:1.8em;">在工程上点右键，打开如下菜单：</span><wbr /><br><span style="font-size:13px;line-height:1.8em;"><wbr /><a href="http://b25.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63f256364502140ddef422164869b3cce74b471540707127baffb8faffb22110972f4eec233116607c6d5de3a1f91cf28aa044523bc43bd9f053e1dcfd71e94b49377b2c390" target="_blank"><img style="border:0;" src="http://b25.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63f256364502140ddef422164869b3cce74b471540707127baffb8faffb22110972f4eec233116607c6d5de3a1f91cf28aa044523bc43bd9f053e1dcfd71e94b49377b2c390" /></a><wbr /></span><wbr /><br><span style="font-size:13px;line-height:1.8em;">选择Add Web Project Capabilities...</span><wbr /><br><span style="font-size:13px;line-height:1.8em;">将Web Root Directory配置成WebContent目录，</span><wbr /><br><span style="font-size:13px;line-height:1.8em;">作用：为了让<span style="font-family:'Arial';line-height:1.8em;">TomCat</span><wbr /><span style="font-family:'宋体';line-height:1.8em;">可以加载此项目，因为</span><wbr /><span style="font-family:'Arial';line-height:1.8em;">Tomcat</span><wbr /><span style="font-family:'宋体';line-height:1.8em;">只可以加载</span><wbr /><span style="font-family:'Arial';line-height:1.8em;">Web</span><wbr /><span style="font-family:'宋体';line-height:1.8em;">项目</span><wbr /></span><wbr /><br><span style="font-size:13px;line-height:1.8em;">去掉Create web xml的选项即可，因为目录已经包含这个xml文件了</span><wbr /><br><span style="font-size:13px;line-height:1.8em;"><wbr /><a href="http://b25.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63fc304c9c7cce40358637caad1861e94e23eba5cbc67d8a79b150e2eb1644b44c91bac09bfe2dc47fa95ce5fb33a1df28e3faf611adef3144f7746cb11ead4a49d08b09d16" target="_blank"><img style="border:0;" src="http://b25.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63fc304c9c7cce40358637caad1861e94e23eba5cbc67d8a79b150e2eb1644b44c91bac09bfe2dc47fa95ce5fb33a1df28e3faf611adef3144f7746cb11ead4a49d08b09d16" /></a><wbr /></span><wbr /><br><span style="font-size:13px;line-height:1.8em;">此时文件目录改变了</span><wbr /><br><span style="font-size:13px;line-height:1.8em;"><wbr /><a href="http://b24.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63ffd5c5f209ae3af4b5e7aa02af1920b27fb867ea22abf514a3343df8c1a3d10eeab990733f785516b1bd11849b99b1e00fa023bde0f78b73e4d0afed10155c641b6ea39a0" target="_blank"><img style="border:0;" src="http://b24.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63ffd5c5f209ae3af4b5e7aa02af1920b27fb867ea22abf514a3343df8c1a3d10eeab990733f785516b1bd11849b99b1e00fa023bde0f78b73e4d0afed10155c641b6ea39a0" /></a><wbr /></span><wbr /><br><span style="font-size:13px;line-height:1.8em;"> 右键点击LCDSFlexStu.mxml，选择Run As-&gt;Open Run Dialog...</span><wbr /><br><span style="font-size:13px;line-height:1.8em;"><wbr /><a href="http://b25.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63fb295457579318b80667332e31d2e4bda99b9de96c864d3268f5797a421855df5cbf7d082e3d2b9f083d49652cb3403fe80b7e621267556e8bcc559506d88fc608ad342fa" target="_blank"><img style="border:0;" src="http://b25.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63fb295457579318b80667332e31d2e4bda99b9de96c864d3268f5797a421855df5cbf7d082e3d2b9f083d49652cb3403fe80b7e621267556e8bcc559506d88fc608ad342fa" /></a><wbr /></span><wbr /><br><span style="font-size:13px;line-height:1.8em;"> 弹出如下窗口：双击MyEclipse Server Application会出现New_configuration  将右面的面板的Project设为LCDSFlexStu工程，Server选择Tomcat 5.x点击run</span><wbr /><br><span style="font-size:13px;line-height:1.8em;"><wbr /><a href="http://b25.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63ff8ef4766081fc5e049b04a736a6ef8065bd6cd374e5bb3e6e83d9b8ccd94e47f3682907793a79f444182fc3e58736b0e8683867475af71fc2c255b24360fa81dd77171e1" target="_blank"><img style="border:0;" src="http://b25.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63ff8ef4766081fc5e049b04a736a6ef8065bd6cd374e5bb3e6e83d9b8ccd94e47f3682907793a79f444182fc3e58736b0e8683867475af71fc2c255b24360fa81dd77171e1" /></a><wbr /></span><wbr /><br><span style="font-size:13px;line-height:1.8em;"> 如此以来，工程就部署到Tomcat下了，如下图</span><wbr /><br><span style="font-size:13px;line-height:1.8em;"><wbr /><a href="http://b25.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63f808827cea0ebe7bd4d8944859b7fe352cb2ee1488e3f8cb9170baae95d4da21d4885b35f1cd80c62edc5d9204de1b464c5f0efd8d179d29c1cdc4568f6585aa3dc68e626" target="_blank"><img style="border:0;" src="http://b25.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63f808827cea0ebe7bd4d8944859b7fe352cb2ee1488e3f8cb9170baae95d4da21d4885b35f1cd80c62edc5d9204de1b464c5f0efd8d179d29c1cdc4568f6585aa3dc68e626" /></a><wbr /></span><wbr /><br><span style="font-size:13px;line-height:1.8em;"> 此时打开浏览器，我们在地址栏输入如下路径就会看到由服务器进行编译的页面，返回一个嵌有swf的html页面</span><wbr /><br><span style="font-size:13px;line-height:1.8em;"> <wbr /><a href="http://b25.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63fd68f04698255b99816cfe91d7024f836042f91f8e2946805d3891ccc3a43c0fd02111fcbafe896f8aecb832e9d9d57b679c822435922cc0b921042d7676b5ed13377d88c" target="_blank"><img style="border:0;" src="http://b25.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63fd68f04698255b99816cfe91d7024f836042f91f8e2946805d3891ccc3a43c0fd02111fcbafe896f8aecb832e9d9d57b679c822435922cc0b921042d7676b5ed13377d88c" /></a><wbr /></span><wbr /><br><span style="font-size:13px;line-height:1.8em;">我们点击一下中间的click，就出现下面的警告框</span><wbr /><br><span style="font-size:13px;line-height:1.8em;"><wbr /><a href="http://b23.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63f47c04863390943120dd8bd2b7546063e0d4ae17e0154f62ddce3cffdfa05b12968284b81ecf38d060aa1538e0d1760e40c180947e7131fc63715571ba84351127b472667" target="_blank"><img style="border:0;" src="http://b23.photo.store.qq.com/http_imgload.cgi?/rurl4_b=6abeb556bbab993345299435105ef63f47c04863390943120dd8bd2b7546063e0d4ae17e0154f62ddce3cffdfa05b12968284b81ecf38d060aa1538e0d1760e40c180947e7131fc63715571ba84351127b472667" /></a><wbr /></span><wbr /><br><span style="font-size:13px;line-height:1.8em;">这样一个基本的LCDS应用就完成了</span><wbr /> <!--v:3.2--> ]]></description>
<category><![CDATA[Flex研究]]></category>
<author><![CDATA[81916919@qq.com(/hanx时间轴)]]></author>
<comments>http://81916919.qzone.qq.com/blog/1253260203#comment</comments>
<qz:effect>134218241</qz:effect>
<pubDate>Fri, 18 Sep 2009 07:50:03 GMT</pubDate>
<guid>http://81916919.qzone.qq.com/blog/1253260203</guid>
</item>

<item>
<title><![CDATA[[转]flash进化图]]></title>
<link>http://81916919.qzone.qq.com/blog/1248689582</link>
<description><![CDATA[7yue的Blog有一张Flash进化图，顺手转载一下。<br>看看你是在哪个阶段开始跟随Flash的。我记得我是从flash 4开始的。<br><br><a href="http://www.7yue.com/upload/flash进化.png" target="_blank"><wbr /><a href="http://www.7yue.com/upload/flash进化.png" target="_blank"><img style="border:0;" src="http://www.7yue.com/upload/flash进化.png" /></a><wbr /></a><wbr /> <!--v:3.2--> ]]></description>
<category><![CDATA[AS3学习]]></category>
<author><![CDATA[81916919@qq.com(/hanx时间轴)]]></author>
<comments>http://81916919.qzone.qq.com/blog/1248689582#comment</comments>
<qz:effect>134218241</qz:effect>
<pubDate>Mon, 27 Jul 2009 10:13:02 GMT</pubDate>
<guid>http://81916919.qzone.qq.com/blog/1248689582</guid>
</item>

<item>
<title><![CDATA[CS3,CS4软件数据库损坏无法安装的解决办法]]></title>
<link>http://81916919.qzone.qq.com/blog/1248237608</link>
<description><![CDATA[2008-11-20 14:16<br>下了一个flash cs3 居然不能安装 我原来以为安装包坏了<br><br>后来查了查 发现了photoshop cs3 安装也有类似的问题 那些文章写的太复杂了 而且也不实用于flash<br><br>解决flash无法安装的方法很简单 用系统监控程序监控了安装程序启动过程<br><br>发现在安装包在读<span style="font-family:'Courier';line-height:1.8em;">C:\Program Files\Common Files\Adobe\backup\<span style="font-family:'Courier';line-height:1.8em;">caps.db</span><wbr /> 这个文件的时候 一会就报错了<br><br>所以 删除这个文件试了下    搞定</span><wbr /> <!--v:3.2--> ]]></description>
<category><![CDATA[AS3学习]]></category>
<author><![CDATA[81916919@qq.com(/hanx时间轴)]]></author>
<comments>http://81916919.qzone.qq.com/blog/1248237608#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Wed, 22 Jul 2009 04:40:08 GMT</pubDate>
<guid>http://81916919.qzone.qq.com/blog/1248237608</guid>
</item>

<item>
<title><![CDATA[AS3_PHP_JPEG Encoder应用：从Flash中保存图片]]></title>
<link>http://81916919.qzone.qq.com/blog/1245114500</link>
<description><![CDATA[2009-02-06 13:58<br>AS3 在图片处理方面给我们带来了令人惊奇的功能。其中一个特性就是允许将一个显示对象编码为JPEG格式，当然要感谢JPEG Encoder包含在了AS3 Core Library里面，这让我们可以做一个实际上非常容易的实例。在这篇文章里，我将向你展示如何创建一个Flash文件，并且把一个电影剪辑编码成 JPEG格式，然后允许用户下载这个图片到他们的桌面上。<br>或许下面这个例子可以给你一些启发，告诉你如何应用这项技术，尝试在上面绘画，然后点击下面的按钮吧。<br><a href="http://designreviver.com/wp-content/uploads/2008/06/sketch.swf" target="_blank"><span style="color:#5e4830;line-height:1.8em;">点击这里查看示例</span><wbr /></a><wbr /><br><span style="font-weight:bold"><wbr />准备工作</span><wbr /><br>在我们开始之前，请确保你拥有了<a href="http://code.google.com/p/as3corelib/" target="_blank"><span style="color:#5e4830;line-height:1.8em;">ActionScript 3 Core Library</span><wbr /></a><wbr />。这个类库包含了一些很有用的类，用于简化我们的开发工作，比如MD5加密，日期格式化，图片编码等等。一旦你拥有这个类库，只需将它拖放到你准备好的类文件夹中。现在我们可以引入JPGEncoder。<br>Actionscript:<br><ol style="list-style-type:decimal">import com.adobe.images.JPGEncoder;<br></li></ol><br><span style="font-weight:bold"><wbr />编码电影剪辑</span><wbr /><br>在这个示例中，我们假设要被编码的电影剪辑被命名为sketch_mc。在我们使用JPGEncoder之前，这个电影剪辑需要转换为Bitmap 格式。要做到这一点，我们需要使用BitmapData类。这个类的构造器需要接受2个参数：宽度和高度。如果我们希望最后的JPEG图像的大小与 sketch_mc的大小一致，我们可以使用sketch_mc的宽度和高度属性。然后我们把sketch_mc作为一个参数，使用draw函数绘制 Bitmap。<br>Actionscript:<br><ol style="list-style-type:decimal">import com.adobe.images.JPGEncoder;<br><br>var jpgSource:BitmapData = new BitmapData (sketch_mc.width, sketch_mc.height);<br>jpgSource.draw(sketch_mc);<br></li></ol>现在sketch_mc已经是Bitmap的数据来源，我们可以使用JPGEncoder了。在创建这个类的实例的时候，你可以通过传递一个从1到 100的数字来设置压缩比。然后为了创建JPEG图像，我们需要调用encode函数，并且把我们的Bitmap数据作为传递参数。encode函数会以 ByteArray的形式返回JPEG图像，在AS3中编写这些代码是非常容易的。<br>Actionscript:<br><ol style="list-style-type:decimal">import com.adobe.images.JPGEncoder;<br><br>var jpgSource:BitmapData = new BitmapData (sketch_mc.width, sketch_mc.height);<br>jpgSource.draw(sketch_mc);<br><br>var jpgEncoder:JPGEncoder = new JPGEncoder(85);<br>var jpgStream:ByteArray = jpgEncoder.encode(jpgSource);<br></li></ol><span style="font-weight:bold"><wbr />从FlashPlayer中保存图像到桌面</span><wbr /><br>AS3 已经完成了将电影剪辑编码为JPEG的工作，但是我们还需要一点小小的改动，让它可以真实的下载。要实现这一步，我们需要使用 URLRequest类发布ByteArray数据到一个动态网页中。既然我们要发送二进制数据，就需要设置内容类型为 “application/octet-stream”。当然我们下载文件的时候需要一个文件名称，所以我们为动态网页传递了一个字符串形式的参数。<br>Actionscript:<br><ol style="list-style-type:decimal">import com.adobe.images.JPGEncoder;<br><br>var jpgSource:BitmapData = new BitmapData (sketch_mc.width, sketch_mc.height);<br>jpgSource.draw(sketch_mc);<br><br>var jpgEncoder:JPGEncoder = new JPGEncoder(85);<br>var jpgStream:ByteArray = jpgEncoder.encode(jpgSource);<br><br>var header:URLRequestHeader = new URLRequestHeader(”Content-type”, “application/octet-stream”);<br>var jpgURLRequest:URLRequest = new URLRequest(”jpg_encoder_download.php?name=sketch.jpg”);<br>jpgURLRequest.requestHeaders.push(header);<br>jpgURLRequest.method = URLRequestMethod.POST;<br>jpgURLRequest.data = jpgStream;<br>navigateToURL(jpgURLRequest, “_blank”);<br></li></ol>下面是用于保存JPEG图片的PHP代码。这里我使用了PHP技术，实际上你可以使用任何其它的动态语言。<br>PHP:<br><ol style="list-style-type:decimal">if (<a href="http://www.php.net/isset" target="_blank">isset</a><wbr />($GLOBALS[&quot;HTTP_RAW_POST_DATA&quot;]))<br>{<br>// get bytearray<br>$jpg = $GLOBALS[&quot;HTTP_RAW_POST_DATA&quot;];<br><br>// add headers for download dialog-box<br><a href="http://www.php.net/header" target="_blank">header</a><wbr />(’Content-Type: image/jpeg’);<br><a href="http://www.php.net/header" target="_blank">header</a><wbr />(”Content-Disposition: attachment; filename=”.$_GET[’name’]);<br><a href="http://www.php.net/echo" target="_blank">echo</a><wbr /> $jpg;<br>}<br><a href="http://designreviver.com/free/jpeg_encoder_example.zip" target="_blank"><span style="color:#5e4830;line-height:1.8em;">Download Sample Code</span><wbr /></a><wbr /><br></li></ol> <!--v:3.2--> ]]></description>
<category><![CDATA[AS3学习]]></category>
<author><![CDATA[81916919@qq.com(/hanx时间轴)]]></author>
<comments>http://81916919.qzone.qq.com/blog/1245114500#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Tue, 16 Jun 2009 01:08:20 GMT</pubDate>
<guid>http://81916919.qzone.qq.com/blog/1245114500</guid>
</item>

<item>
<title><![CDATA[45度地图编辑器及游戏开发心得]]></title>
<link>http://81916919.qzone.qq.com/blog/1244610768</link>
<description><![CDATA[45度地图编辑器及游戏开发心得 作者：wxsr   类型:原创   来源:<a href="http://space.flash8.net/bbs/thread-376523-1-1.html" target="_blank">闪吧论坛</a><wbr /><br>这个编辑器是本人为公司项目专门开发的一个功能比较齐全的45度视角下的地图编辑器，碍于公司产品即将发布，及本编辑器已申请专利的缘故。虽然在本帖最后会提供一个体验版本，但是需要邀请码才能使用，望见谅，邀请码之发放少量，发完即止，望见谅。前部分将介绍本编辑器的一些功能特性，后边将总结下45度视角编辑器的一些心得。希望对大家有所用途。<br><span style="font-weight:bold"><wbr />版本</span><wbr />：v2.0 <br><span style="font-weight:bold"><wbr />作者</span><wbr />：吾系衰人（wxsr）<br><span style="font-weight:bold"><wbr />Email</span><wbr />：wxsr2008@126.com<br><span style="font-weight:bold"><wbr />特性</span><wbr />：<br><ol style="list-style-type:decimal"><li style="margin:25px;">共享资源库， <li style="margin:25px;">地形，元件，地图的层次结构 <li style="margin:25px;">所有文件都可增删保存再编辑； <li style="margin:25px;">自动深度排序； <li style="margin:25px;">地图实况测试； <li style="margin:25px;">元件旋转 <li style="margin:25px;">场景旋转 <li style="margin:25px;">元件可旋转视角后添加到场景。 <li style="margin:25px;">地图编辑过程中可以增删区域。 <li style="margin:25px;">笔触清楚，网格显示，物品分栏显示； <li style="margin:25px;">导入背景 <li style="margin:25px;">小地图预览</li></ol><span style="font-weight:bold"><wbr />功能特征</span><wbr /><br>采用分层处理<br>将地图要素拆分为：地形，元件，地图3大模块<br>模块间各自独立编辑，保存，重编辑。完成后于地图模块继承<br>地形：作为地图的区域模块。其特征主要在于预先指定好地图的编辑范围。<br>适用于预先根据背景资源进行量身绘制编辑地图区域。<br><div style="text-align:center;"><wbr /><a href="http://www2.flash8.net/UploadTeach/200906/20090605215543687.jpg" target="_blank"><img style="width:510px;height:266px;border:0;" src="http://www2.flash8.net/UploadTeach/200906/20090605215543687.jpg" /></a><wbr /><br>点击放大</div>元件：作为地图的物品模块。可根据于场景中的特性，细分为：阻碍型，挂件型，地表型。三种形式。<br>每类元件文件都有自身属性。如，于45度坐标中的（高，宽，长）及交互，是否为墙壁等。<br><ul style="list-style-type:disc"><li style="margin:25px;">阻碍类型元件：完成编辑后不能于其占用区域内行走或摆放物品。 <li style="margin:25px;">挂件类型元件：其占有区域下依然可以防止元件，且其深度冗员高于阻碍元件。 <li style="margin:25px;">地形类型元件：作为地表层的组成元件，其深度在阻碍及挂件元件之下，一般作为背景形式错在。</li></ul><div style="text-align:center;"><wbr /><a href="http://www2.flash8.net/UploadTeach/200906/20090605215543450.jpg" target="_blank"><img style="width:510px;height:237px;border:0;" src="http://www2.flash8.net/UploadTeach/200906/20090605215543450.jpg" /></a><wbr /></div>资源库管理：点击菜单--》设置 面板（或者点击seting按钮），就可以增加删除swf资源库，资源库读取后将会自动将所有带链接名的元件显示在tags 列表下。本编辑器的资源库是公用的，也就是说，只要你编辑完一个元件，你可以在任一地图上使用这个元件。但要注意的是资源库更新时，以往编辑的元件图像也会跟着更新，但数据于地图中是不变的，这样做是为了避免因为后边更新了一个元件的数据，导致之前编辑地图走样，数据错乱等。这部分特征只会体现在地图文件上，因为四度文件是直接将所有数据拷贝一份写入文件中去的，而元件，则因为可以冲新编辑故不会有这方面的问题，只要在更新完资源库后重新修改原有的元件文件即可。再者要注意的是每个资源库的文件名必须唯一。如果是团队开发的，可以将共享的资源库放到网上邻居，然后全部选择哪个资源从而达到资源同步的目的，也可以通过svn等方式同步资源库。<br><div style="text-align:center;"><wbr /><a href="http://www2.flash8.net/UploadTeach/200906/20090605215543464.jpg" target="_blank"><img style="width:510px;height:275px;border:0;" src="http://www2.flash8.net/UploadTeach/200906/20090605215543464.jpg" /></a><wbr /><br>点击放大</div>在绘制地形上，本编辑器采用的是自定义绘制模式，使用者只要根据自己需要绘制地形区域即可。这样做的好处在于最大限度的缩小数据的大小，以及保存后当作可选文件形式在创建地图时供使用者选择。<br><br>元件及场景都具有旋转编辑功能。<br>编辑元件时请先从tags lists列表中双击或者拖入你要选择的素材。<br>然后根据自己需要于下边的属性栏中设定其属性。哟啊注意的是，当我们创建一个元件后，我们需要先设定区域，该区域是45度下物品与地面接触的3维接触区域。不要图片有多大就绘制多大，那是错误的。然后按空格键为其4个视角下都调整坐标偏移值按空跟键后系统会自动将原先绘制好的区域旋转一个视角的。然后我们需要为个元件设定他们的3维高度。最后要注意的一点是，必须要回到第一视角下保存该文件，不然后边应用时会出错。<br>当我们预先编辑完一批地形跟元件后我们就可以创建属地图模块了。<br><div style="text-align:center;"><wbr /><a href="http://www2.flash8.net/UploadTeach/200906/20090605215544600.jpg" target="_blank"><img style="width:510px;height:373px;border:0;" src="http://www2.flash8.net/UploadTeach/200906/20090605215544600.jpg" /></a><wbr /><br>点击放大</div>在创建地图模块的对话框中我们可以看到。地形的选择项，用户如果没有选取原先编辑的地形系统会自动默认创建一个菱形区域，当然你可以选择以前编辑好的地形或者，修改45度视角下的行，列。不要担心生成后就没办法再编辑。在地图模式下把工具栏里的lock勾选项去点就可以通过绘制清楚选项来编辑了，但要注意的是编辑后记得要把lock沟回去，从而避免不必要的问题。<br>当我们创建完地图后，就可以从items列表里选择一个元件拖进场景。（注意双击操作是进行该元件的编辑，会切换到该元件的的编辑状态，在没保存地图文件的情况下，是不可以还原地图文件的）当我们选定了一个元件后可以在上边的预览框里反转元件的视角。然后再拖进场景，那样得到的就是你所看到的效果了。非常简单轻松就可以创建出你想要的效果。当然你也可以不旋转元件的视角而直接通过按’a‘键来旋转场景的视角，同样可以达到那样的效果的。<br>编辑工具栏里提供了多个小功能按钮，勾选其可以方便工作。在已经感觉效率比较慢时，如果用户之前是通过北京绘制地形插入地图数据的话，用户可以把网格栏去掉，而直接导入背景图，，当用户编辑元件时可以把colorGround的勾选去掉，或者把playground勾选去掉。那样就看不到场景上的阻碍及挂件物品了，背景物品的可是状态可以通过勾选background按钮来实现<br>所有模块都可以通过快捷键‘S’或者菜单栏--》文件--》保存 指令来保持文件方便以后重编辑文件。<br>菜单栏里还提供了测试指令，使用者可以点击该指令选择一副已经编辑好的地图文件，进行移动，观看等效果。<br>测试指令已经包含本系统专属的a×算法。及深度排序效果，所以观看到的效果将是应用到场景的实际效果。<br>菜单栏有创建指令，用户也可以通过资源库下边的+号按钮创建当前打开的不同类型文件。 通过减号用户可以删除选中的该文件。用户也可以打开seting按钮，对资源库进行增删，拷贝数据保存地址，用户可以直接预览所以数据文件。<br><div style="text-align:center;"><wbr /><a href="http://www2.flash8.net/UploadTeach/200906/20090605215544215.jpg" target="_blank"><img style="width:510px;height:278px;border:0;" src="http://www2.flash8.net/UploadTeach/200906/20090605215544215.jpg" /></a><wbr /><br>点击放大</div>用户可以在windows下拷贝文件，重命名等，等再次打开编辑器后拷贝的数据，或重命名的，或删除的 数据将 自动更新列表。重而达到数据备份，同步等功能。<br><div style="text-align:center;"><wbr /><a href="http://www2.flash8.net/UploadTeach/200906/20090605215544661.jpg" target="_blank"><img style="width:510px;height:367px;border:0;" src="http://www2.flash8.net/UploadTeach/200906/20090605215544661.jpg" /></a><wbr /><br>点击放大</div><div style="text-align:center;"><span style="color:#0000ff;line-height:1.8em;"><wbr /><a href="http://www2.flash8.net/UploadTeach/200906/20090605215544266.jpg" target="_blank"><img style="width:510px;height:122px;border:0;" src="http://www2.flash8.net/UploadTeach/200906/20090605215544266.jpg" /></a><wbr /></span><wbr /></div><div style="text-align:center;"><span style="color:#0000ff;line-height:1.8em;"><wbr /><a href="http://www2.flash8.net/UploadTeach/200906/20090605215544747.jpg" target="_blank"><img style="width:510px;height:379px;border:0;" src="http://www2.flash8.net/UploadTeach/200906/20090605215544747.jpg" /></a><wbr /><br></span><wbr />点击放大</div><div style="text-align:center;"><span style="color:#0000ff;line-height:1.8em;"><wbr /><a href="http://www2.flash8.net/UploadTeach/200906/20090605215544164.jpg" target="_blank"><img style="width:510px;height:395px;border:0;" src="http://www2.flash8.net/UploadTeach/200906/20090605215544164.jpg" /></a><wbr /></span><wbr /></div><div style="text-align:center;"><span style="color:#0000ff;line-height:1.8em;"><wbr /><a href="http://www2.flash8.net/UploadTeach/200906/20090605215544792.jpg" target="_blank"><img style="width:510px;height:361px;border:0;" src="http://www2.flash8.net/UploadTeach/200906/20090605215544792.jpg" /></a><wbr /><br></span><wbr />点击放大<br><br></div>好下边偶说说45度编辑器的一些心得：<br><span style="font-weight:bold"><wbr />1.为什么要开发一个编辑器？</span><wbr /><br>很多开发者都没有先考虑为什么我要开发一个地图编辑器，往往都是因为大家都有，所以就去开发。很多游戏都有自己的专属编辑器，就像魔兽的那个让人仰望的编辑器，里边包含了诸如地图编辑器，事件编辑器，战役编辑器，AI编辑器，环境编辑器等等诸多编辑器，可以说，一个好的编辑器是一个成功的游戏必不可少的组成。我们开发一个编辑器是为了方便我们往后的开发工作，而不是只为了别人都有而开发。当你明确了你的游戏需求后，然后需要针对性的构架你的编辑工具。<br>编辑器的功能要根据我们要开发的游戏的需求来决定其功能。还有的就是我们要注意在编写这样的一个工具时要把算法及相关逻辑整理分层好。因为编辑器毕竟是编辑器，我们到了实际游戏场景中还是得再次把原先的逻辑重新实现的，所以编辑器的结构及代码的分离效果很大层度上影响到你往后的开发。<br><span style="font-weight:bold"><wbr />2.一些主要用到的算法。</span><wbr /><br>先说说45度视角下比较难写好的深度消隐算法。相信很多开发者都疼为此头疼，不知道如何入手，。网上有很多类似的深度算法，但很多效果都不如人意，特别是用y轴判断的那种，事实上这种算法不准确是因为他忽略了一些物品不等长的情况，当然如果你的游戏里的场景物品都是等大的战棋类游戏，这种算法足以你使用了，但事实上一般的45度游戏或者社区都是很多不等大物品组成的。一些案例，想this6，他们所采取的方法是预先在fla里手动排序好物品的深度，然后再场景中通过交换深度的方法来实现井深的效果，这种方法不不好之处在于，一些动态场景因为没有预先编辑好一个准确的深度，那样交换深度的小过将是很差的，从this6前期的自定义用户场景我们也可以看出这方面的效果，这也是他们现在采用缩小场景避免排序不准确带来的不好体验的一个必然选择。还有就像摩尔，摩尔前期也是典型的只根据y轴排序的一个案例，效果相当不好，但后期做了优化。<br>要井深准确，无法就两个方向走。要们将所有物品统一大小，然后用y轴排序，要么就是写出一套使用性广泛的深度算法。<br>这里我推荐的方法也是现在很多大型2.5d游戏使用的方法。2分法。2分在在于其能准确的将一个空间的物品的井深层次很好的划分出来，我们只要通过一个物品为参照物先划分出前后两个空间然后递归刚才的方法即可，下边是本人之前写的消隐算法就是以2分法为基础写的一套45度视角下的消隐算法，<a href="http://wxsr.blogbus.com/logs/32001884.html" target="_blank">http://wxsr.blogbus.com/logs/32001884.html</a><wbr /><br>我们在说说A星算法，其实作为游戏a星算法是不一定要用到的，我们要根据游戏的实际需求来开发我们的游戏才是明智之举很多情况下我们可以选择性的将寻路部分放到小地图上而不是大地图上，那样有利于我们整个游戏的效率及执行，我们可以采用两点间直线移动，移动到不可走地方就停止移动的方法来取代a星。这样做效果也是不错的。而且效率也高。可以把节省下来的消耗应用到别的地方去。再说回a星，as3效率的提高，现在写a星算法只要不是很冗余效率基本上都到60-90毫秒左右就可以完成了a星算法无非就是计算最优值寻找出一条能通道目的地的树状结构，然后通过倒退法，得到一条最优的路径。优化的方法很多想我之前说的2分法就是一种，我们也可以用4叉树，2查树等方法优化效率，无论是4叉树还是2叉树，目的都是在缩小路径的范围，当然前提我们都需要预先建树，注意的是，我们在场景深度算法放也可以用到4叉树，2查树这是我的改良版a星算法：<br><a href="http://wxsr.blogbus.com/logs/32550422.html" target="_blank">http://wxsr.blogbus.com/logs/32550422.html</a><wbr />，这个算法没有哟娜跟传统的2维数组作为存储容器，而用哈希表，这样做的好处在于查询跟修改的速度要比2维数组的快而且方便。<br>最后说说资源管理跟事件管理。只所以要这个主要是因为flash的内存管理问题，太分散的管理方式无疑对我们管理内存几会有相当大的麻烦统一的内存管理有利于解决因为资源加载带来的诸多麻烦，还有就是事件的统一注册管理有人可能认为这样做很麻烦没必要，但我想说的是，在flash中往往因为我们很容易忽略的问题导致了我们的内存不能回收，当中最为显著的就是对象的时间引用上。很多人抱怨as的弱引用，事实上只要你看过帮助文档就不不能看出其实弱引用是没问题的，因为你的对象没有注销，所以事件必然还在引用状态。加载的资源应为都是一次性的所以基本都是很容易删除的。但一些类的实例因为引用的多指向导致了内存不能回收，这正是我说统一管理事件注册的用意，因为那样我们才可以更好的完全删除之前所注册的所有事件的。一般我们御载一个场景我建议都注销下原先的所有幀听，那样才能保证事件不在被引用，从而保证内存可以顺利回收。<br>再补充一点就是，资源及源码的加密。<br>现在一般的做法都是混淆编辑好的swf的2进制源码，然后在场景中再还原。<br>这里提供下我的处理方法：<br><a href="http://wxsr.blogbus.com/logs/32850824.html" target="_blank">http://wxsr.blogbus.com/logs/32850824.html</a><wbr /> <!--v:3.2--> ]]></description>
<category><![CDATA[AS3学习]]></category>
<author><![CDATA[81916919@qq.com(/hanx时间轴)]]></author>
<comments>http://81916919.qzone.qq.com/blog/1244610768#comment</comments>
<qz:effect>134218241</qz:effect>
<pubDate>Wed, 10 Jun 2009 05:12:48 GMT</pubDate>
<guid>http://81916919.qzone.qq.com/blog/1244610768</guid>
</item>

<item>
<title><![CDATA[FLEX SDK路径]]></title>
<link>http://81916919.qzone.qq.com/blog/1244177436</link>
<description><![CDATA[FLEX SDK路径 <br>FLASH首选参数设置 <br>$(AppConfig)/ActionScript 3.0/libs/flex_sdk_3/ <!--v:3.2--> ]]></description>
<category><![CDATA[AS3学习]]></category>
<author><![CDATA[81916919@qq.com(/hanx时间轴)]]></author>
<comments>http://81916919.qzone.qq.com/blog/1244177436#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Fri, 05 Jun 2009 04:50:36 GMT</pubDate>
<guid>http://81916919.qzone.qq.com/blog/1244177436</guid>
</item>

<item>
<title><![CDATA[Flex程序与html通信方法大全]]></title>
<link>http://81916919.qzone.qq.com/blog/1244090313</link>
<description><![CDATA[Flex通常作为一个web项目的一部分嵌入到一个web页中，因此Flex程序和web页面的通信就变得非常重要。 <br>1）  Flex提供了多种方法实现Flex程序和封装页面的交互，主要有：flashVars属性，查询字符串参数，navigateToURL()方法，以及flash.external.ExternalInterface类。 <br>2）    <span style="font-size:10px;line-height:1.8em;">Flex程序</span><wbr />   获取环境信息：Application.application.url获取封装页面的URL，以及使用@ContextRoot() ； 以及可以通国 flash.system.Capacities获取到有关系统的一些信息，比如版本、语言、操作系统等； <br>3）    flashVars用来从外部封装页面向Flex程序传送数据： <br>         在封装页面传入参数值：AC_FL_RunContent(flashVars, “para1=value1&amp;…&amp;paran=valuen”)或者 <br>&lt;Object&gt;<br>    &lt;param name=”movie” value=”wrapper.swf? para1=value1 /&gt; <br>    &lt;embed src=”wrapper.swf?para1=value1/&gt; <br>                  &lt;/Object&gt; <br>                 然后flex 程序里通过 Application.application.parameters.para1获取参数值； <br>4）    ExternalInterface提供方法使Flex程序和外部的封装页面可以相互调用对方的方法，外部接口类要受到域安全性设置（allowScriptAccess, allowNetworking）的约束。 <br>先判断ExternalInterface是否可用： <br>ExternalInterface.available;<br>flex调用js： <br>ExternalInterface.call(funName, funPara1, …, funParaN)；<br>js调用flex： <br>首先flex里面用ExternalInterface.addCallback(“jsFunName”,asFun),将AS里面定义的函数赋予一个js里面调用的函数的名字jsFunName； <br>然后在js里面用mySwf.jsFunName()调用flex里面提供的函数asFun； <br>ExternalInterface安全性：<br>一般来说js和flex的访问局限于同一个域之内。 <br>可以设置&lt;Object&gt;和&lt;Embed&gt;的allowScriptAccess=”value”(value取值:never, always, sameDomain默认)来设置flex访问js的权限。 <br>至于js对于flex方法的访问只有flex里面通过addCallback的js才可以访问，对于跨域，可以试用allowDomain()函数设置。 <br>5）    navigateToURL() 可以用来打开一个新的浏览器窗口，也可以用来flex和js之间的通信。比如: <br>         打开一个新窗口： <br>var <a href="http://writeblog.csdn.net/Editor/FCKeditor/editor/URLRequest" target="_blank"><span style="color:#006699;line-height:1.8em;">url:URLRequest</span><wbr /></a><wbr /> = new URLRequest(<a href="http://blog.csdn.net/" target="_blank"><span style="color:#006699;line-height:1.8em;">http://blog.csdn.net</span><wbr /></a><wbr /> );<br>navigateToURL(url, _blank);<br>这个函数也可以用来执行js，例如： <br>var <a href="http://writeblog.csdn.net/Editor/FCKeditor/editor/URLRequest" target="_blank"><span style="color:#006699;line-height:1.8em;">url:URLRequest</span><wbr /></a><wbr /> = new URLRequest(“javascript:window.close()”); 或者：<br>var urlLURLRequest = new URLRequest(“javascript:myFun(para1…paran)”)<br>myFun()函数是html页面的script部分定义的，函数参数一定要有引号！<br>navigateToURL(url, _self);<br>也可以用来发送email： <br>var urlURLRequest = new URLRequest([email=[ft=#006699,,]mailto:zoushun@hotmail.com</span><wbr />]zoushun@hotmail.com[/email] );<br>navigateToURL(url, _blank); <!--v:3.2--> ]]></description>
<category><![CDATA[AS3学习]]></category>
<author><![CDATA[81916919@qq.com(/hanx时间轴)]]></author>
<comments>http://81916919.qzone.qq.com/blog/1244090313#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Thu, 04 Jun 2009 04:38:33 GMT</pubDate>
<guid>http://81916919.qzone.qq.com/blog/1244090313</guid>
</item>

<item>
<title><![CDATA[ActionScript 3.0 自写类整理笔记（十一）——ApplySocket类]]></title>
<link>http://81916919.qzone.qq.com/blog/1242008788</link>
<description><![CDATA[<a href="http://www.xiaos8.com/article.asp?id=105" target="_blank"><span style="font-size:13px;line-height:1.8em;">ActionScript 3.0 自写类整理笔记（十一）——ApplySocket类</span><wbr /></a><wbr /><br><span style="font-size:13px;line-height:1.8em;">转自：<a href="http://www.xiaos8.com/" target="_blank">小S吧 — sunbright博客</a><wbr /></span><wbr /><br><span style="font-size:13px;line-height:1.8em;">发表于：</span><wbr /><a href="http://www.xiaos8.com/article.asp?cat=1" target="_blank"><span style="font-size:13px;line-height:1.8em;">ActionScript 3.0</span><wbr /></a><wbr /><br><a href="http://www.xiaos8.com/article.asp?id=105#commentbox" target="_blank"><span style="font-size:13px;line-height:1.8em;">才 <span style="font-weight:bold"><wbr />10</span><wbr /> 个人发表意见 </span><wbr /></a><wbr /><br><br><span style="font-size:13px;line-height:1.8em;">这个类是对socket应用就行了系统化封装，并且考虑了很多因素，整合出来的一套，较为完善的flash程序部分socket解决方案<br>比如：一些socket服务端，不一定你send过去一条，他马上就会转发，可能会有延时，或者数据堆在一起等现象，而有写socket服务端，在发送数据的时候，会有一些附加码等，这样不利于取出真实数据<br>该类除了普通的用法，就是对上述假设情况整合了一套解决方案，虽不是很完善，但是能解决大部分问题，至少我碰到过的问题，用这个类应该可以轻松搞定，并且可以适合更复杂的<br><br>另外光看讲解，可能不大懂，提供了什么解决方案，来解决上面这些问题，因此，麻烦大家赖着性子，先过一到代码，然后在看后面的用法<br><br><span style="font-weight:bold"><wbr />index.base.net.ApplySocket类：</span><wbr /><br>对socket进行封装，并且提供多种socket解决方案<br><br><span style="font-weight:bold"><wbr />构造函数：</span><wbr /><br>public function ApplySocket(_isSide:Boolean = false,_datatype:String = &quot;String&quot;)<br>第一参数，是否使用包边，对数据进行处理，详细请看isSide属性<br>第二参数，默认数据发布类型<br>如果构造函数中两个参数都是用默认值，则该类只是一个普普通通的socket类<br><br><span style="font-weight:bold"><wbr />connect方法：</span><wbr /><br>public function connect(_host:String,_port:int):void<br>连接远程socket服务端<br>第一参数：主机地址，可以是202.89.***.***，或者www.*****.com这样的<br>第二参数：连接的端口号<br><br><span style="font-weight:bold"><wbr />send方法：</span><wbr /><br>public function send(...strs):void<br>发送数据到socket服务端<br>如果datatype为Object或者ArrayObject的时候，send方法传入的参数必须大于或者等于两个！否则会引发错误！<br><br><span style="font-weight:bold"><wbr />close方法：</span><wbr /><br>public function close():void<br>关闭与远程服务端连接<br><br><span style="font-weight:bold"><wbr />connect事件：</span><wbr /><br>当连接上了之后，会调度该事件<br><br><span style="font-weight:bold"><wbr />close事件：</span><wbr /><br>当socket关闭后，会调度该事件<br><br><span style="font-weight:bold"><wbr />sync事件：</span><wbr /><br>当有数据需要同步的时候，会调度该事件<br><br><span style="font-weight:bold"><wbr />error事件：</span><wbr /><br>当连接失败的时候，会调度该事件<br><br><span style="font-weight:bold"><wbr />静态常量：</span><wbr /><br></span><wbr /><span style="font-size:13px;line-height:1.8em;">public static const ARRAY:String = &quot;Array&quot;;<br>public static const STRING:String = &quot;String&quot;;<br>public static const OBJECT:String = &quot;Object&quot;;<br>public static const ARRAY_ARRAY:String = &quot;ArrayArray&quot;;<br>public static const ARRAY_OBJECT:String = &quot;ArrayObject&quot;;<br>分别表示datatype的5种类型<br><br><span style="font-weight:bold"><wbr />host属性：</span><wbr /><br>public var host:String;<br>当connect后，会自动把主机地址记录到该值上<br><br><span style="font-weight:bold"><wbr />port属性：</span><wbr /><br>public var port:int;<br>当connect后，会自动把连接端口号记录到该值上<br><br><span style="font-weight:bold"><wbr />space属性：</span><wbr /><br>public var space:String = &quot; &quot;;<br>当send传入2个或者2个以上参数时，采用何种值进行隔开，默认是 空格，如果将值改为&quot;&quot;，则表示不用间隔进行隔开<br><br><span style="font-weight:bold"><wbr />ls属性：</span><wbr /><br>public var ls:String = &quot;{&quot;;<br>当isSide为true的时候，放在左边所使用的记号<br><br><span style="font-weight:bold"><wbr />rs属性：</span><wbr /><br>public var rs:String = &quot;}&quot;;<br>当isSide为true的时候，放在右边所使用的记号<br><br><span style="font-weight:bold"><wbr />connected属性：</span><wbr /><br>public var connected:Boolean;<br>返回socket是否已连接上<br><br><span style="font-weight:bold"><wbr />isSide属性：</span><wbr /><br>public var isSide:Boolean;<br>是否加上包边处理<br>如果该值为true，则表示，send传入的参数都将会用rs和ls包起来进行传输到socket端，当socket原版返回数据的时候，在使用正则将真正的数据取出来，并且以datatype类型返回<br>反之，则不做任何处理。<br><br><span style="font-weight:bold"><wbr />datatype属性：</span><wbr /><br>public var datatype:String;<br>发布同步事件的时候，data采用何种类型返回<br>String：以字符串返回，就是说传入什么返回什么<br><br>Array：以数组返回，选择使用Array返回的时候，isSide值必须为true，否则无法断点找出数组，原理就是，通过使用ls rs两个符号包起来，然后使用正则把符号中的数据提取出来，并且返回数组。如果，socket服务端，可能还会抛出其他数据给客户端，那么采用isSide包边处理，则socket回传的数据，该类会自动处理，将send出去的数据原本拿下来，回传数据不受影响<br><br>Object：以Object返回，如果send过去的数据，都是以一个变量名一个参数值来传输的，那么可以采用Object来接收数据，这样的话，返回data中，直接返回send进去的第一个参数，即可获得值（该类型不常用，一般只在特殊情况使用）<br><br>ArrayArray：以数组嵌套数组的形式返回数据，如果socket的执行效率不是很高，或者同步要求不是很高，那么客户端send一次，未必会接收到同步事件，可能会堆积在一起，一起发送到客户端，这个时候，就可以采用ArrayArray的形式，那么该类会帮你把send过去的数据，重新划分，并且以一个数组为一个send数据的形式返回，很利于做连连看，对对碰类似同步不是很即时，很多个动作可以堆积到一起来发送<br><br>ArrayObject：以数组嵌套Object的形式返回数据，不过多说，只不过是Array加上Object的符合模式而已（该类型也不常用）<br><br>Object与ArrayObject，很适合用在群聊天室，比如send(&quot;sunbright&quot;,&quot;大家好{哈 哈}&quot;);那么即时你在说话的内容加了很多怪怪符号，比如加上分隔符，空格等等，因为Object的解析原理是，拿出第一个参数做为引用变量名，然后把后面的所有数据赋值给这个引用变量名来返回，所有后面的数据不管怎么样，都是不会破坏数据内容，即得到data数据后只要返回data的sunbright值，即可得到说话内容，不会因为格式错误，而把说话的内容有所改变<br><br>该类的作用在datatype属性中，讲了很多东西<br>下面讲讲应用：<br>该类的关键就在于isSide和datatype两个值，<br>如果isSide为true，那么就等于启用了数据包边处理，那么当你调用send方法传入某些参数，只要socket方做到的是，传进去什么他返回给你什么，那么通过同步事件，又会自动把处理过的数据，拿出来，做到数据的准确性，不会因为传了很多参数，有时候会紊乱。<br><br>而当datatype的属性改变后：<br>返回给你的数据，就做了一些处理，这样程序拿到最终数据的时候，根本不用处理，就可以直接使用，因为该类已经把需要解决的问题，搞定了<br>比如数据类型是ArrayArray的时候，请看下面的例子：<br>下面是一个同步的例子，接收到的数据类型是ArrayArray，拿到数据之后for循环一下，把该放的数据，放到相应位置，则完成同步。程序大大简化了，不会我们拿到数据了还要处理，如果是第一次玩socket的，肯定还会碰到很多怪怪问题，比如数据不对，拿出来的数据有问题，还要进行分段处理什么的<br></span><wbr /><span style="font-size:13px;line-height:1.8em;">private function syncFun(e:ApplySocketEvent):void{<br>  var tmpAr:Array = e.data as Array;<br>  for(var i:int = 0; i &lt; tmpAr.length; i ++){<br>    var ar:Array = tmpAr<span style="font-style:italic"><wbr />;<br>    var _index:String = ar[1];<br>    if(_index != index &amp;&amp; (has(_index) || ar[0] == &quot;create&quot;)){<br>      switch(ar[0]){<br>        case &quot;create&quot;:<br>          createTank(_index);<br>        break;<br>        case &quot;move&quot;:<br>          var moveStr:String = ar[2];<br>          var moveAr:Array = moveStr.split(&quot;&quot;);<br>          get(_index).move(expBoo(moveAr[0]),expBoo(moveAr[1]),expBoo(moveAr[2]),expBoo(moveAr[3]));<br>          moveAr = null;<br>        break;<br>        case &quot;bullet&quot;:<br>          get(_index).bullet();<br>        break;<br>        case &quot;shell&quot;:<br>          get(_index).shell();<br>        break;<br>        case &quot;turn&quot;:<br>          var turnStr:String = ar[2];<br>          var turnAr:Array = turnStr.split(&quot;&quot;);<br>          get(_index).turn(expBoo(turnAr[0]),expBoo(turnAr[1]));<br>        break;<br>      }<br>    }<br>    ar = null;<br>  }<br>  tmpAr = null;<br>}</span><wbr /><br><br><span style="font-size:13px;line-height:1.8em;">如果没看懂，还有虾米问题，就跟贴吧。。。<br><br>ApplySocket类源代码： </span><wbr /><span style="font-size:13px;line-height:1.8em;">package index.base.net{<br>  <br>  import flash.events.EventDispatcher;<br>  import flash.events.ProgressEvent;<br>  import flash.events.IOErrorEvent;<br>  import flash.events.Event;<br>  import flash.net.Socket;<br>  <br>  import index.base.events.ApplySocketEvent;<br>  <br>  public class ApplySocket extends EventDispatcher{<br>    <br>    private var socket:Socket;<br>    <br>    public static const ARRAY:String = &quot;Array&quot;;<br>    public static const STRING:String = &quot;String&quot;;<br>    public static const OBJECT:String = &quot;Object&quot;;<br>    public static const ARRAY_ARRAY:String = &quot;ArrayArray&quot;;<br>    public static const ARRAY_OBJECT:String = &quot;ArrayObject&quot;;<br>    <br>    public var host:String;<br>    public var port:int;<br>    public var space:String = &quot; &quot;;<br>    public var ls:String = &quot;{&quot;;<br>    public var rs:String = &quot;}&quot;;<br>    public var isSide:Boolean;<br>    public var datatype:String;<br>    public var connected:Boolean = false;<br>    <br>    public function ApplySocket(_isSide:Boolean = false,_datatype:String = &quot;String&quot;){<br>      isSide = _isSide;<br>      datatype = _datatype;<br>    }<br>    <br>    //连接<br>    public function connect(_host:String,_port:int):void{<br>      host = _host;<br>      port = _port;<br>      <br>      if(connected) socket.close();<br>      socket = new Socket;<br>      socket.connect(host,port);<br>      socket.addEventListener(IOErrorEvent.IO_ERROR,errorFun);<br>      socket.addEventListener(Event.CONNECT,connectFun);<br>    }<br>    <br>    //发送<br>    public function send(...strs):void{<br>      if(datatype == OBJECT || datatype == ARRAY_OBJECT){<br>        if(strs.length &lt; 2) throw new Error(&quot;当数据类型等于Object或者ArrayObject的时候，send方法传入参数必须两个或者两个以上！&quot;);<br>      }<br>      <br>      var str:String = &quot;&quot;;<br>      for(var i:int = 0; i &lt; strs.length; i ++){<br>        str += strs<span style="font-style:italic"><wbr />;<br>        if(i != strs.length - 1) str += space;<br>      }<br>      if(isSide) str = ls + str + rs;<br>      socket.writeUTFBytes(str);<br>      socket.flush();<br>    }<br>    <br>    //断开<br>    public function close():void{<br>      clearEvent();<br>      connected = false;<br>      socket.close();<br>      socket = null;<br>    }<br>    <br>    //连接事件<br>    private function connectFun(e:Event):void{<br>      connected = true;<br>      clearEvent();<br>      socket.addEventListener(ProgressEvent.SOCKET_DATA,socketDataFun);<br>      socket.addEventListener(Event.CLOSE,closeFun);<br>      dispatchEvent(new ApplySocketEvent(ApplySocketEvent.CONNECT));<br>    }<br>    <br>    //关闭事件<br>    private function closeFun(e:Event):void{<br>      connected = false;<br>      dispatchEvent(new ApplySocketEvent(ApplySocketEvent.CLOSE));<br>    }<br>    <br>    //失败事件<br>    private function errorFun(e:IOErrorEvent):void{<br>      close();<br>      dispatchEvent(new ApplySocketEvent(ApplySocketEvent.ERROR));<br>    }<br>    <br>    //接收事件<br>    private function socketDataFun(e:ProgressEvent):void{<br>      var i:int;<br>      var tmp:Object = socket.readUTFBytes(socket.bytesAvailable);<br>      if(isSide){<br>        tmp = tmp.match(new RegExp(&quot;\\&quot; + ls + &quot;[^\\&quot; + rs + &quot;]*\\&quot; + rs,&quot;g&quot;));<br>        for(i = 0; i &lt; tmp.length; i ++){<br>          var str:String = tmp<span style="font-style:italic"><wbr />;<br>          tmp<span style="font-style:italic"><wbr /> = str.substr(1,str.length - 2);<br>        }<br>      }<br>      <br>      switch(datatype){<br>        case STRING:<br>          if(tmp is Array) tmp = tmp.join(&quot;&quot;);<br>        break;<br>        case ARRAY:<br>          if(tmp is String) throw new Error(&quot;错误！如果数据类型选择Array，那么isSide必须为true！&quot;);<br>        break;<br>        case OBJECT:<br>          if(tmp is Array) throw new Error(&quot;错误！如果数据类型选择Object，那么isSide必须为false！&quot;);<br>          tmp = change(tmp as String);<br>        break;<br>        case ARRAY_OBJECT:<br>          if(tmp is String) throw new Error(&quot;错误！如果数据类型选择ArrayObject，那么isSide必须为true！&quot;);<br>          for(i = 0; i &lt; tmp.length; i ++) tmp<span style="font-style:italic"><wbr /> = change(tmp<span style="font-style:italic"><wbr />);<br>        break;<br>        case ARRAY_ARRAY:<br>          if(tmp is String) throw new Error(&quot;错误！如果数据类型选择ArrayArray，那么isSide必须为true！&quot;);<br>          for(i = 0; i &lt; tmp.length; i ++) tmp<span style="font-style:italic"><wbr /> = tmp<span style="font-style:italic"><wbr />.split(space);<br>        break;<br>      }<br>      <br>      var eve:ApplySocketEvent = new ApplySocketEvent(ApplySocketEvent.SYNC);<br>      eve.data = tmp;<br>      dispatchEvent(eve);<br>      <br>      tmp = null;<br>      eve = null;<br>    }<br>    <br>    //清理事件侦听<br>    private function clearEvent():void{<br>      if(socket != null){<br>        if(socket.hasEventListener(IOErrorEvent.IO_ERROR)) socket.removeEventListener(IOErrorEvent.IO_ERROR,errorFun);<br>        if(socket.hasEventListener(Event.CONNECT)) socket.removeEventListener(Event.CONNECT,connectFun);<br>        if(socket.hasEventListener(ProgressEvent.SOCKET_DATA)) socket.removeEventListener(ProgressEvent.SOCKET_DATA,socketDataFun);<br>        if(socket.hasEventListener(Event.CLOSE)) socket.removeEventListener(Event.CLOSE,closeFun);<br>      }<br>    }<br>    <br>    //转换Object<br>    private function change(tmp:String):Object{<br>      var tmpAr:Array = tmp.split(space);<br>      var obj:Object = new Object;<br>      obj[tmpAr.shift()] = tmpAr.join(space);<br>      tmpAr = null;<br>      return obj;<br>    }<br>  }<br>}</span><wbr /><br><br><span style="font-size:13px;line-height:1.8em;">ApplySocketEvent 事件类源代码 </span><wbr /><span style="font-size:13px;line-height:1.8em;">package index.base.events{<br>  <br>  import flash.events.Event;<br>  <br>  public class ApplySocketEvent extends Event{<br>    <br>    public static const CONNECT:String = &quot;connect&quot;;<br>    public static const CLOSE:String = &quot;close&quot;;<br>    public static const SYNC:String = &quot;sync&quot;;<br>    public static const ERROR:String = &quot;error&quot;;<br>    <br>    public var data:Object;<br>    <br>    public function ApplySocketEvent(type:String){<br>      super(type);<br>    }<br>  }<br>}</span><wbr /> <!--v:3.2--> ]]></description>
<category><![CDATA[AS3学习]]></category>
<author><![CDATA[81916919@qq.com(/hanx时间轴)]]></author>
<comments>http://81916919.qzone.qq.com/blog/1242008788#comment</comments>
<qz:effect>134218240</qz:effect>
<pubDate>Mon, 11 May 2009 02:26:28 GMT</pubDate>
<guid>http://81916919.qzone.qq.com/blog/1242008788</guid>
</item>

</channel>
</rss>

