<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>猫脸爬格子-廖湘宁的博客 &#187; Cat Class【类聚】</title>
	<atom:link href="http://www.xncat.com/category/class/feed" rel="self" type="application/rss+xml" />
	<link>http://www.xncat.com</link>
	<description>廖湘宁的博客，flash技术与游戏相关的网站。里面有我学习与研发过种中的记录，catTrain里有许多详细的面向设计者或初学者的教程，catLab与catGame中更有许多我的设想与探索</description>
	<lastBuildDate>Fri, 03 Sep 2010 06:00:39 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>LightCharts &#8211; 轻量级的flex图表组件</title>
		<link>http://www.xncat.com/2010/07/catflash/1258.html</link>
		<comments>http://www.xncat.com/2010/07/catflash/1258.html#comments</comments>
		<pubDate>Wed, 14 Jul 2010 03:25:16 +0000</pubDate>
		<dc:creator>xncat</dc:creator>
				<category><![CDATA[Cat Class【类聚】]]></category>
		<category><![CDATA[Cat Flash【Flash日志】]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[LightCharts]]></category>
		<category><![CDATA[图表]]></category>
		<category><![CDATA[轻量级]]></category>

		<guid isPermaLink="false">http://www.xncat.com/?p=1258</guid>
		<description><![CDATA[来源页面: http://davidmccuskey.com/2010/07/lightcharts-lightweight-charts-for-flex/
资讯原标题: LightCharts – Lightweight charts for Flex
LightCharts是一个轻量级的flex线状图表库。

背景
LightCharts是因为我的一个项目制... ]]></description>
			<content:encoded><![CDATA[<li>来源页面: <a target="_blank" href="http://davidmccuskey.com/2010/07/lightcharts-lightweight-charts-for-flex/" target="_blank">http://davidmccuskey.com/2010/07/lightcharts-lightweight-charts-for-flex/</a></li>
<li>资讯原标题: LightCharts – Lightweight charts for Flex</li>
<p>LightCharts是一个轻量级的flex线状图表库。<br />
<img src="http://www.xncat.com/wp-content/uploads/2010/07/lightcharts-single-screenshot.png" alt="" /></p>
<p><strong>背景</strong><br />
LightCharts是因为我的一个项目制作的，需要追踪股票市场的众多信息。开始我使用 AdobeFlex的图表库，但是我发现使用 Adobe Flex提供的图表，表现起来很糟糕。随着数据量的增加，需要的时间也要相应的增加。当然，这并不一定是由于Adobe的编码不够优良造成的。他们的库需要包含各种个样的功能来处理不同的需求，所以它们显的很重。我不需要更多的功能，仅仅需要数据的灵活显示。<br />
我搜索网上的第三方图表库，我发现了Keith Peters做的一套漂亮的组件库叫做 Minimal Comps。Keith的库很轻量是一个不错的选择，但是MinimalComps是建立在flash环境下的不是为flex准备的，最主要的问题还是组件的生命周期问题。<br />
他的代码给了我灵感，所以我决定使用它作为我的模型，按照我需要的方式修改。<br />
<span id="more-1258"></span><br />
<strong>特点</strong><br />
这个图表组件库有许多新特点和一些新的对象类，包括显示增强和数据交互。例如数据的序列类可以再图形上显示多条线。该工具的架构可以通过创建插件的形式增加数据的处理，而不需要改变任何图表的基类。所以，线状图表类的子类可以有不同的显示方式和特征。我的项目包含了两个图表的例子一个是MACD（指数平滑异同移动平均线）另一个是随机线。<br />
备注：这些例子只是教你如何从基类中扩展你需要的类，而不是教你计算MACS和随机图表的值，至于它们的计算公式可以在网上找到。</p>
<p><strong>演示截图</strong></p>
<p><img src="http://www.xncat.com/wp-content/uploads/2010/07/lightcharts-screenshot.png" alt="" /></p>
<p>在演示的截图里你可以看到许多特点：</p>
<ul>
<li>三种不同的图表（标准，MACD和随机）显示不同的背景包括图像，透明度，线条的颜色，和值得范围。</li>
<li>在第一个图表上，有一个十字线当鼠标经过的时候会有数字出现，所有的图表都有这样的功能。</li>
<li>在第一个和第二个图表上有一个自定义的工具叫DotDisplayTool，它是在数据序列的结尾处显示的小点。DotDisplayTool是一个非交互是插件的例子。</li>
<li>在第二个和第三个图表上有一个自定义工具叫做LinearDrawTool，它允许你在数据上根据起始和终止位置绘制直线并显示图表的值。LinearDrawTool是一个交互插件的例子。</li>
</ul>
<p><strong>示例与源代码</strong></p>
<p>从后面的链接查看示例：<a target="_blank" href="http://davidmccuskey.com/demos/lightcharts/" target="_lightcharts_demo">LightCharts live demo</a></p>
<p>源代码遵循MIT license，请从这里<a href="http://www.xncat.com/wp-content/uploads/2010/07/lightcharts.zip">下载</a></p>
<div  class="related_post_title">猫抓鱼</div><ul class="related_post"><li>2010年04月22日 -- <a href="http://www.xncat.com/2010/04/wenzhai/1019.html" title="我最想转载的air电子书帖【由airia网整理与提供下载】">我最想转载的air电子书帖【由airia网整理与提供下载】</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.xncat.com/2010/07/catflash/1258.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>LoaderMax-【greensock又出重量级产品】</title>
		<link>http://www.xncat.com/2010/06/lookarround/1172.html</link>
		<comments>http://www.xncat.com/2010/06/lookarround/1172.html#comments</comments>
		<pubDate>Wed, 23 Jun 2010 06:35:15 +0000</pubDate>
		<dc:creator>xncat</dc:creator>
				<category><![CDATA[Cat Class【类聚】]]></category>
		<category><![CDATA[东瞧西看【IT技术/新闻】]]></category>
		<category><![CDATA[greensock]]></category>
		<category><![CDATA[LoaderMax]]></category>
		<category><![CDATA[并行下载]]></category>
		<category><![CDATA[恢复加载]]></category>
		<category><![CDATA[暂停加载]]></category>
		<category><![CDATA[预估文件]]></category>

		<guid isPermaLink="false">http://www.xncat.com/?p=1172</guid>
		<description><![CDATA[参考文章: http://www.actionscriptclasses.com/category/bitmap/
参考文章：http://www.cnblogs.com/holybozo/archive/2010/06/17/1759635.html
LoaderMax是一个新的As3加载系统，它不仅能将swf、mp3、css、video、image、text、binary、xm... ]]></description>
			<content:encoded><![CDATA[<p>参考文章: <a target="_blank" href="http://www.actionscriptclasses.com/category/bitmap/" target="_blank">http://www.actionscriptclasses.com/category/bitmap/</a></p>
<p>参考文章：<a target="_blank" href="http://www.cnblogs.com/holybozo/archive/2010/06/17/1759635.html" target="_blank">http://www.cnblogs.com/holybozo/archive/2010/06/17/1759635.html</a></p>
<p>LoaderMax是一个新的As3加载系统，它不仅能将swf、mp3、css、video、image、text、binary、xml等文件加载到你的flash应用里，而且加载文件十分简单。它的文件大小惊人，只有其他加载系统的一半，但是却实现了一些特殊的功能。</p>
<p>地址：<a target="_blank" href="http://www.greensock.com/loadermax/">http://www.greensock.com/loadermax/</a></p>
<p>这里有一些值得注意的特点：</p>
<ul>
<li>在要加载的swf里面集成加载器</li>
<li>LoaderMax中自动解析XML</li>
<li>为任何加载器定义备用URL</li>
<li>为所有的加载器提供统一的属性和方法设置</li>
<li>可以为图片加载器、Swf加载器、视频加载器设置宽高，当其加载完，图片、swf、视频可以自动匹配你所设定的宽高</li>
<li>一个加载者可以拥有多个LoaderMax实例</li>
<li>实时报告加载进度</li>
<li>在一行代码里设置多个事件监听：new LoaderMax({name:”mainQueue”, onComplete:completeHandler, onProgress:progressHandler, onError:errorHandler});</li>
<li>具有暂停加载及恢复加载的功能</li>
<li>对Flex很友好</li>
</ul>
<p><span id="more-1172"></span><br />
1、线性化下载过程<br />
一般的下载队列，是一口气推入n个loader，然后逐个下载，下载完了调用start，开始整个程序。</p>
<p>由于是线性过程，这个时候下载流程比较好控制。假如碰到被下载的一个swf中，又下载别的图片、音乐之类，就成了树形过程了。LoaderMax在这方面的处理是利用一个requireWithRoot 属性，指定该Loader隶属于哪个容器。一旦指定，那么这个Loader所下载内容，就当作容器的一部分。</p>
<p>比如 main.swf &gt; (a.swf &gt; a.mp3) &gt; (b.swf &gt; b.jpg)， a.mp3 和 b.jpg都远大于两个swf。</p>
<p>当main在下载的时候，先下a.swf，完了下b.swf。而a.swf中会去下载a.mp3，b.swf则是下载b.jpg。所以很可能出现的情况是a,b.swf都下载好了，还在同时下载a.mp3和b.jpg。但这个时候main已经算下完了，要start了&#8230;</p>
<p>如果在a.swf下载a.mp3时设置requireWithRoot = root，b.swf也一样。那么main.swf在a.swf之后下a.mp3，直到a.mp3下载完了，才算a.swf下完。这样就把一个树形流程又改为线性的了。</p>
<p>2、预估文件大小<br />
在下载文件时，都知道有个请求过程，这个过程中文件的总大小是不知道的。这样对显示进度就是个麻烦事儿。像以前碰到公司内网关上安了2b防火墙，进来的数据都隔那儿堵着，等cache满到一定大小才一下子返回。搞得每次在公司看loading都是一闪而过，这不是因为快，是因为前面堵着呢，只能傻等着&#8230;.LoaderMax在这方面采用了预估文件大小，利用一个estimatedBytes 属性，先假设要下的文件大小是多少。这样一来，即使请求还没来，下载进度还是有的。如果网络不出问题，等到请求返回了，马上就拿精确的文件大小替换预估值，让进度始终保持在用户眼前，而不会傻等。这个属性的默认大小是 20000 (20k)。</p>
<p>3、tween式初始化<br />
这个就不多说了，还是那句话，没用过TweenLite、TweenMax的人还有么？</p>
<p>4、显示对象的对齐<br />
显示对象在下载后有个比较恼人的问题，就是定位和对齐。这个问题其实已经被TransformManager 很好的解决掉了。LoaderMax只是让操作更简单了。</p>
<p>只需在初始对象的属性里面增加width,heighth或scaleX,scaleY（前者优先权大于后者）再配合scaleModes属性就很轻松了。</p>
<p>5、选择性打包<br />
实际上LoaderMax并不是一个万能下载器，他只是一个壳儿，具体的下载交给SWFLoader,XMLLoader,MP3Loader&#8230;等等，这样的话，项目中要啥就选啥，可以节约文件大小。编译的时候也不会浪费不必要的时间。</p>
<p>6、并行下载<br />
一般的下载队列，就是逐个下载吧？LoaderMax有个maxConnections 属性，可以设置同时下载数。默认为2。</p>
<p>7、下载信息<br />
还有件比较烦人的事情，就是在定义一个loader后，有时候还要再为之定义个变量，指向下载对象。该指向还必须得在下载好以后才能设置。</p>
<p>这点LoaderMax也封装掉了。LoaderMax.getContent()，而且由于Loader事先就是有类型信息的，像CSSLoader,MP3Loader，所以content在使用上有着很高的可读性。</p>
<div  class="related_post_title">猫推拼盘</div><ul class="related_post"><li>2010年07月31日 -- <a href="http://www.xncat.com/2010/07/lookarround/1281.html" title="在麻球做着快乐而有趣的工作【关注大脸猫的新浪围脖】">在麻球做着快乐而有趣的工作【关注大脸猫的新浪围脖】</a> (0)</li><li>2010年05月14日 -- <a href="http://www.xncat.com/2010/05/lookarround/1105.html" title="第3次“中国Flash开发者交流会”火热报名中">第3次“中国Flash开发者交流会”火热报名中</a> (0)</li><li>2010年08月19日 -- <a href="http://www.xncat.com/2010/08/catflash/1328.html" title=" 使用AS3中的FTE与TLF来渲染文本【一】"> 使用AS3中的FTE与TLF来渲染文本【一】</a> (0)</li><li>2010年04月8日 -- <a href="http://www.xncat.com/2010/04/catflash/951.html" title="如何给cat-album准备数据【album的数据模型】">如何给cat-album准备数据【album的数据模型】</a> (2)</li><li>2010年08月18日 -- <a href="http://www.xncat.com/2010/08/mochi/1316.html" title="马鉴：盛大Mochi发布面向中国Flash游戏开发者的游戏平台">马鉴：盛大Mochi发布面向中国Flash游戏开发者的游戏平台</a> (0)</li><li>2010年08月24日 -- <a href="http://www.xncat.com/2010/08/lookarround/1342.html" title="第5届 FLASH开发者交流会 暨FLASH CAMP 2010 ">第5届 FLASH开发者交流会 暨FLASH CAMP 2010 </a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.xncat.com/2010/06/lookarround/1172.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>看看dragRoll与rollPage是如何搭档【ThumbRoll类】</title>
		<link>http://www.xncat.com/2010/06/class/1168.html</link>
		<comments>http://www.xncat.com/2010/06/class/1168.html#comments</comments>
		<pubDate>Tue, 22 Jun 2010 08:42:35 +0000</pubDate>
		<dc:creator>xncat</dc:creator>
				<category><![CDATA[Cat Class【类聚】]]></category>
		<category><![CDATA[tutorial【教程】]]></category>
		<category><![CDATA[精通]]></category>
		<category><![CDATA[dragRoll]]></category>
		<category><![CDATA[RollPage]]></category>
		<category><![CDATA[ThumbRoll]]></category>
		<category><![CDATA[搭档]]></category>

		<guid isPermaLink="false">http://www.xncat.com/?p=1168</guid>
		<description><![CDATA[关于这两个类前面已经有很详细的文章了。
那么它是如何搭档的呢？我写了这个ThumbRoll类，看看示例吧。











使用方法：

var thumbRoll:ThumbRoll;

//create thumbRoll
var thumbvars:Object={childMargin:10,chil... ]]></description>
			<content:encoded><![CDATA[<p>关于这两个类前面已经有很详细的文章了。</p>
<p>那么它是如何搭档的呢？我写了这个ThumbRoll类，看看示例吧。</p>
<p>
<object width="510" height="120">
<param name="movie" value="http://www.xncat.com/wp-content/uploads/2010/06/ThumbRoll-sp-demo.swf"></param>
<param name="quality" value="medium"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#000000"></param>
<param name="allowFullScreen" value="true"></param>
<embed type="application/x-shockwave-flash" width="510" height="120" src="http://www.xncat.com/wp-content/uploads/2010/06/ThumbRoll-sp-demo.swf" quality="medium" bgcolor="#000000" wmode="window" menu="false" allowFullScreen="true" ></embed>
</object>
</p>
<p>使用方法：</p>
<pre><code>
var thumbRoll:ThumbRoll;

//create thumbRoll
var thumbvars:Object={childMargin:10,childPad:8,childWidth:120,childHeight:90,pageNum:4};
thumbRoll=new ThumbRoll(albumData["imgUrlArr"],ThumbDrag,ThumbUI,thumbvars,"x");
thumbRoll.addEventListener("gotoImage",gotoImage);
addChild(thumbRoll);
thumbRoll.dragY=100;
thumbRoll.dragX=0;

function gotoImage(e:Event):void {
	trace(thumbRoll.current);
}
</code></pre>
<p>这个类的参数说明：ThumbRoll(_thumbArr:Array,_dragUi:Class,_thumbUi:Class,$vars:Object,$aix:String=&#8221;x&#8221;)<br />
<span id="more-1168"></span><br />
<strong>_thumbArr:Array </strong> 所有图片的地址的数组<br />
<strong>_dragUi:Class</strong> 拖动按钮的绑定类<br />
<img src="http://www.xncat.com/wp-content/uploads/2010/06/dragimg.jpg" alt="" /><br />
<strong>_thumbUi:Class</strong> 缩略图的背景UI绑定类<br />
<img src="http://www.xncat.com/wp-content/uploads/2010/06/thumbbg.jpg" alt="" /><br />
<strong>$vars:Object</strong> 这个对象会接收五个参数,可以设置以下属性</p>
<p style="padding-left: 15px;">pageNum: 每页子对象数<br />
childWidth: 子对象宽<br />
childHeight: 子对象高<br />
childPad: 子对象内边距<br />
childMargin: 子对象外边距</p>
<p><strong>$aix:String</strong> 水平或是垂直方向，&#8221;x&#8221;为水平，&#8221;y&#8221;为垂直。</p>
<p><strong>dragX 属性</strong> 可以设置拖动条的水平位置</p>
<p><strong>dragY 属性</strong> 可以设置拖动条的垂直位置</p>
<p><strong>nextPage()方法</strong> 翻到下一页</p>
<p><strong>prePage()方法</strong> 翻到上一页</p>
<p><strong>hideDrag()方法</strong> 如果不需要拖动条，可以用此方法隐藏</p>
<p><strong>pickPosition(n:Number)方法</strong> 可以通过点击拖动横条获取鼠标的位置来定位拖动杆</p>
<p><strong>updateThumb(n:Number)方法</strong> 可以从外部更新当前缩略图为第几张</p>
<p><strong>autoRollPage()方法</strong> 当前缩略图到达新的分页时可以从外部驱动翻页</p>
<p>有兴趣的朋友可以<a href="http://www.xncat.com/wp-content/uploads/2010/06/thumbRoll.rar">下载</a>原文件看看。</p>
<div  class="related_post_title">猫抓鱼</div><ul class="related_post"><li>2010年05月5日 -- <a href="http://www.xncat.com/2010/05/class/1077.html" title="dragRoll拖动翻页类【rollPage的黄金搭档】">dragRoll拖动翻页类【rollPage的黄金搭档】</a> (1)</li><li>2010年02月2日 -- <a href="http://www.xncat.com/2010/02/catflash/800.html" title="水平与垂直滚屏类RollPage">水平与垂直滚屏类RollPage</a> (2)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.xncat.com/2010/06/class/1168.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>为flash程序制作皮肤【皮肤映射类Skin】</title>
		<link>http://www.xncat.com/2010/05/catflash/1135.html</link>
		<comments>http://www.xncat.com/2010/05/catflash/1135.html#comments</comments>
		<pubDate>Mon, 24 May 2010 05:11:09 +0000</pubDate>
		<dc:creator>xncat</dc:creator>
				<category><![CDATA[Cat Class【类聚】]]></category>
		<category><![CDATA[Cat Flash【Flash日志】]]></category>
		<category><![CDATA[tutorial【教程】]]></category>
		<category><![CDATA[精通]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[Skin]]></category>
		<category><![CDATA[皮肤映射]]></category>
		<category><![CDATA[程序]]></category>

		<guid isPermaLink="false">http://www.xncat.com/?p=1135</guid>
		<description><![CDATA[skin类是一个为了更方便的访问皮肤中的对象而设计的类文件。
在flash中每次都要很麻烦的用getChildAt或getChildByName一层一层的来访问皮肤中的元件，这里设计了一种更简洁的方式来获得设计人员... ]]></description>
			<content:encoded><![CDATA[<p>skin类是一个为了更方便的访问皮肤中的对象而设计的类文件。</p>
<p>在flash中每次都要很麻烦的用getChildAt或getChildByName一层一层的来访问皮肤中的元件，这里设计了一种更简洁的方式来获得设计人员制作的flash文件中的元件或绑定类。<br />
只要继承Skin类并作一些简单的设置就可以用$()方法直接获得某个ui元件,$c()获得某个绑定类,$u获得包含多个ui元件的ui模块。<br />
我通过一个示例文件来详细讲述skin类中的几种用法。</p>
<p>示例文件从这里下载：<a href="http://www.xncat.com/wp-content/uploads/2010/05/skin-sample.rar">skin-sample</a></p>
<p>我们先来看看示例皮肤文件中的类绑定截图<br />
<img src="http://www.xncat.com/wp-content/uploads/2010/05/skin1.jpg" alt="skin映射" /><br />
<span id="more-1135"></span><br />
<strong>先用皮肤的文档类继承Skin类</strong>，skin类继承了Sprite类，所以不用担心文档类需要继承Sprite的问题<br />
皮肤文件端：</p>
<pre><code>
package {
	import flash.display.Sprite;
	import com.monboo.skin.Skin;
	public class CatSkin extends Skin {
		public function CatSkin() {
		}
	}
}
</code></pre>
<p><strong>再在文档类的构造方法中定义皮肤中提供的对象</strong>。</p>
<p>通过三种方法定义皮肤中的对象<br />
public function addClass(cl:Class,cName:String):void<br />
addClass定义绑定类<br />
public function addUI(cName:String,uName:String):void<br />
addUI定义显示对象模块<br />
public function addMap(mapName:String,path:String):void<br />
addMap定义显示对象模块某层级的对象的访问映射</p>
<p><strong>最后在加载皮肤的应用程序端访问皮肤中的对象：</strong></p>
<pre><code>
/********
** load skin
*********/
var albumSkin:Object;
var __albumSkin:Class;
var skinUrl:String="http://www.xncat.com/wp-content/uploads/2010/05/catSkin.swf";
loadSkin();

function loadSkin():void {
	var loadSkin:Loader = new Loader();
	var context:LoaderContext = new LoaderContext();
	context.checkPolicyFile=true;
	context.applicationDomain=new ApplicationDomain(ApplicationDomain.currentDomain);
	loadSkin.load(new URLRequest(skinUrl),context);
	loadSkin.contentLoaderInfo.addEventListener(Event.COMPLETE,skinLoadedFunc);
}
function skinLoadedFunc(e:Event):void {
	__albumSkin=e.target.applicationDomain.getDefinition("CatSkin") as Class;
	<strong>albumSkin = new __albumSkin();</strong>

	trace("[Skin loaded successfully!]");
}
</code></pre>
<p>主要有三种访问皮肤内容的方法<br />
<strong><span style="color: #333399;">1 . 访问皮肤中的类</span></strong><br />
例如我们要获得皮肤中的CtrlUI,PlayerBoxUI,ThumDrag,ThumbUI几个类，从而实现在皮肤文件加载完成后，可以方便的得到这些类的引用，这种情况适用方法1.<br />
皮肤文件端：<br />
public function addClass(cl:Class,cName:String)<br />
cl:Class参数：在皮肤文件中的绑定类<br />
cName:String参数：加载皮肤后获得这个绑定类的名称</p>
<pre><code>
addClass(ThumbUI,"ThumbUI");
addClass(ThumbDrag,"ThumbDrag");
addClass(CtrlUI,"CtrlUI");
addClass(PlayerBoxUI,"PlayerBoxUI");
</code></pre>
<p>加载皮肤的应用程序端：<br />
public function $c(cName:String):Class<br />
cName:String参数：加载皮肤后获得这个绑定类的名称</p>
<pre><code>
var thumbDrag:Class = albumSkin.$c("ThumbDrag") as Class;
var thumbUI:Class = albumSkin.$c("ThumbUI") as Class;
var ctrlUI:Class = albumSkin.$c("CtrlUI") as Class;
var playerBoxUI:Class = albumSkin.$c("PlayerBoxUI") as Class;
</code></pre>
<p><span style="color: #333399;"><strong>2 . 访问皮肤中的显示对象模块</strong></span><br />
比如我们要访问皮肤文件中一个实例化的显示模块volumeControl，它里面有比较复杂的显示对象层级，有比较多的按钮对象，我把为了方便把这个模块绑定成一个类，在应用程序端只需要获得这个模块实例，并addChild到显示列表中就行了。<br />
皮肤文件端：<br />
public function addUI(cName:String,uName:String):void<br />
cName:String参数：加载皮肤后获得这个模块绑定类的名称<br />
uName:String参数：在皮肤文件中模块的实例名</p>
<pre><code>
addClass(VolumeControl,"VolumeControl");
addUI("VolumeControl","vControl");
</code></pre>
<p>加载皮肤的应用程序端：<br />
public function $u(uName:String):Sprite{<br />
uName:String参数：在皮肤文件中模块的实例名</p>
<pre><code>
addChild(albumSkin.$c("vControl"));
</code></pre>
<p><strong><span style="color: #333399;">3 . 访问皮肤中的 显示对象模块中的某一个ui</span></strong><br />
当我们获得了某个显示对象模块后，如何访问它里面比较复杂的显示对象层级，就可以用到这第三种方法了。<br />
皮肤文件端：<br />
public function addMap(mapName:String,path:String):void<br />
mapName:String参数：映射名，通过这个名称可以获得某一个层级的显示对象<br />
path:String参数：映射路径，如vControl.volumUp.soundLine</p>
<pre><code>
addClass(VolumeControl,"VolumeControl");
addUI("VolumeControl","vControl");
addMap("soundLine","vControl.volumUp.soundLine");
</code></pre>
<p>加载皮肤的应用程序端：<br />
public function $(mapName:String):Sprite<br />
mapName:String参数：映射名，通过这个名称可以获得某一个层级的显示对象</p>
<pre><code>
var soundLine:Sprite = albumSkin.$("soundLine"));
</code></pre>
<p>注：</p>
<blockquote><p>你可以把皮肤ui分离成一个独立的皮肤文件用于应用程序加载，也可以不分离把皮肤ui跟应用程序位于同一文件。如果是分离的话，你得在加载成功后的方法中获取皮肤中的对象，如果不分离的话，可以直接访问皮肤中的对象。</p></blockquote>
<div  class="related_post_title">猫抓鱼</div><ul class="related_post"><li>2010年08月29日 -- <a href="http://www.xncat.com/2010/08/lookarround/1348.html" title="flash开发中提高性能方法的整理">flash开发中提高性能方法的整理</a> (1)</li><li>2010年08月18日 -- <a href="http://www.xncat.com/2010/08/mochi/1324.html" title="小s：盛大游戏麻球网上线 Flash独立游戏开发者的曙光">小s：盛大游戏麻球网上线 Flash独立游戏开发者的曙光</a> (0)</li><li>2010年08月18日 -- <a href="http://www.xncat.com/2010/08/mochi/1323.html" title="腾讯博客：Flash Mini Game 盈利平台出现">腾讯博客：Flash Mini Game 盈利平台出现</a> (0)</li><li>2010年08月18日 -- <a href="http://www.xncat.com/2010/08/mochi/1321.html" title="谈熠：做自己心仪的游戏发布给1亿个人">谈熠：做自己心仪的游戏发布给1亿个人</a> (1)</li><li>2010年08月18日 -- <a href="http://www.xncat.com/2010/08/mochi/1319.html" title="猫粮：独立游戏开发者春天">猫粮：独立游戏开发者春天</a> (0)</li><li>2010年08月18日 -- <a href="http://www.xncat.com/2010/08/mochi/1316.html" title="马鉴：盛大Mochi发布面向中国Flash游戏开发者的游戏平台">马鉴：盛大Mochi发布面向中国Flash游戏开发者的游戏平台</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.xncat.com/2010/05/catflash/1135.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>dragRoll拖动翻页类【rollPage的黄金搭档】</title>
		<link>http://www.xncat.com/2010/05/class/1077.html</link>
		<comments>http://www.xncat.com/2010/05/class/1077.html#comments</comments>
		<pubDate>Wed, 05 May 2010 03:38:33 +0000</pubDate>
		<dc:creator>xncat</dc:creator>
				<category><![CDATA[Cat Class【类聚】]]></category>
		<category><![CDATA[tutorial【教程】]]></category>
		<category><![CDATA[精通]]></category>
		<category><![CDATA[dragRoll]]></category>
		<category><![CDATA[RollPage]]></category>
		<category><![CDATA[拖动]]></category>
		<category><![CDATA[翻页]]></category>

		<guid isPermaLink="false">http://www.xncat.com/?p=1077</guid>
		<description><![CDATA[RollPage是通过两个按钮来实现一整页的上翻与下翻页效果，如果要实现通过一个拖杆来拖动翻页呢？那就需要DragRoll来帮忙了。
在窗口中我们常见到这样的应用：


再看看示例demo：



DragRoll跟Ro... ]]></description>
			<content:encoded><![CDATA[<p>RollPage是通过两个按钮来实现一整页的上翻与下翻页效果，如果要实现通过一个拖杆来拖动翻页呢？那就需要DragRoll来帮忙了。<br />
在窗口中我们常见到这样的应用：</p>
<p><img src="http://www.xncat.com/wp-content/uploads/2010/05/h.jpg" alt="" /></p>
<p><img src="http://www.xncat.com/wp-content/uploads/2010/05/v.jpg" alt="" /></p>
<p>再看看示例demo：<br />
<a title="dragRoll拖动翻页类" rel="vidbox 700 180" href="http://www.xncat.com/wp-content/uploads/2010/05/dragRoll.swf"><br />
<img src="http://www.xncat.com/wp-content/uploads/2010/05/dragRoll.jpg" alt="" width="500" height="124" /><br />
</a><br />
DragRoll跟RollPage的参数很相似，不愧是搭档。<br />
<span style="color: #ff6600;"><span style="text-decoration: underline;">DragRoll(target:Sprite,rollMc:Sprite,$vars:Object)</span></span><br />
<span id="more-1077"></span><br />
<strong>target:Sprite  : </strong>拖杆对象<br />
<strong>rollMc:Sprite</strong> ：需要被拖动的对象，把所有内容都放在这个容器中，如多个图片或者各分页内容<br />
<strong>$vars:Object</strong> ：这个对象会接收五个参数,可以设置以下属性</p>
<p style="padding-left: 15px;">pageNum:每页子对象数<br />
totalNum:总子对象数<br />
childWidth:子对象宽<br />
childHeight:子对象高<br />
childMargin:子对象边距</p>
<p><strong>使用这个类的方法：</strong><br />
DragRoll类使用注意：<br />
<strong>//所有的图片都在rollMc中，</strong><br />
<strong>//rollMc在别的容器中，必须保证rollMc的x,y坐标都为0</strong></p>
<pre><code>
var dragObj:Object={pageNum:4,totalNum:14,childWidth:150,childHeight:125,childMargin:10};

//rollMc一定要在别的容器中，保证它的x,y坐标都为0
var dragBar:DragRoll=new DragRoll(bar,container.rollMc,dragObj);
addChild(dragBar);
dragBar.x=35;
dragBar.y=150;

//可以在barLine上点击定位拖杆到想要的位置
barLine.addEventListener(MouseEvent.CLICK,pickPosition);
barLine.buttonMode = true;
function pickPosition(e:MouseEvent):void {
dragBar.pickThumbBar(barLine.mouseX);
}
</code></pre>
<p>dragRoll示例与源代码<a href="http://www.xncat.com/wp-content/uploads/2010/05/dragRoll_1.0.rar">下载</a></p>
<blockquote><p>补充说明：<br />
目前此类还不支持垂直拖放；<br />
拖杆还不能动态改变长度。
</p></blockquote>
<div  class="related_post_title">猫抓鱼</div><ul class="related_post"><li>2010年06月22日 -- <a href="http://www.xncat.com/2010/06/class/1168.html" title="看看dragRoll与rollPage是如何搭档【ThumbRoll类】">看看dragRoll与rollPage是如何搭档【ThumbRoll类】</a> (0)</li><li>2010年02月2日 -- <a href="http://www.xncat.com/2010/02/catflash/800.html" title="水平与垂直滚屏类RollPage">水平与垂直滚屏类RollPage</a> (2)</li><li>2010年04月25日 -- <a href="http://www.xncat.com/2010/04/class/1051.html" title="滚屏翻页类新版本rollPage2">滚屏翻页类新版本rollPage2</a> (3)</li><li>2010年02月7日 -- <a href="http://www.xncat.com/2010/02/catflash/812.html" title="制作滚屏与翻页时分页加载的方法">制作滚屏与翻页时分页加载的方法</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.xncat.com/2010/05/class/1077.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>滚屏翻页类新版本rollPage2</title>
		<link>http://www.xncat.com/2010/04/class/1051.html</link>
		<comments>http://www.xncat.com/2010/04/class/1051.html#comments</comments>
		<pubDate>Sun, 25 Apr 2010 08:06:04 +0000</pubDate>
		<dc:creator>xncat</dc:creator>
				<category><![CDATA[Cat Class【类聚】]]></category>
		<category><![CDATA[tutorial【教程】]]></category>
		<category><![CDATA[精通]]></category>
		<category><![CDATA[as类]]></category>
		<category><![CDATA[rollPage2]]></category>
		<category><![CDATA[翻页]]></category>

		<guid isPermaLink="false">http://www.xncat.com/?p=1051</guid>
		<description><![CDATA[有许多网友在使用这个rollPage类了，很高兴这个类能给这么多网友带来帮助。
我也收集了些意见对rollPage类作了一些重要修改，使它更完善了。
新版本的rollPage主要有以下变化
1. 增加setRoll方法... ]]></description>
			<content:encoded><![CDATA[<p>有许多网友在使用这个rollPage类了，很高兴这个类能给这么多网友带来帮助。</p>
<p>我也收集了些意见对rollPage类作了一些重要修改，使它更完善了。</p>
<p><span style="font-size: large;"><strong><span style="color: #000000;">新版本的rollPage主要有以下变化</span></strong></span></p>
<p style="padding-left: 25px;">1. 增加setRoll方法来接收参数，不再是构造函数中传递参数了 实现了可以通过一个rollPage对象可以动态的修改翻页属性并切换不同pageMc进行翻页控制，这个功能应用的例子：</p>
<p style="padding-left: 25px;"><a rel="vidbox 650 455" href="http://www.xncat.com/wp-content/uploads/2010/04/newzealand/newzealand-map.swf" title="新西兰旅游活动flash"><img src="http://www.xncat.com/wp-content/uploads/2010/04/newzealand/newz-1.jpg" alt="" /></a></p>
<p style="padding-left: 25px;">2.  翻到最后一页时，如果子对象数不足一整页，会只翻过最后这一页有的子对象数，不再是翻滚一整页 有无这个功能应用的例子对比：</p>
<p><span id="more-1051"></span></p>
<div style="padding-left: 25px;">无此功能示例：<br />

<object width="600" height="100">
<param name="movie" value="http://www.xncat.com/wp-content/uploads/2010/04/rollPage1.swf"></param>
<param name="quality" value="medium"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#000000"></param>
<param name="allowFullScreen" value="true"></param>
<embed type="application/x-shockwave-flash" width="600" height="100" src="http://www.xncat.com/wp-content/uploads/2010/04/rollPage1.swf" quality="medium" bgcolor="#000000" wmode="window" menu="false" allowFullScreen="true" ></embed>
</object>
</p>
<p>有此功能示例：<br />

<object width="600" height="100">
<param name="movie" value="http://www.xncat.com/wp-content/uploads/2010/04/rollPage2.swf"></param>
<param name="quality" value="medium"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#000000"></param>
<param name="allowFullScreen" value="true"></param>
<embed type="application/x-shockwave-flash" width="600" height="100" src="http://www.xncat.com/wp-content/uploads/2010/04/rollPage2.swf" quality="medium" bgcolor="#000000" wmode="window" menu="false" allowFullScreen="true" ></embed>
</object>
</p>
</div>
<p style="padding-left: 25px;">3. 修改rollMask高或宽多出一个childMargin尺寸问题</p>
<p><span style="font-size: large;"><span style="color: #003366;"><strong><span style="color: #000000;">再展示一些应用示例截图</span></strong></span></span></p>
<p><strong> </strong></p>
<p>让大家形象的了解rollPage类可以用来做什么：<strong>用来翻滚flash中的显示对象作翻页效果</strong></p>
<p><img title="rollpage翻页效果2" src="/wp-content/uploads/2010/04/r2.jpg" alt="" width="491" height="219" /></p>
<p><img title="rollpage翻页效果5" src="/wp-content/uploads/2010/04/r5.jpg" alt="" width="660" height="110" /></p>
<p><span style="font-size: large;"><span style="color: #003366;"><strong><span style="color: #000000;">来看看setRoll方法有哪些参数</span></strong></span>：</span></p>
<p><span style="text-decoration: underline;"><span style="color: #ff6600;"> setRoll($pageMc:Sprite,$vars:Object,$aix:String=”x”)</span></span></p>
<p><strong> $pageMc:Sprite</strong> ：把所有内容都放在这个容器中，如多个图片或者各分页内容<br />
<strong> $vars:Object</strong> ：这个对象会接收五个参数,可以设置以下属性</p>
<p style="margin-left: 25px;">pageNum:每页子对象数<br />
totalNum:总子对象数<br />
childWidth:子对象宽<br />
childHeight:子对象高<br />
childMargin:子对象边距
</p>
<p><strong>$aix:String </strong>：设置为垂直还是水平翻滚</p>
<p><span style="color: #003366;"><strong><span style="font-size: large;"><span style="color: #000000;">使用这个类的方法：</span></span></strong></span></p>
<p>rollPage类使用注意：<br />
<span style="color: #ff9900;"><strong> //所有的图片都在vImageMc中，</strong></span><br />
<strong>//vImageMc在别的容器中，必须保证vImageMc的x,y坐标都为0</strong></p>
<pre><code>
var pageRoll:RollPage=new RollPage(); pageRoll.setRoll(vImageMc,{total:12,pageNum:5,childWidth:100,childHeight:75,childMargin:15});

//左右按钮
left.buttonMode=right.buttonMode=true;

left.addEventListener(MouseEvent.CLICK,function (e:MouseEvent):void{pageRoll.toRoll(pageRoll.page-1);}); right.addEventListener(MouseEvent.CLICK,function (e:MouseEvent):void{pageRoll.toRoll(pageRoll.page+1);});
</code></pre>
<p>rollPage2.0示例与源代码<a href="http://www.xncat.com/wp-content/uploads/2010/04/rollPage2.rar">下载</a></p>
<div  class="related_post_title">猫抓鱼</div><ul class="related_post"><li>2010年05月5日 -- <a href="http://www.xncat.com/2010/05/class/1077.html" title="dragRoll拖动翻页类【rollPage的黄金搭档】">dragRoll拖动翻页类【rollPage的黄金搭档】</a> (1)</li><li>2010年02月7日 -- <a href="http://www.xncat.com/2010/02/catflash/812.html" title="制作滚屏与翻页时分页加载的方法">制作滚屏与翻页时分页加载的方法</a> (0)</li><li>2010年02月2日 -- <a href="http://www.xncat.com/2010/02/catflash/800.html" title="水平与垂直滚屏类RollPage">水平与垂直滚屏类RollPage</a> (2)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.xncat.com/2010/04/class/1051.html/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>定制右键菜单与ContextMenuPlus类</title>
		<link>http://www.xncat.com/2010/03/catflash/894.html</link>
		<comments>http://www.xncat.com/2010/03/catflash/894.html#comments</comments>
		<pubDate>Mon, 22 Mar 2010 04:22:10 +0000</pubDate>
		<dc:creator>xncat</dc:creator>
				<category><![CDATA[Cat Class【类聚】]]></category>
		<category><![CDATA[Cat Flash【Flash日志】]]></category>
		<category><![CDATA[tutorial【教程】]]></category>
		<category><![CDATA[入门]]></category>
		<category><![CDATA[as3菜单]]></category>
		<category><![CDATA[contextMenu]]></category>
		<category><![CDATA[ContextMenuItem]]></category>
		<category><![CDATA[ContextMenuPlus]]></category>
		<category><![CDATA[menuItemSelect]]></category>

		<guid isPermaLink="false">http://www.xncat.com/?p=894</guid>
		<description><![CDATA[在flash中每一个可以与鼠标和键盘交互的显示对象都有这么个属性：contextMenu
查看文档可以看到，从InteractiveObject这个抽象基类开始有这个属性。
所以DisplayObjectContainer, SimpleButton, TextField 这些显... ]]></description>
			<content:encoded><![CDATA[<p>在flash中每一个可以与鼠标和键盘交互的显示对象都有这么个属性：contextMenu</p>
<p>查看文档可以看到，从InteractiveObject这个抽象基类开始有这个属性。</p>
<p>所以<a target="_blank" href="http://help.adobe.com/zh_CN/AS3LCR/Flash_10.0/flash/display/DisplayObjectContainer.html">DisplayObjectContainer</a>, <a target="_blank" href="http://help.adobe.com/zh_CN/AS3LCR/Flash_10.0/flash/display/SimpleButton.html">SimpleButton</a>, <a target="_blank" href="http://help.adobe.com/zh_CN/AS3LCR/Flash_10.0/flash/text/TextField.html">TextField</a> 这些显示对象都可以你都可以设置它们的 contextMenu属性，来隐藏你不需要的默认菜单项，和添加自定义的菜单项。</p>
<pre><code>var my_menu:ContextMenu = new ContextMenu();
my_menu.hideBuiltInItems();
DisplayObjectContainer.contextMenu = my_menu;
</code></pre>
<p>这是最简单隐藏所有默认菜单项的方法（&ldquo;设置&rdquo; 与 &ldquo;关于&rdquo;两项除外 ）。</p>
<p>如果你不想一次隐藏所有项，也可以一项项设置哪些项隐藏。</p>
<p><span id="more-894"></span></p>
<pre><code>var my_menu:ContextMenu = new ContextMenu();
my_menu.builtInItems.forwardAndBack = false;
my_menu.builtInItems.loop = false;
my_menu.builtInItems.play = false;
my_menu.builtInItems.print = false;
my_menu.builtInItems.quality = false;
my_menu.builtInItems.rewind = false;
my_menu.builtInItems.save = false;
my_menu.builtInItems.zoom = false;
DisplayObjectContainer.contextMenu = my_menu;
</code></pre>
<p>那么可不可以完全隐藏所有菜单项呢？目前我还没有找到这样的方法，只看到这样一段话：</p>
<p style="border: thin dotted rgb(102, 102, 102); padding: 5px;"><span style="color: rgb(105, 105, 105);">If you test your movie now you should see that your default zoom and playback settings are gone from your context menu. You should note that certain items such as Settings and About cannot be removed from the context menu. Some additional commands for debugging cannot also be removed either while testing in the Flash authoring tool.</span></p>
<p>添加自己的菜单项，就用下面的方法：</p>
<pre><code>var my_menu:ContextMenu = new ContextMenu();
my_menu.hideBuiltInItems();

var my_blog:ContextMenuItem= new ContextMenuItem(&quot;猫脸爬格子&quot;);
var my_email:ContextMenuItem = new ContextMenuItem(&quot;rman@live.cn&quot;);
var my_copyright:ContextMenuItem = new ContextMenuItem(&quot;Copyright - 2009&quot;);
my_menu.customItems.push(my_blog,my_email,my_copyright);

DisplayObjectContainer.contextMenu = my_menu;
</code></pre>
<p>每一个ContextMenuItem对象除了菜单文字外，还有两个属性比较有用。</p>
<p>enabled : Boolean 指示指定的菜单项处于启用状态还是禁用状态（能否点击）。</p>
<p>separatorBefore : Boolean 指示指定的菜单项上方是否显示分隔条。</p>
<pre><code>my_copyright.enabled = false;
my_copyright.separatorBefore = true;
</code></pre>
<p>为ContextMenuItem对象添加menuItemSelect 事件：ContextMenuEvent.MENU_ITEM_SELECT</p>
<pre><code>var url:String;
my_blog.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, openLink);
my_email.addEventListener(ContextMenuEvent.MENU_ITEM_SELECT, openLink);
function openLink(e:ContextMenuEvent):void{
    switch(e.currentTarget.caption){
        case 猫脸爬格子:
        url = &quot;www.xncat.com&quot;;
        break;
        case rman@live.cn:
        url = &quot;www.xncat.com/email&quot;;
        break;
    }
    navigateToURL(new URLRequest(url));
}
</code></pre>
<p>有网友写了个<a target="_blank" href="http://eidiot.net/wp-content/uploads/learn_as_3/cm.rar">ContextMenuPlus</a>类，可以很方便的处理以上各菜单定制功能。</p>
<div  class="related_post_title">猫推拼盘</div><ul class="related_post"><li>2010年06月25日 -- <a href="http://www.xncat.com/2010/06/lookarround/1176.html" title="Flash Builder Profiler——修复ExternalInterface上的内存泄露">Flash Builder Profiler——修复ExternalInterface上的内存泄露</a> (0)</li><li>2010年08月18日 -- <a href="http://www.xncat.com/2010/08/mochi/1302.html" title="Y.boy：最大的在线游戏网络，flash游戏产业的颠覆者：麻球网">Y.boy：最大的在线游戏网络，flash游戏产业的颠覆者：麻球网</a> (1)</li><li>2009年12月6日 -- <a href="http://www.xncat.com/2009/12/catflash/400.html" title="actionscript与javascript交互">actionscript与javascript交互</a> (3)</li><li>2010年01月29日 -- <a href="http://www.xncat.com/2010/01/catflash/776.html" title="cat风格的loading文件技术分析">cat风格的loading文件技术分析</a> (2)</li><li>2010年01月5日 -- <a href="http://www.xncat.com/2010/01/wenzhai/641.html" title="学习向量的心得[fxzjw的文章]">学习向量的心得[fxzjw的文章]</a> (0)</li><li>2010年05月20日 -- <a href="http://www.xncat.com/2010/05/lookarround/1132.html" title="Adobe展示流畅运行Flash的Android平板电脑【转载】">Adobe展示流畅运行Flash的Android平板电脑【转载】</a> (2)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.xncat.com/2010/03/catflash/894.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>图片的旋转，移动与缩放类TransformPic【带控制切换按钮】</title>
		<link>http://www.xncat.com/2010/02/catflash/785.html</link>
		<comments>http://www.xncat.com/2010/02/catflash/785.html#comments</comments>
		<pubDate>Fri, 12 Feb 2010 06:10:46 +0000</pubDate>
		<dc:creator>xncat</dc:creator>
				<category><![CDATA[Cat Class【类聚】]]></category>
		<category><![CDATA[Cat Flash【Flash日志】]]></category>
		<category><![CDATA[tutorial【教程】]]></category>
		<category><![CDATA[精通]]></category>
		<category><![CDATA[TransformPic]]></category>
		<category><![CDATA[旋转]]></category>
		<category><![CDATA[移动]]></category>
		<category><![CDATA[缩放]]></category>

		<guid isPermaLink="false">http://www.xncat.com/?p=785</guid>
		<description><![CDATA[为了对用户上传的图片进行简单的移动旋转与缩放编辑，所以开发了这个类。
此类只需要把图片对象作为参数传入，就可以实现对图片的移动编辑操作，因为默认的编辑状态就是移动状态。

va... ]]></description>
			<content:encoded><![CDATA[<p>为了对用户上传的图片进行简单的移动旋转与缩放编辑，所以开发了这个类。</p>
<p>此类只需要把图片对象作为参数传入，就可以实现对图片的移动编辑操作，因为默认的编辑状态就是移动状态。</p>
<pre><code>
var t:TransformPic = new TransformPic(picmc);
addChild(t);

</code></pre>
<p>另外还可以分别依次传入参数：移动，旋转，缩放状态切换按钮。</p>
<pre><code>
var t:TransformPic = new TransformPic(picmc,movebt,scalebt,rotatebt);
addChild(t);

</code></pre>
<p>
<object width="290" height="360">
<param name="movie" value="/wp-content/uploads/2010/02/transformPic.swf"></param>
<param name="quality" value="medium"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#000000"></param>
<param name="allowFullScreen" value="true"></param>
<embed type="application/x-shockwave-flash" width="290" height="360" src="/wp-content/uploads/2010/02/transformPic.swf" quality="medium" bgcolor="#000000" wmode="window" menu="false" allowFullScreen="true" ></embed>
</object>
<br />
<span id="more-785"></span><br />
在开发这个类的时候，有两个难点：<br />
1. 缩放的中心点，如何改变图片的注册点到我们指定的坐标点；<br />
2. 旋转的中心点，修改注册点同上。</p>
<p>网上有很多方案，但都不是很完美，会引各种不便，而yahoo的as类库中有一个修改对象注册点的类：DynamicRegistration.as<br />
这个类很简单，我们需要用到里面的两个方法：</p>
<pre><code>
//旋转需要传入要修改到的坐标点，与旋转的角度数
DynamicRegistration.rotate(picMc,p,ro);
//缩放需要传入要修改到的坐标点，与x轴的缩放比，与y轴的缩放比
DynamicRegistration.scale(picMc,p,1+sc*0.01,1+sc*0.01);

</code></pre>
<p>下面是完整的类与示例原文件下载：</p>
<pre><code>
package {
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	import flash.events.Event;
	import flash.text.TextField;
	import flash.geom.Point;
	import com.yahoo.astra.utils.DynamicRegistration;

	/**
	 * @author robin@tudou / email:xnliao@tudou.com
	 * @version creat:
	 */
	public class TransformPic extends Sprite {
		private var picMc:Sprite;
		private var moveBt:Sprite;
		private var scaleBt:Sprite;
		private var rotateBt:Sprite;

		private var transPlane:Sprite;
		private var transBtMc:Sprite;

		private var oldy:Number;
		private var nowx:Number;
		private var vy:Number=0;
		private var sc:int=0;
		private var ro:int=0;
		private var p:Point;

		public function TransformPic($picMc:Sprite,$moveBt:Sprite = null,$scaleBt:Sprite = null,$rotateBt:Sprite = null) {
			//用于编辑的图片，与此图片的中心点
			picMc=$picMc;
			p = new Point(picMc.width/2,picMc.height/2);

			//用于侦测鼠标操作编辑动作的按钮
			transPlane=makeArea(picMc.width,picMc.height,0.2);
			addChild(transPlane);
			transPlane.x = picMc.x;
			transPlane.y = picMc.y;

			//切换编辑状态的按钮
			transBtMc = new Sprite();
			addChild(transBtMc);
			if($moveBt){moveBt=$moveBt;transBtMc.addChild(moveBt);}
			if($scaleBt){scaleBt=$scaleBt;transBtMc.addChild(scaleBt);}
			if($rotateBt){rotateBt=$rotateBt;transBtMc.addChild(rotateBt);}

			addEvent();
			tomove(null);
		}

		private function addEvent():void {
			if(moveBt){this.moveBt.addEventListener(MouseEvent.CLICK, tomove);}
			if(scaleBt){this.scaleBt.addEventListener(MouseEvent.CLICK, toscale);}
			if(rotateBt){this.rotateBt.addEventListener(MouseEvent.CLICK, torotate);}
			transPlane.addEventListener(MouseEvent.MOUSE_OUT, transout);
		}
		private function transout(e:MouseEvent):void {
			picMc.stopDrag();
			transPlane.removeEventListener(MouseEvent.MOUSE_MOVE, scalehd);
			transPlane.removeEventListener(MouseEvent.MOUSE_MOVE, rotatehd);
		}
		private function tomove(e:MouseEvent):void {
			transformType("move");
		}
		private function toscale(e:MouseEvent):void {
			transformType("scale");
		}
		private function torotate(e:MouseEvent):void {
			transformType("rotate");
		}

		//move
		private function toDrag(e:Event):void {
			picMc.startDrag();
		}
		private function toStopDrag(e:Event):void {
			picMc.stopDrag();
		}

		//scale
		private function scaleon(e:MouseEvent):void {
			transPlane.addEventListener(MouseEvent.MOUSE_MOVE, scalehd);
			oldy=mouseY;
		}
		private function scaleoff(e:MouseEvent):void {
			transPlane.removeEventListener(MouseEvent.MOUSE_MOVE, scalehd);
		}
		private function scalehd(e:MouseEvent):void {
			e.updateAfterEvent();
			vy=transPlane.mouseY-oldy;
			oldy=transPlane.mouseY;

			if (vy&gt;0) {
				if (sc &lt; -90) {
					sc = -91;
				} else {
					sc--;
				}
			}
			if (vy&lt;0) {
 				if (sc&gt;200) {
					sc=201;
				} else {
					sc++;
				}
			}
			DynamicRegistration.scale(picMc,p,1+sc*0.01,1+sc*0.01);
		}

		//rotate
		private function rotateon(e:MouseEvent):void {
			transPlane.addEventListener(MouseEvent.MOUSE_MOVE, rotatehd);
			oldy=mouseY;
		}
		private function rotateoff(e:MouseEvent):void {
			transPlane.removeEventListener(MouseEvent.MOUSE_MOVE, rotatehd);
		}
		private function rotatehd(e:MouseEvent):void {
			e.updateAfterEvent();
			vy=transPlane.mouseY-oldy;
			oldy=transPlane.mouseY;
			nowx=transPlane.mouseX;

			if (nowx&lt;transPlane.width/2){
                                 if (vy&gt;0) {
					if (ro &lt; -180) {
					ro = -181;
					} else {
					ro--;
					}
				}
				if (vy&lt;0) {
 					if (ro&gt;180) {
						ro=181;
					} else {
						ro++;
					}
				}
			} else {
				if (vy&lt;0) {
					if (ro &lt; -180) {
 					ro = -181;
 					} else {
 					ro--;
 					}
				}
 				if (vy&gt;0) {
					if (ro&gt;180) {
						ro=181;
					} else {
						ro++;
					}
				}
			}
			DynamicRegistration.rotate(picMc,p,ro);
		}

		/**************************************
		** makeArea
		** 一些辅助方法
		***************************************/
		public function makeArea(w:uint,h:uint,alpha:Number= 0.5):Sprite {

			var area:Sprite=new Sprite  ;
			area.alpha=alpha;
			area.graphics.beginFill(0x000000,1);
			area.graphics.drawRect(0,0,w,h);
			area.graphics.endFill();
			return area;

		}
		private function transformType(type:String):void{
			transPlane.removeEventListener(MouseEvent.MOUSE_DOWN, toDrag);
			transPlane.removeEventListener(MouseEvent.MOUSE_UP, toStopDrag);
			transPlane.removeEventListener(MouseEvent.MOUSE_DOWN, scaleon);
			transPlane.removeEventListener(MouseEvent.MOUSE_UP, scaleoff);
			transPlane.removeEventListener(MouseEvent.MOUSE_DOWN, rotateon);
			transPlane.removeEventListener(MouseEvent.MOUSE_UP, rotateoff);

			if(type == "move"){
				transPlane.addEventListener(MouseEvent.MOUSE_DOWN, toDrag);
				transPlane.addEventListener(MouseEvent.MOUSE_UP, toStopDrag);
			}else if(type == "scale"){
				transPlane.addEventListener(MouseEvent.MOUSE_DOWN, scaleon);
				transPlane.addEventListener(MouseEvent.MOUSE_UP, scaleoff);
			}else if(type == "rotate"){
				transPlane.addEventListener(MouseEvent.MOUSE_DOWN, rotateon);
				transPlane.addEventListener(MouseEvent.MOUSE_UP, rotateoff);
			}
		}

	}
}

</code></pre>
<p><a target="_blank" href="/wp-content/uploads/2010/02/移动缩放旋转图片.rar">示例原文件下载</a></p>
<div  class="related_post_title">猫抓鱼</div><ul class="related_post"><li>2010年02月28日 -- <a href="http://www.xncat.com/2010/02/catflash/875.html" title="无锯齿缩放图片【缩放时对位图进行平滑处理】">无锯齿缩放图片【缩放时对位图进行平滑处理】</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.xncat.com/2010/02/catflash/785.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>水平与垂直滚屏类RollPage</title>
		<link>http://www.xncat.com/2010/02/catflash/800.html</link>
		<comments>http://www.xncat.com/2010/02/catflash/800.html#comments</comments>
		<pubDate>Tue, 02 Feb 2010 04:08:14 +0000</pubDate>
		<dc:creator>xncat</dc:creator>
				<category><![CDATA[Cat Class【类聚】]]></category>
		<category><![CDATA[Cat Flash【Flash日志】]]></category>
		<category><![CDATA[tutorial【教程】]]></category>
		<category><![CDATA[精通]]></category>
		<category><![CDATA[RollPage]]></category>
		<category><![CDATA[滚屏]]></category>
		<category><![CDATA[翻页]]></category>

		<guid isPermaLink="false">http://www.xncat.com/?p=800</guid>
		<description><![CDATA[这个类最新的版本：滚屏翻页类新版本rollPage2
这个类很好用，它可以完成多个内容的分页，滚屏与翻页功能。垂直或水平翻滚都可以，而且会自动计算是否到达第一页或者最后一页。
看看这个... ]]></description>
			<content:encoded><![CDATA[<p>这个类最新的版本：<a title="滚屏翻页类新版本rollPage2" rel="bookmark" href="http://www.xncat.com/2010/04/class/1051.html">滚屏翻页类新版本rollPage2</a></p>
<p>这个类很好用，它可以完成多个内容的分页，滚屏与翻页功能。垂直或水平翻滚都可以，而且会自动计算是否到达第一页或者最后一页。<br />
看看这个例子，我经常用到这个类。<br />

<object width="510" height="100">
<param name="movie" value="/wp-content/uploads/2010/02/rollPage/rollPage.swf"></param>
<param name="quality" value="medium"></param>
<param name="wmode" value="window"></param>
<param name="menu" value="false"></param>
<param name="bgcolor" value="#000000"></param>
<param name="allowFullScreen" value="true"></param>
<embed type="application/x-shockwave-flash" width="510" height="100" src="/wp-content/uploads/2010/02/rollPage/rollPage.swf" quality="medium" bgcolor="#000000" wmode="window" menu="false" allowFullScreen="true" ></embed>
</object>
<br />
先来看看它有哪些参数：<br />
RollPage($pageMc:Sprite,$vars:Object,$aix:String=&#8221;x&#8221;)<br />
$pageMc:Sprite ：把所有内容都放在这个容器中，如多个图片或者各分页内容<br />
$vars:Object ：这个对象会接收五个参数</p>
<p style="padding-left: 30px;">$vars["totalNum"]：总内容个数，比如总共多少张图片<br />
$vars["pageNum"]：设定每而或每屏显示多少个内容，比如每页显示几张图片<br />
$vars["childPad"]：设置每个内容之间的间隔距离<br />
$vars["childWidth"]：设置每个内容的高度<br />
$vars["childHeight"]：设置每个内容的宽度</p>
<p>$aix:String ：设置为垂直还是水平翻滚<br />
<span id="more-800"></span><br />
使用这个类的方法：</p>
<blockquote><p>rollPage类使用注意：<br />
//所有的图片都在vImageMc中，<br />
//vImageMc在别的容器中，必须保证vImageMc的x,y坐标都为0</p></blockquote>
<pre><code>
var pageRoll:RollPage=new RollPage(vImageMc,{totalNum:12,pageNum:5,childWidth:100,childHeight:75,childPad:15});

//左右按钮
left.buttonMode=right.buttonMode=true;
left.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void{pageRoll.toRoll(pageRoll.page-1);});
right.addEventListener(MouseEvent.CLICK, function (e:MouseEvent):void{pageRoll.toRoll(pageRoll.page+1);});
</code></pre>
<p>每页中的内容如何排列，可以看看《<a href="http://www.xncat.com/2009/12/catflash/601.html">加载图片(读取xml,json数据)并进行阵列</a>》</p>
<p>实例文件下载:<a target="_blank" href="/wp-content/uploads/2010/02/rollPage.rar">rollPage.rar</a></p>
<p>完整的类文件：</p>
<pre><code>
package {
	import flash.display.Sprite;
	import com.gs.TweenLite;

	/**
	 * @author robin
	 */
	public class RollPage {
		private var pageMc:Sprite;
		private var vars:Object;
		private var aix:String;
		private var pageNum:uint=1;

		private var childNum:uint;
		private var pageChild:uint;
		private var spanLength:uint;
		private var childWidth:uint;
		private var childHeight:uint;
		private var childPad:uint;

		public function RollPage($pageMc:Sprite,$vars:Object,$aix:String="x") {
			pageMc=$pageMc;
			vars=$vars;
			aix=$aix;

			childNum=$vars["totalNum"];
			pageChild=$vars["pageNum"];
			childPad=$vars["childPad"];

			childWidth=$vars["childWidth"];
			childHeight=$vars["childHeight"];

			var mask:Sprite;
			if ($aix=="x") {
				spanLength = (childWidth+childPad)*pageChild;
				mask=makeArea(spanLength,childHeight);
			} else if ($aix == "y") {
				spanLength = (childHeight+childPad)*pageChild;
				mask=makeArea(childWidth,spanLength);
			}

			var pageParent:Sprite=pageMc.parent as Sprite;

			pageParent.addChild(mask);
			mask.x=pageMc.x;
			mask.y=pageMc.y;
			pageMc.mask=mask;
		}

		public function toRoll($pageNum:uint):void {

			if ($pageNum&lt;=0) { 				trace("firepage"); 			} else if ($pageNum &gt; Math.ceil(childNum/pageChild)) {
				trace("endpage");
			} else {
				if (aix=="x") {
					TweenLite.to(pageMc,.5,{x:-($pageNum-1)*spanLength});
				} else if (aix == "y") {
					TweenLite.to(pageMc,.5,{y:-($pageNum-1)*spanLength});
				}
				pageNum=$pageNum;
			}

		}

		public function set page(num:uint):void {
			this.pageNum=num;
		}
		public function get page():uint {
			return this.pageNum;
		}
		private function makeArea(w:uint,h:uint,alpha:Number= 0.5):Sprite {
			var area:Sprite=new Sprite  ;
			area.alpha=alpha;
			area.graphics.beginFill(0x000000,1);
			area.graphics.drawRect(0,0,w,h);
			area.graphics.endFill();
			return area;
		}
	}
}

</code></pre>
<div  class="related_post_title">猫抓鱼</div><ul class="related_post"><li>2010年05月5日 -- <a href="http://www.xncat.com/2010/05/class/1077.html" title="dragRoll拖动翻页类【rollPage的黄金搭档】">dragRoll拖动翻页类【rollPage的黄金搭档】</a> (1)</li><li>2010年02月7日 -- <a href="http://www.xncat.com/2010/02/catflash/812.html" title="制作滚屏与翻页时分页加载的方法">制作滚屏与翻页时分页加载的方法</a> (0)</li><li>2010年06月22日 -- <a href="http://www.xncat.com/2010/06/class/1168.html" title="看看dragRoll与rollPage是如何搭档【ThumbRoll类】">看看dragRoll与rollPage是如何搭档【ThumbRoll类】</a> (0)</li><li>2010年04月25日 -- <a href="http://www.xncat.com/2010/04/class/1051.html" title="滚屏翻页类新版本rollPage2">滚屏翻页类新版本rollPage2</a> (3)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.xncat.com/2010/02/catflash/800.html/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>拖放与置换-DragFollow类</title>
		<link>http://www.xncat.com/2010/01/catflash/680.html</link>
		<comments>http://www.xncat.com/2010/01/catflash/680.html#comments</comments>
		<pubDate>Sun, 10 Jan 2010 07:54:14 +0000</pubDate>
		<dc:creator>xncat</dc:creator>
				<category><![CDATA[Cat Class【类聚】]]></category>
		<category><![CDATA[Cat Flash【Flash日志】]]></category>
		<category><![CDATA[tutorial【教程】]]></category>
		<category><![CDATA[精通]]></category>
		<category><![CDATA[DragFollow]]></category>
		<category><![CDATA[flash 拖放]]></category>
		<category><![CDATA[startDrag]]></category>
		<category><![CDATA[stopDrag]]></category>
		<category><![CDATA[拖放]]></category>
		<category><![CDATA[拖放位置]]></category>
		<category><![CDATA[置换]]></category>

		<guid isPermaLink="false">http://www.catfly.cn/?p=680</guid>
		<description><![CDATA[通常我们使用的拖放效果，是通过一个DropTarget来确定拖放目的地的。
今天要介绍的这个拖放与置换是通过[拖放对象移动过程中的坐标]来确定拖放目的地的。
先不谈拖放这回事，来解一道有趣... ]]></description>
			<content:encoded><![CDATA[<p>通常我们使用的拖放效果，是通过一个DropTarget来确定拖放目的地的。<br />
今天要介绍的这个拖放与置换是通过<strong>[拖放对象移动过程中的坐标]</strong>来确定拖放目的地的。<br />
先不谈拖放这回事，来解一道有趣的题目吧。<br />
问：如果把100以内的数分成4份，取任意一个100以内的数，如何知道这个数是第几份中的？<br />
看看拖放与置换示例的效果，再来解这个题目（不然要没动力解答了）</p>
<p><a target="_blank" rel="vidbox,786,300" href="/wp-content/uploads/catflyLD2.swf?swf=/wp-content/uploads/2010/01/LinkVideo2.swf" title="拖放与置换"><img src="/wp-content/uploads/2010/01/dragfollow.jpg" title="拖放与置换示例"/></a><br />
<span id="more-680"></span></p>
<pre><code>
var num:unit = getObjNum(12.35,100);
private function getObjNum(aNum:Number,total:Number):uint{
	var objNum:uint;

	var denfen:uint = 4;
	var bi:Number = aNum/total;

	if(bi &gt;= 0.75){
        	objNum = 3;
	}else if(bi &gt;= 0.45 &amp;&amp; bi &lt; 0.75){
        	objNum = 2;
	}else if(bi &gt;= 0.25 &amp;&amp; bi &lt; 0.45){
        	objNum = 1;
	}else if(bi &gt;= 0 &amp;&amp; bi &lt; 0.25){
        	objNum = 0;
	}
	return objNum;
}

</code></pre>
<p>很快就把算法写出来了，那如果把题目改一下<br />
问：如果把100以内的数分成n份，取任意一个100以内的数，如何知道这个数是第几份中的？</p>
<pre><code>
var n:uint = 8;
var num:unit = getObjNum(12.35,100);
private function getObjNum(aNum:Number,total:Number):uint{
	var objNum:uint;

	var denfen:uint = n;
	var bi:Number = aNum/total;

	for(var i:uint=0;i&lt;denfen;i++){
		if(bi &gt;= i/denfen &amp;&amp; bi &lt; (i+1)/denfen){
			objNum = i;
			break;
		}
	}

	return objNum;
}	

</code></pre>
<p>还可以再改进吗？也许做这个判断并不需要跑for循环吧。而且我运行程序后，发现有一些小bug，拖到最右边时，有时候返回错误的位置编号。<br />
改进版</p>
<pre><code>
var n:uint = 8;
var num:uint = getObjNum(12.35,100);
private function getObjNum(aNum:Number,total:Number):uint{
        var objNum:uint = Math.min(n-1, Math.floor(aNum / total* n));
        return objNum;
}
</code></pre>
<p>ok，把上面的问题搞明白了，接下来就好办了。制作这个拖放与置换的示例，需要实现如下两个关键点：<br />
1. 获取指定位置编号上的按钮对象；<br />
2. 获取指定按钮对象所在的位置编号（其实就是根据按钮对象的坐标值，算出它是n个等份中的第几份）。</p>
<p>使用DragFollow类很简单。只需要把两个参数传给它就可以了：<strong>var theDrag:DragFollow = new DragFollow(btAllMc,600);</strong><br />
一个是包含了所有拖放按钮的容器对象，<br />
一个是X轴上可以拖放的范围（Y轴可以吗？当然可以，我在类文件中写了个_aix的参数，默认值为空，<br />
把Y轴相关的开发留给大家去思考了！）</p>
<p>先添加鼠标拖与放的事件，以及具体的拖放事件函数，这些都放在构造函数中。</p>
<pre><code>
public function DragFollow(_parentMc:Sprite,_trackLength:Number,_aix:String=null){
	//所有拖放按钮的容器对象
        parentMc = _parentMc;
	//轴上可以拖放的范围
        trackLength = _trackLength;

	for(var i:uint=0;i&lt;parentMc.numChildren;i++){
		var ch:Sprite = parentMc.getChildAt(i) as Sprite;
		ch.buttonMode = true;
		ch.mouseChildren = false;
		ch.addEventListener(MouseEvent.MOUSE_DOWN,this.starDragFunc);
		ch.stage.addEventListener(MouseEvent.MOUSE_UP,this.endDragFunc);
	}

}
private function starDragFunc(e:MouseEvent):void{
	targetMc = e.target as Sprite;
	dragState = true;

	//记录当前拖动对象
	moveObj.targetObj = targetMc;
	moveObj.targetPosition = targetMc.x;

	var rectangle:Rectangle = new Rectangle(0, 0, trackLength, 0);

	//设置当前拖动对象显示层级到最上层，并把拖动限制在一个轴
	parentMc.setChildIndex(targetMc,parentMc.numChildren-1);
	targetMc.startDrag(false,rectangle);
}
private function endDragFunc(e:MouseEvent):void{
	if(dragState){
		targetMc.stopDrag();
		dragState = false;

		//设置目标位置编号
		//根据拖动对象停止的坐标，设置将要停放到几号位置
		setNum(targetMc.x,trackLength);
		setChildPostion();
	}
}

</code></pre>
<p>设置目标位置编号，根据拖动对象停止的坐标，设置将要停放到几号位置，然后与目标停放位置上的对象交换位置。</p>
<pre><code>
private function setNum(position:Number,total:Number):void{
	num = Math.min(denfen-1, Math.floor(targetMc.x / trackLength * denfen));
}
private function setChildPostion():void{
	//目标停放位置上的对象
	moveObj.toChangeBt = getNumObj(num);
	moveObj.toChangePosition = moveObj.toChangeBt.x;

	//与目标停放位置上的对象交换位置
	TweenLite.to(targetMc,0.2,{x:moveObj.toChangePosition});
	TweenLite.to(moveObj.toChangeBt,0.2,{x:moveObj.targetPosition});
}

</code></pre>
<p>嗯，还有这个类文件中最关键的两个方法，那就是获取目标位置编号上的对象，与获取目标对象的位置编号。</p>
<pre><code>
//获取目标位置编号上的对象
public function getNumObj(_num:uint):Sprite{
	var ch:Sprite;
	for(var i:uint=0;i&lt;parentMc.numChildren;i++){
		var bt:Sprite = parentMc.getChildAt(i) as Sprite;
		if(getObjNum(bt.x,trackLength) == _num){
			ch = bt;
			break;
		}
	}
	return ch;
}

//获取目标对象的位置编号
private function getObjNum(position:Number,total:Number):uint{
	var denfen:uint = parentMc.numChildren;
	var objNum:uint = Math.min(denfen-1, Math.floor(position / total * denfen));

	return objNum;
}	

</code></pre>
<p>That is it! 有了这个类，在项目中处理这种拖放置换功能就好办多了，如果需要把Y轴也开发进来，大家自己动手吧。<br />
完全的项目文件可以到这里<a target="_blank" href="/wp-content/uploads/2010/01/dragFollow.rar">下载</a></p>
<div  class="related_post_title">猫推拼盘</div><ul class="related_post"><li>2009年11月23日 -- <a href="http://www.xncat.com/2009/11/catvideo/155.html" title="国产动画“功夫兔”系列：《菜包狗大反击》">国产动画“功夫兔”系列：《菜包狗大反击》</a> (0)</li><li>2010年01月3日 -- <a href="http://www.xncat.com/2010/01/wenzhai/617.html" title="20个最佳的flash游戏教程[转载]">20个最佳的flash游戏教程[转载]</a> (2)</li><li>2010年08月18日 -- <a href="http://www.xncat.com/2010/08/mochi/1321.html" title="谈熠：做自己心仪的游戏发布给1亿个人">谈熠：做自己心仪的游戏发布给1亿个人</a> (1)</li><li>2010年07月31日 -- <a href="http://www.xncat.com/2010/07/lookarround/1288.html" title="首届“麻球Flash开发者大赛”重奖开启">首届“麻球Flash开发者大赛”重奖开启</a> (1)</li><li>2009年12月3日 -- <a href="http://www.xncat.com/2009/12/catvideo/385.html" title="叫兽：魔术记">叫兽：魔术记</a> (0)</li><li>2009年12月18日 -- <a href="http://www.xncat.com/2009/12/lookarround/520.html" title="大脸猫露脸">大脸猫露脸</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.xncat.com/2010/01/catflash/680.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>livingColors炫彩缤纷</title>
		<link>http://www.xncat.com/2009/12/catflash/530.html</link>
		<comments>http://www.xncat.com/2009/12/catflash/530.html#comments</comments>
		<pubDate>Fri, 18 Dec 2009 14:42:00 +0000</pubDate>
		<dc:creator>xncat</dc:creator>
				<category><![CDATA[Cat Class【类聚】]]></category>
		<category><![CDATA[Cat Flash【Flash日志】]]></category>
		<category><![CDATA[tutorial【教程】]]></category>
		<category><![CDATA[实战]]></category>
		<category><![CDATA[adjustColor]]></category>
		<category><![CDATA[adjustHue]]></category>
		<category><![CDATA[ColorMatrix]]></category>
		<category><![CDATA[livingColors]]></category>
		<category><![CDATA[炫彩缤纷]]></category>

		<guid isPermaLink="false">http://www.catfly.cn/?p=530</guid>
		<description><![CDATA[今天向大家介绍两个不错的类：ColorMatrix，RollMc
1) ColorMatrix，是gskinner大牛们的作品，这个类很厉害，变换色彩无所不能。
使用其中的adjustHue方法，很简单就可以改变图片的色相。示例中使用了... ]]></description>
			<content:encoded><![CDATA[<p>今天向大家介绍两个不错的类：<a target="_blank" href="/wp-content/uploads/2009/12/ColorMatrix.as"><strong>ColorMatrix</strong></a>，<a target="_blank" href="/wp-content/uploads/2009/12/RollMc.as"><strong>RollMc</strong></a><br />
1) <strong>ColorMatrix</strong>，是gskinner大牛们的作品，这个类很厉害，变换色彩无所不能。<br />
使用其中的<span style="text-decoration: underline;">adjustHue</span>方法，很简单就可以改变图片的色相。示例中使用了这个方法</p>
<pre><code>
private function updateColor():void {
	var cm:ColorMatrix = new ColorMatrix();
	cm.adjustHue(<span style="color: #ff0000;">rotateNum</span>);
	light.filters = [new ColorMatrixFilter(cm)];// 需要变换色相的light，是一个mc
	liveColor_bg.filters = [new ColorMatrixFilter(cm)];//需要变换色相的liveColor_bg，是一个mc
}

</code></pre>
<p>当然使用它的<span style="text-decoration: underline;">adjustColor</span>方法，就可以分别改变图片的明度，对比度，纯度，色相。<br />
<span id="more-530"></span>adjustColor(p_brightness:Number,p_contrast:Number,p_saturation:Number,p_hue:Number)<br />
<span style="color: #333399;">brightness</span>：明度，<br />
<span style="color: #333399;">contrast</span>：对比度，<br />
<span style="color: #333399;">saturation</span>：纯度，<br />
<span style="color: #333399;">hue</span>：色相</p>
<p>2) <strong>RollMc</strong>，则是我的小作啦，它是一个很简单的类，只用来通过鼠标产生旋转，和得到旋转数值rotateNum。<br />
使用方法：RollMc(_overBt:Sprite,_rollMc:Sprite)，只需要传递两个参数给它。<br />
一个是产生mouseOver的按钮，一个是需要被旋转的对象，这两个参数都必须是Sprite类型的。比如这个示例中，需要在全舞台进行旋转，就可以做一个全舞台大小的透明按钮，来捕捉mouseOver即可。</p>
<p>我们来看看如何通过产生旋转与旋转数值，以及变换颜色的原理来创造有趣的动画效果吧。</p>
<p><a target="_blank" title="livingcolors-飞利浦" rel="vidbox 1000 450" href="/wp-content/uploads/catflyLD2.swf?swf=/wp-content/uploads/2009/11/catcase/livecolor2.swf"><img src="/wp-content/uploads/2009/11/catcase/livingcolors.jpg" alt="livingcolors-飞利浦" /></a></p>
<div  class="related_post_title">猫推拼盘</div><ul class="related_post"><li>2009年12月6日 -- <a href="http://www.xncat.com/2009/12/catflash/412.html" title="百威啤酒-击打鼓点游戏">百威啤酒-击打鼓点游戏</a> (0)</li><li>2010年02月9日 -- <a href="http://www.xncat.com/2010/02/catvideo/828.html" title="猫猫拳打可怜小狗！">猫猫拳打可怜小狗！</a> (0)</li><li>2009年11月22日 -- <a href="http://www.xncat.com/2009/11/lookarround/134.html" title="wp-swfobject为博客嵌入flash">wp-swfobject为博客嵌入flash</a> (3)</li><li>2010年04月20日 -- <a href="http://www.xncat.com/2010/04/wenzhai/1006.html" title="Flash字体嵌入方法总结—(3)ActionScript提高篇【转载kevincao】">Flash字体嵌入方法总结—(3)ActionScript提高篇【转载kevincao】</a> (0)</li><li>2009年12月2日 -- <a href="http://www.xncat.com/2009/12/lookarround/354.html" title="Paint.NET 3.5速度如系统自带画图工具，功能齐全">Paint.NET 3.5速度如系统自带画图工具，功能齐全</a> (1)</li><li>2010年01月5日 -- <a href="http://www.xncat.com/2010/01/wenzhai/641.html" title="学习向量的心得[fxzjw的文章]">学习向量的心得[fxzjw的文章]</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.xncat.com/2009/12/catflash/530.html/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>频繁点击检测类：ClickCheck</title>
		<link>http://www.xncat.com/2009/12/catflash/492.html</link>
		<comments>http://www.xncat.com/2009/12/catflash/492.html#comments</comments>
		<pubDate>Tue, 15 Dec 2009 04:10:21 +0000</pubDate>
		<dc:creator>xncat</dc:creator>
				<category><![CDATA[Cat Class【类聚】]]></category>
		<category><![CDATA[Cat Flash【Flash日志】]]></category>
		<category><![CDATA[tutorial【教程】]]></category>
		<category><![CDATA[精通]]></category>
		<category><![CDATA[ClickCheck]]></category>
		<category><![CDATA[找茬游戏]]></category>
		<category><![CDATA[频繁点击]]></category>

		<guid isPermaLink="false">http://www.catfly.cn/?p=492</guid>
		<description><![CDATA[我个人写的类文件中，我比较喜欢这个频繁点击检测类：ClickCheck。它是个有趣的家伙，但也让人“讨厌”，通常在找茬游戏中我们可以用到它。
当用户快速频繁的点击错误的区域时，它就会抛... ]]></description>
			<content:encoded><![CDATA[<p>我个人写的类文件中，我比较喜欢这个频繁点击检测类：ClickCheck。它是个有趣的家伙，但也让人“讨厌”，通常在找茬游戏中我们可以用到它。</p>
<p>当用户快速频繁的点击错误的区域时，它就会抛出警告，</p>
<p><img title="puzzle err" src="/wp-content/uploads/2009/12/puzzletip.jpg" alt="puzzle err" /></p>
<p>并且扣掉我们大把游戏时间。<br />
<span id="more-492"></span><br />
<img title="puzzle err" src="/wp-content/uploads/2009/12/puzzle.jpg" alt="puzzle err" /></p>
<p><strong>ClickCheck</strong>是一个单例，使用起来很方便。</p>
<pre><code>
ClickCheck.toCheck(_target);
//target是需要检测的区域，通常是一个mc
//只要在这个mc上点击，就会进行检测是否有频繁点击

</code></pre>
<p>还可以自定义最大点击数与点击间隔时间</p>
<pre><code>
ClickCheck.toCheck(_target,_totalNum,_timeOff);
//totalNum是当用户频繁点击多少次后就触发事件
//timeOff是判断多长时间间隔内再次点击视为频繁点击

</code></pre>
<p>完全的ClickCheck代码：</p>
<pre><code>
package{
        import flash.display.Sprite;
        import flash.events.MouseEvent;
        import flash.utils.getTimer;

        /**
        * @author robin
        */
        public class ClickCheck {
                private var oldClickTime:Number = 0;
                private var clickNum:uint = 0;
                private var totalNum:uint;
                private var timeOff:Number;

                private static var instance:ClickCheck;

                public function ClickCheck(){}

                public static function toCheck(_target:Sprite,_totalNum:uint=3,_timeOff:Number=0.4):void{
                        if(instance==null){
                                instance = new ClickCheck();
                        }
                        instance.totalNum = _totalNum;
                        instance.timeOff = _timeOff;
                        _target.addEventListener(MouseEvent.CLICK, instance.cClick);
                }
                private function cClick(evt:MouseEvent):void{
                        var clickTime:Number = getTimer()*0.001;

                        if(oldClickTime!= 0 &amp;&amp; (clickTime - oldClickTime) &lt;= instance.timeOff){
                                trace("[one fast click]");
                                if(clickNum &lt; instance.totalNum){
                                        clickNum++;
                                }
                                if(clickNum == instance.totalNum){
                                        trace("[----no more fast click]");

                                        clickNum = 0;
                                }
                        }else{
                                clickNum = 0;
                        }

                        oldClickTime = clickTime;

                }
        }
}

</code></pre>
<p>接下来我要留一个问题供大家思考，如果需要检测多个目标区域呢，比如有多个mc需要检测，并且用户可能一会在这个mc上点几下，一会又在另一些mc上点几下。<br />
我就不写了，把空间留给大家。</p>
<div  class="related_post_title">猫推拼盘</div><ul class="related_post"><li>2010年07月26日 -- <a href="http://www.xncat.com/2010/07/mochi/1272.html" title="在麻球发布游戏作品的详细教程（转aspirin）">在麻球发布游戏作品的详细教程（转aspirin）</a> (0)</li><li>2009年12月3日 -- <a href="http://www.xncat.com/2009/12/catflash/368.html" title="保存图片到服务器类(php服务器)">保存图片到服务器类(php服务器)</a> (10)</li><li>2010年08月18日 -- <a href="http://www.xncat.com/2010/08/mochi/1323.html" title="腾讯博客：Flash Mini Game 盈利平台出现">腾讯博客：Flash Mini Game 盈利平台出现</a> (0)</li><li>2010年01月24日 -- <a href="http://www.xncat.com/2010/01/lookarround/693.html" title="中国flash开发者交流会上演讲完成了">中国flash开发者交流会上演讲完成了</a> (6)</li><li>2010年02月28日 -- <a href="http://www.xncat.com/2010/02/lookarround/880.html" title="as3四种方法实现文本居中">as3四种方法实现文本居中</a> (0)</li><li>2009年11月17日 -- <a href="http://www.xncat.com/2009/11/lookarround/19.html" title="wp-al-swfobject为博客自定义嵌入flash">wp-al-swfobject为博客自定义嵌入flash</a> (0)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.xncat.com/2009/12/catflash/492.html/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>保存图片到服务器类(php服务器)</title>
		<link>http://www.xncat.com/2009/12/catflash/368.html</link>
		<comments>http://www.xncat.com/2009/12/catflash/368.html#comments</comments>
		<pubDate>Wed, 02 Dec 2009 17:39:26 +0000</pubDate>
		<dc:creator>xncat</dc:creator>
				<category><![CDATA[Cat Class【类聚】]]></category>
		<category><![CDATA[Cat Flash【Flash日志】]]></category>
		<category><![CDATA[tutorial【教程】]]></category>
		<category><![CDATA[精通]]></category>
		<category><![CDATA[flash保存图片]]></category>
		<category><![CDATA[JPGEncoder]]></category>
		<category><![CDATA[上传]]></category>
		<category><![CDATA[拍照]]></category>

		<guid isPermaLink="false">http://www.catfly.cn/?p=368</guid>
		<description><![CDATA[看我写的一系列三篇文章，才好理解所有与拍照，上传图片相关的问题。
摄像头拍照或视频截图类：http://www.xncat.com/2009/12/catflash/334.html
图片上传类[UpLoadPic]：http://www.xncat.com/2009/12/catflash/340.htm... ]]></description>
			<content:encoded><![CDATA[<p>看我写的一系列三篇文章，才好理解所有与拍照，上传图片相关的问题。</p>
<p>摄像头拍照或视频截图类：<a href="http://www.xncat.com/2009/12/catflash/334.html">http://www.xncat.com/2009/12/catflash/334.html</a></p>
<p>图片上传类[UpLoadPic]：<a href="http://www.xncat.com/2009/12/catflash/340.html">http://www.xncat.com/2009/12/catflash/340.html</a></p>
<p>保存图片到服务器类(php服务器)：<a href="http://www.xncat.com/2009/12/catflash/368.html">http://www.xncat.com/2009/12/catflash/368.html</a></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>我们知道flash中将本地图片上传到服务器使用的是<a target="_blank" title="FileReference" href="http://help.adobe.com/zh_CN/AS3LCR/Flash_10.0/flash/net/FileReference.html">FileReference</a>对象，那么如何将flash中的显示对象，如movieClip,Sprite,Video等截图并保存到服务器上呢？这个保存图片到服务器类<a target="_blank" title="SaveDrawPic" href="http://www.catfly.cn/wp-content/uploads/2009/12/SaveDrawPic.as">SaveDrawPic.as</a>就是为此而设计的。<br />
演示demo</p>
<p><a target="_blank" title="保存图片到服务器" rel="vidbox 700 400" href="http://www.catfly.cn/wp-content/uploads/2009/12/saveVideoImage.swf"><img src="http://www.catfly.cn/wp-content/uploads/2009/12/savepic.jpg" alt="保存图片到服务器" width="420" height="240" /></a><br />
<span id="more-368"></span></p>
<p>要实现这个功能需要用到<a target="_blank" title="as3corelib" href="http://code.google.com/p/as3corelib/">JPGEncoder </a>类，相关说明网上很多。</p>
<p>来看一下怎么使用这个SaveDrawPic类，至少需要传递三个参数给它。<br />
SaveDrawPic(_drawMc:Sprite,_saveBt:Sprite,_txt:TextField,_w:Number=320,_h:Number=280)<br />
<strong>_drawMc</strong>：你需要截取哪一个显示对象的图像，<br />
<strong>_saveBt</strong>：一个保存按钮，用来触发向服务器保存图片的动作，<br />
<strong>_txt</strong>：友好提示文本。</p>
<p>关于拍照功能前面<a target="_blank" title="摄像头拍照或视频截图类" href="http://www.catfly.cn/2009/12/cattrain/334.html" target="_blank">《摄像头拍照或视频截图类》</a>已经讲过了，本例增加了把拍照的图片显示到右边的展示区的功能（最多展示四张）。<br />
使用了addToThumb，removeSaveContentChild，resetSaveContent几个方法，可以下载原文件看看它们的具体实现。</p>
<pre><code>
var getV:GetVideoImage = new GetVideoImage(v,recam_bt,cam_bt,txt);
getV.addEventListener("completeCamPic",completeCamPicFunc);
function completeCamPicFunc(e:Event):void{
	camPicContent.addChild(getV.getPrecamPic());
	<span style="text-decoration: underline;">addToThumb(getV.getPrecamPic())</span>;
}
</code></pre>
<p><strong>SaveDrawPic类使用方法：</strong><br />
以拍照图片的容器camPicContent为绘制对象，在舞台创建保存按钮，利用原来拍照中的提示文本，依次作为参数传给SaveDrawPic的实例。并侦听此实例发出的“saveSuccess”事件，此事件会在右边的文本区域输出图片地址。<br />
通过SaveDrawPic类的<span class="oTitle">getpicUrl方法</span>可以获得图片在服务器上的地址。</p>
<pre><code>
var saveV:SaveDrawPic = new <span style="text-decoration: underline;">SaveDrawPic(camPicContent,save_bt,txt)</span>;
saveV.addEventListener("saveSuccess",saveSuccessFunc);
function saveSuccessFunc(e:Event):void{
	txtArea.text = saveV.getpicUrl();
}
</code></pre>
<p>此类中也有isenabled方法，这是一个可以很方便给Sprite,MovieClip,SimpleButton等显示对象添加或移除鼠标事件的方法。<br />
在另一篇文章<a target="_blank" title="摄像头拍照或视频截图类" href="http://www.catfly.cn/2009/12/cattrain/334.html" target="_blank">《摄像头拍照或视频截图类》</a>中有详细的说明。<br />
示例原文件<a target="_blank" title="SaveDrawPic.rar" href="http://www.catfly.cn/wp-content/uploads/2009/12/SaveDrawPic.rar">下载</a></p>
<div  class="related_post_title">猫抓鱼</div><ul class="related_post"><li>2009年12月1日 -- <a href="http://www.xncat.com/2009/12/catflash/340.html" title="图片上传类[UpLoadPic]">图片上传类[UpLoadPic]</a> (4)</li><li>2009年12月1日 -- <a href="http://www.xncat.com/2009/12/catflash/334.html" title="摄像头拍照或视频截图类">摄像头拍照或视频截图类</a> (8)</li><li>2010年07月26日 -- <a href="http://www.xncat.com/2010/07/mochi/1276.html" title="开发与上传麻球游戏教程（n神版）">开发与上传麻球游戏教程（n神版）</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.xncat.com/2009/12/catflash/368.html/feed</wfw:commentRss>
		<slash:comments>10</slash:comments>
		</item>
		<item>
		<title>图片上传类[UpLoadPic]</title>
		<link>http://www.xncat.com/2009/12/catflash/340.html</link>
		<comments>http://www.xncat.com/2009/12/catflash/340.html#comments</comments>
		<pubDate>Tue, 01 Dec 2009 13:13:53 +0000</pubDate>
		<dc:creator>xncat</dc:creator>
				<category><![CDATA[Cat Class【类聚】]]></category>
		<category><![CDATA[Cat Flash【Flash日志】]]></category>
		<category><![CDATA[tutorial【教程】]]></category>
		<category><![CDATA[精通]]></category>
		<category><![CDATA[FileReference]]></category>
		<category><![CDATA[ImageLoader]]></category>
		<category><![CDATA[上传]]></category>
		<category><![CDATA[图片上传]]></category>
		<category><![CDATA[拍照]]></category>
		<category><![CDATA[自定义头像]]></category>

		<guid isPermaLink="false">http://www.catfly.cn/2009/12/cattrain/340.html</guid>
		<description><![CDATA[看我写的一系列三篇文章，才好理解所有与拍照，上传图片相关的问题。
摄像头拍照或视频截图类：http://www.xncat.com/2009/12/catflash/334.html
图片上传类[UpLoadPic]：http://www.xncat.com/2009/12/catflash/340.htm... ]]></description>
			<content:encoded><![CDATA[<p>看我写的一系列三篇文章，才好理解所有与拍照，上传图片相关的问题。</p>
<p>摄像头拍照或视频截图类：<a href="http://www.xncat.com/2009/12/catflash/334.html">http://www.xncat.com/2009/12/catflash/334.html</a></p>
<p>图片上传类[UpLoadPic]：<a href="http://www.xncat.com/2009/12/catflash/340.html">http://www.xncat.com/2009/12/catflash/340.html</a></p>
<p>保存图片到服务器类(php服务器)：<a href="http://www.xncat.com/2009/12/catflash/368.html">http://www.xncat.com/2009/12/catflash/368.html</a></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>不用说，做各种flash游戏或者互动应用的时候，让用户上传图片，或者自定义头像都会用到图片上传功能。为了能够灵活复用，我写了这个<a target="_blank" title="上传图片" href="http://www.catfly.cn/wp-content/uploads/2009/12/GetVideoImage.as" target="_blank">UpLoadPic</a>类。</p>
<p>上传图片需要服务器端的支持，使用这个类的话，请给类中的upLoadAPI属性填写你的服务端接口地址，如 http://xxx.tudou.com/global/tool/upload_pic.php?fileType=.jpg 在这个类中。</p>
<p>为了预览上传的图片，我用到了<a target="_blank" title="ImageLoader" href="http://www.catfly.cn/wp-content/uploads/2009/12/ImageLoader.as" target="_blank">ImageLoader</a>类，这个类比较方便对加载的图片创建多个实例。</p>
<p>演示demo :</p>
<p><a target="_blank" title="图片上传类" rel="vidbox 350 400" href="http://www.catfly.cn/wp-content/uploads/2009/12/uploadPic.swf"><img title="图片上传类" src="http://www.catfly.cn/wp-content/uploads/2009/12/up.jpg" alt="" /></a></p>
<p><strong>使用方法：</strong><br />
<span id="more-340"></span><br />
创建浏览按钮，上传按钮，友好提示文本，并依次把它们作为参数传递给UpLoadPic类即可。<br />
通过UpLoadPic类的<strong>getPreviewPic()</strong>方法可以获得上传后的预览图片对象，它是一个Sprite类型对象。<br />
也可以通过<strong>getPicUrl()</strong>方法获得上传后的图片地址。</p>
<pre><code>
var upLoadPic:UpLoadPic = new <span style="text-decoration: underline;">UpLoadPic(br_bt,up_bt,txt)</span>;
previewContent.addChild(<span style="text-decoration: underline;">upLoadPic.getPreviewPic()</span>);
</code></pre>
<p>这个类主要使用<a target="_blank" title="FileReference" href="http://help.adobe.com/zh_CN/AS3LCR/Flash_10.0/flash/net/FileReference.html">FileReference</a>对象来实例选择本地图片与上传到服务器。</p>
<pre><code>
file=new FileReference();
file.addEventListener(Event.SELECT,selectHandler);
file.addEventListener(Event.CANCEL,cancelHandler);
file.addEventListener(IOErrorEvent.IO_ERROR,ioErrorHandler);
file.addEventListener(ProgressEvent.PROGRESS,progressHandler);
file.addEventListener(Event.COMPLETE,completeHandler);
file.addEventListener(DataEvent.UPLOAD_COMPLETE_DATA,dataHandler);
</code></pre>
<p>注意浏览的方法中加入对图片类型的限制，如<br />
var fileFilter:FileFilter=new FileFilter(&#8220;文件类型&#8221;,&#8221;*.jpg;*,png;*.gif&#8221;);<br />
file.browse([fileFilter]);</p>
<p>上传的方法中则需要加入对图片大小的限制与提示。</p>
<pre><code>
var fileSize:uint=file.size;
if (fileSize&gt;1024*300) {
        this.uploadText.text="文件太大！请上传小于300k的图片";
}
//浏览
private function browseFunc(evt:MouseEvent):void {
        var fileFilter:FileFilter=new FileFilter("文件类型","*.jpg;*,png;*.gif");
        file.browse([fileFilter]);
}
//上传
private function uploadFunc(evt:MouseEvent):void {
        var fileSize:uint=file.size;
        if (fileSize&gt;1024*300) {
                this.uploadText.text="文件太大！请上传小于300k的图片";
        } else {
                var url:String=upLoadAPI;
                var uploadURL:URLRequest=new URLRequest(url);
                uploadURL.method=URLRequestMethod.POST;
                file.upload(uploadURL);
        }
}

</code></pre>
<p>此类中也有isenabled方法，这是一个可以很方便给Sprite,MovieClip,SimpleButton等显示对象添加或移除鼠标事件的方法。<br />
在另一篇文章<a target="_blank" title="摄像头拍照或视频截图类" href="http://www.catfly.cn/2009/12/cattrain/334.html" target="_blank">《摄像头拍照或视频截图类》</a>中有详细的说明。<br />
示例原文件<a target="_blank" title="下载" href="http://www.catfly.cn/wp-content/uploads/2009/12/UpLoadPic.rar" target="_blank">下载</a></p>
<div  class="related_post_title">猫抓鱼</div><ul class="related_post"><li>2009年12月3日 -- <a href="http://www.xncat.com/2009/12/catflash/368.html" title="保存图片到服务器类(php服务器)">保存图片到服务器类(php服务器)</a> (10)</li><li>2009年12月1日 -- <a href="http://www.xncat.com/2009/12/catflash/334.html" title="摄像头拍照或视频截图类">摄像头拍照或视频截图类</a> (8)</li><li>2010年07月26日 -- <a href="http://www.xncat.com/2010/07/mochi/1276.html" title="开发与上传麻球游戏教程（n神版）">开发与上传麻球游戏教程（n神版）</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.xncat.com/2009/12/catflash/340.html/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>摄像头拍照或视频截图类</title>
		<link>http://www.xncat.com/2009/12/catflash/334.html</link>
		<comments>http://www.xncat.com/2009/12/catflash/334.html#comments</comments>
		<pubDate>Tue, 01 Dec 2009 09:44:13 +0000</pubDate>
		<dc:creator>xncat</dc:creator>
				<category><![CDATA[Cat Class【类聚】]]></category>
		<category><![CDATA[Cat Flash【Flash日志】]]></category>
		<category><![CDATA[tutorial【教程】]]></category>
		<category><![CDATA[精通]]></category>
		<category><![CDATA[BitmapData]]></category>
		<category><![CDATA[camera]]></category>
		<category><![CDATA[上传]]></category>
		<category><![CDATA[拍照]]></category>
		<category><![CDATA[摄像头拍照]]></category>
		<category><![CDATA[视频截图]]></category>

		<guid isPermaLink="false">http://www.catfly.cn/2009/12/cattrain/334.html</guid>
		<description><![CDATA[看我写的一系列三篇文章，才好理解所有与拍照，上传图片相关的问题。
摄像头拍照或视频截图类：http://www.xncat.com/2009/12/catflash/334.html
图片上传类[UpLoadPic]：http://www.xncat.com/2009/12/catflash/340.htm... ]]></description>
			<content:encoded><![CDATA[<p>看我写的一系列三篇文章，才好理解所有与拍照，上传图片相关的问题。</p>
<p>摄像头拍照或视频截图类：<a href="http://www.xncat.com/2009/12/catflash/334.html">http://www.xncat.com/2009/12/catflash/334.html</a></p>
<p>图片上传类[UpLoadPic]：<a href="http://www.xncat.com/2009/12/catflash/340.html">http://www.xncat.com/2009/12/catflash/340.html</a></p>
<p>保存图片到服务器类(php服务器)：<a href="http://www.xncat.com/2009/12/catflash/368.html">http://www.xncat.com/2009/12/catflash/368.html</a></p>
<p>&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;&#8212;</p>
<p>开发flash项目时，经常会遇到需要用摄像头拍照，或者对视频进行截图。所以我写了这个类<a target="_blank" href="http://www.catfly.cn/wp-content/uploads/2009/12/GetVideoImage.as">GetVideoImage</a><br />
无论是摄像头还是视频，都是用<a target="_blank" title="video" href="http://help.adobe.com/zh_CN/AS3LCR/Flash_10.0/flash/media/Video.html" target="_blank">Video</a>对象来负责播放视频流，<br />
所以拍照或视频截图都是对video用<a target="_blank" title="draw" href="http://help.adobe.com/zh_CN/AS3LCR/Flash_10.0/flash/display/BitmapData.html#draw()" target="_blank">BitmapData.draw</a>方法来截图视频的图像。<br />
演示demo :</p>
<p><a target="_blank" title="摄像头拍照或视频截图类" rel="vidbox 350 400" href="http://www.catfly.cn/wp-content/uploads/2009/12/getVideoImg.swf"><img title="摄像头拍照或视频截图类" src="http://www.catfly.cn/wp-content/uploads/2009/12/cam.jpg" alt="" /></a></p>
<p><strong>使用方法：</strong><br />
<span id="more-334"></span><br />
创建一个Video对象，重拍按钮，拍照按钮，友好提示文本，然后依次把它们作为参数传递给GetVideoImage类的实例。并侦听此实例发出的&#8221;completeCamPic”事件。”。<br />
通过GetVideoImage类的<span class="oTitle">getPrecamPic方法</span>可以获得拍照或截取所得的图片对象，它是一个Sprite类型。</p>
<pre><code>
var v:Video = new Video(320,280);
videoContent.addChild(v);
var getV:GetVideoImage = new <span style="text-decoration: underline;">GetVideoImage(v,recam_bt,cam_bt,txt)</span>;
getV.addEventListener("completeCamPic",completeCamPicFunc);
function completeCamPicFunc(e:Event):void{
	camPicContent.addChild(<span style="text-decoration: underline;">getV.getPrecamPic()</span>);
}
</code></pre>
<p>在这里介绍一下GetVideoImage类中的isenabled方法，这个方法可以给Sprite,MovieClip,SimpleButton等显示对象添加或移除鼠标点击事件。<br />
需要给它传递三个参数：isenabled(btMc:DisplayObject,isable:Boolean,fn:Function)<br />
btMc为需要添加事件的显示对象<br />
isable为true添加事件，为false移除事件<br />
fn为事件绑定的函数</p>
<pre><code>
function isenabled(btMc:DisplayObject,isable:Boolean,fn:Function):void {
        var bt;
        if (isable) {
                if(btMc is Sprite){bt = btMc as Sprite;bt.buttonMode=true;}else{bt = btMc;}
                bt.addEventListener(MouseEvent.CLICK,fn);
                bt.alpha=1;
        } else {
                if(btMc is Sprite){bt = btMc as Sprite;bt.buttonMode=false;}else{bt = btMc;}
                bt.removeEventListener(MouseEvent.CLICK,fn);
                bt.alpha=0.5;
        }
}
</code></pre>
<p>添加事件后，鼠标经过按钮对象会变成手形，点击触发绑定的函数，<br />
移除事件后，鼠标经过按钮没有手形，点击无事件，按钮变成半透明效果。</p>
<p>示例原文件<a target="_blank" title="getVideoImage.rar" href="http://www.catfly.cn/wp-content/uploads/2009/12/getVideoImage.rar">下载</a></p>
<div  class="related_post_title">猫抓鱼</div><ul class="related_post"><li>2009年12月3日 -- <a href="http://www.xncat.com/2009/12/catflash/368.html" title="保存图片到服务器类(php服务器)">保存图片到服务器类(php服务器)</a> (10)</li><li>2009年12月1日 -- <a href="http://www.xncat.com/2009/12/catflash/340.html" title="图片上传类[UpLoadPic]">图片上传类[UpLoadPic]</a> (4)</li><li>2010年07月26日 -- <a href="http://www.xncat.com/2010/07/mochi/1276.html" title="开发与上传麻球游戏教程（n神版）">开发与上传麻球游戏教程（n神版）</a> (1)</li></ul>]]></content:encoded>
			<wfw:commentRss>http://www.xncat.com/2009/12/catflash/334.html/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
	</channel>
</rss>
