<?xml version="1.0" encoding="utf-8"?><feed xmlns="http://www.w3.org/2005/Atom"><title type="text">博客园_与时俱进</title><subtitle type="text"/><id>http://feed.cnblogs.com/blog/u/54434/rss</id><updated>2012-02-10T03:29:05Z</updated><author><name>与时俱进</name><uri>http://www.cnblogs.com/top5/</uri></author><generator>CNBlogs BlogServer</generator><link rel="alternate" type="text/html" href="http://www.cnblogs.com/top5/"/><link rel="self" type="application/atom+xml" href="http://feed.cnblogs.com/blog/u/54434/rss"/><entry><id>http://www.cnblogs.com/top5/archive/2012/02/10/2345064.html</id><title type="text">优化PHP代码的40条建议</title><summary type="text">1.如果一个方法可静态化，就对它做静态声明。速率可提升至4倍。2.echo 比 print 快。3.使用echo的多重参数（译注：指用逗号而不是句点）代替字符串连接。4.在执行for循环之前确定最大循环数，不要每循环一次都计算最大值。5.注销那些不用的变量尤其是大数组，以便释放内存。6.尽量避免使用__get，__set，__autoload。7.require_once()代价昂贵。8.在包含文件时使用完整路径，解析操作系统路径所需的时间会更少。9.如果你想知道脚本开始执行（译注：即服务器端收到客户端请求）的时刻，使用$_SERVER[‘REQUEST_TIME’]要好于time()。10.</summary><published>2012-02-10T03:29:00Z</published><updated>2012-02-10T03:29:00Z</updated><author><name>与时俱进</name><uri>http://www.cnblogs.com/top5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/top5/archive/2012/02/10/2345064.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/top5/archive/2012/02/10/2345064.html"/><content type="html">&lt;div&gt;1.如果一个方法可静态化，就对它做静态声明。速率可提升至4倍。&lt;/div&gt;&lt;div&gt;2.echo 比 print 快。&lt;/div&gt;&lt;div&gt;3.使用echo的多重参数（译注：指用逗号而不是句点）代替字符串连接。&lt;/div&gt;&lt;div&gt;4.在执行for循环之前确定最大循环数，不要每循环一次都计算最大值。&lt;/div&gt;&lt;div&gt;5.注销那些不用的变量尤其是大数组，以便释放内存。&lt;/div&gt;&lt;div&gt;6.尽量避免使用__get，__set，__autoload。&lt;/div&gt;&lt;div&gt;7.require_once()代价昂贵。&lt;/div&gt;&lt;div&gt;8.在包含文件时使用完整路径，解析操作系统路径所需的时间会更少。&lt;/div&gt;&lt;div&gt;9.如果你想知道脚本开始执行（译注：即服务器端收到客户端请求）的时刻，使用$_SERVER[&amp;#8216;REQUEST_TIME&amp;#8217;]要好于time()。&lt;/div&gt;&lt;div&gt;10.函数代替正则表达式完成相同功能。&lt;/div&gt;&lt;div&gt;11.str_replace函数比preg_replace函数快，但strtr函数的效率是str_replace函数的四倍。&lt;/div&gt;&lt;div&gt;12.如果一个字符串替换函数，可接受数组或字符作为参数，并且参数长度不太长，那么可以考虑额外写一段替换代码，使得每次传递参数是一个字符，而不是只写一行代码接受数组作为查询和替换的参数。&lt;/div&gt;&lt;div&gt;13.使用选择分支语句（译注：即switch case）好于使用多个if，else if语句。&lt;/div&gt;&lt;div&gt;14.用@屏蔽错误消息的做法非常低效。&lt;/div&gt;&lt;div&gt;15.打开apache的mod_deflate模块。&lt;/div&gt;&lt;div&gt;16.数据库连接当使用完毕时应关掉。&lt;/div&gt;&lt;div&gt;17.$row[&amp;#8216;id&amp;#8217;]的效率是$row[id]的7倍。&lt;/div&gt;&lt;div&gt;18.错误消息代价昂贵。&lt;/div&gt;&lt;div&gt;19.尽量不要在for循环中使用函数，比如for ($x=0; $x &amp;lt; count($array); $x)每循环一次都会调用count()函数。&lt;/div&gt;&lt;div&gt;20.在方法中递增局部变量，速度是最快的。几乎与在函数中调用局部变量的速度相当。&lt;/div&gt;&lt;div&gt;21.递增一个全局变量要比递增一个局部变量慢2倍。&lt;/div&gt;&lt;div&gt;22.递增一个对象属性（如：$this-&amp;gt;prop++）要比递增一个局部变量慢3倍。&lt;/div&gt;&lt;div&gt;23.递增一个未预定义的局部变量要比递增一个预定义的局部变量慢9至10倍。&lt;/div&gt;&lt;div&gt;24.仅定义一个局部变量而没在函数中调用它，同样会减慢速度（其程度相当于递增一个局部变量）。PHP大概会检查看是否存在全局变量。&lt;/div&gt;&lt;div&gt;25.方法调用看来与类中定义的方法的数量无关，因为我（在测试方法之前和之后都）添加了10个方法，但性能上没有变化。&lt;/div&gt;&lt;div&gt;26.派生类中的方法运行起来要快于在基类中定义的同样的方法。&lt;/div&gt;&lt;div&gt;27.调用带有一个参数的空函数，其花费的时间相当于执行7至8次的局部变量递增操作。类似的方法调用所花费的时间接近于15次的局部变量递增操作。&lt;/div&gt;&lt;div&gt;28.用单引号代替双引号来包含字符串，这样做会更快一些。因为PHP会在双引号包围的字符串中搜寻变量，单引号则不会。当然，只有当你不需要在字符串中包含变量时才可以这么做。&lt;/div&gt;&lt;div&gt;29.输出多个字符串时，用逗号代替句点来分隔字符串，速度更快。注意：只有echo能这么做，它是一种可以把多个字符串当作参数的&amp;#8220;函数&amp;#8221;（译注：PHP手册中说echo是语言结构，不是真正的函数，故把函数加上了双引号）。&lt;/div&gt;&lt;div&gt;30.Apache解析一个PHP脚本的时间要比解析一个静态HTML页面慢2至10倍。尽量多用静态HTML页面，少用脚本。&lt;/div&gt;&lt;div&gt;31.除非脚本可以缓存，否则每次调用时都会重新编译一次。引入一套PHP缓存机制通常可以提升25%至100%的性能，以免除编译开销。&lt;/div&gt;&lt;div&gt;32.尽量做缓存，可使用memcached。memcached是一款高性能的内存对象缓存系统，可用来加速动态Web应用程序，减轻数据库负载。对运算码 (OP code)的缓存很有用，使得脚本不必为每个请求做重新编译。&lt;/div&gt;&lt;div&gt;33.当操作字符串并需要检验其长度是否满足某种要求时，你想当然地会使用strlen()函数。此函数执行起来相当快，因为它不做任何计算，只返回在zval 结构（C的内置数据结构，用于存储PHP变量）中存储的已知字符串长度。但是，由于strlen()是函数，多多少少会有些慢，因为函数调用会经过诸多步骤，如字母小写化（译注：指函数名小写化，PHP不区分函数名大小写）、哈希查找，会跟随被调用的函数一起执行。在某些情况下，你可以使用isset() 技巧加速执行你的代码。&lt;/div&gt;&lt;div&gt;（举例如下）&lt;/div&gt;&lt;div&gt;if (strlen($foo) &amp;lt; 5) { echo &amp;#8220;Foo is too short&amp;#8221;; }&lt;/div&gt;&lt;div&gt;（与下面的技巧做比较）&lt;/div&gt;&lt;div&gt;if (!isset($foo)) { echo &amp;#8220;Foo is too short&amp;#8221;; }&lt;/div&gt;&lt;div&gt;调用isset()恰巧比strlen()快，因为与后者不同的是，isset()作为一种语言结构，意味着它的执行不需要函数查找和字母小写化。也就是说，实际上在检验字符串长度的顶层代码中你没有花太多开销。&lt;/div&gt;&lt;div&gt;34.当执行变量$i的递增或递减时，$i++会比++$i慢一些。这种差异是PHP特有的，并不适用于其他语言，所以请不要修改你的C或Java代码并指望它们能立即变快，没用的。++$i更快是因为它只需要3条指令(opcodes)，$i++则需要4条指令。后置递增实际上会产生一个临时变量，这个临时变量随后被递增。而前置递增直接在原值上递增。这是最优化处理的一种，正如Zend的PHP优化器所作的那样。牢记这个优化处理不失为一个好主意，因为并不是所有的指令优化器都会做同样的优化处理，并且存在大量没有装配指令优化器的互联网服务提供商（ISPs）和服务器。&lt;/div&gt;&lt;div&gt;35.并不是事必面向对象(OOP)，面向对象往往开销很大，每个方法和对象调用都会消耗很多内存。&lt;/div&gt;&lt;div&gt;36.并非要用类实现所有的数据结构，数组也很有用。&lt;/div&gt;&lt;div&gt;37.不要把方法细分得过多，仔细想想你真正打算重用的是哪些代码？&lt;/div&gt;&lt;div&gt;38.当你需要时，你总能把代码分解成方法。&lt;/div&gt;&lt;div&gt;39.尽量采用大量的PHP内置函数。&lt;/div&gt;&lt;div&gt;40.如果在代码中存在大量耗时的函数，你可以考虑用C扩展的方式实现它们。&lt;/div&gt;&lt;div&gt;41.评估检验(profile)你的代码。检验器会告诉你，代码的哪些部分消耗了多少时间。Xdebug调试器包含了检验程序，评估检验总体上可以显示出代码的瓶颈。&lt;/div&gt;&lt;div&gt;42.mod_zip可作为Apache模块，用来即时压缩你的数据，并可让数据传输量降低80%。&lt;/div&gt;&lt;img src="http://www.cnblogs.com/top5/aggbug/2345064.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/top5/archive/2012/02/10/2345064.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/top5/archive/2012/02/10/2345061.html</id><title type="text">PHP用CURL伪造IP和来源</title><summary type="text">CURL确实很强悍，可以伪造IP和来源。1.php 请求 2.php 。1.php代码：$ch = curl_init();curl_setopt($ch, CURLOPT_URL, &amp;quot;http://localhost/2.php&amp;quot;);curl_setopt($ch, CURLOPT_HTTPHEADER, array(&amp;#39;X-FORWARDED-FOR:8.8.8.8&amp;#39;, &amp;#39;CLIENT-IP:8.8.8.8&amp;#39;)); //构造IPcurl_setopt($ch, CURLOPT_REFERER, &amp;quot;http://www.gosoa.</summary><published>2012-02-10T03:27:00Z</published><updated>2012-02-10T03:27:00Z</updated><author><name>与时俱进</name><uri>http://www.cnblogs.com/top5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/top5/archive/2012/02/10/2345061.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/top5/archive/2012/02/10/2345061.html"/><content type="html">&lt;div&gt;CURL确实很强悍，可以伪造IP和来源。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;1.php 请求 2.php 。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;1.php代码：&lt;/div&gt;&lt;div&gt;$ch = curl_init();&lt;/div&gt;&lt;div&gt;curl_setopt($ch, CURLOPT_URL, "http://localhost/2.php");&lt;/div&gt;&lt;div&gt;curl_setopt($ch, CURLOPT_HTTPHEADER, array('X-FORWARDED-FOR:8.8.8.8', 'CLIENT-IP:8.8.8.8')); &amp;nbsp;//构造IP&lt;/div&gt;&lt;div&gt;curl_setopt($ch, CURLOPT_REFERER, "http://www.gosoa.com.cn/ "); &amp;nbsp; //构造来路&lt;/div&gt;&lt;div&gt;curl_setopt($ch, CURLOPT_HEADER, 1);&lt;/div&gt;&lt;div&gt;$out = curl_exec($ch);&lt;/div&gt;&lt;div&gt;curl_close($ch);&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;2.php代码如下：&lt;/div&gt;&lt;div&gt;function getClientIp() {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; if (!empty($_SERVER["HTTP_CLIENT_IP"]))&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $ip = $_SERVER["HTTP_CLIENT_IP"];&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; else if (!empty($_SERVER["HTTP_X_FORWARDED_FOR"]))&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $ip = $_SERVER["HTTP_X_FORWARDED_FOR"];&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; else if (!empty($_SERVER["REMOTE_ADDR"]))&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $ip = $_SERVER["REMOTE_ADDR"];&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; else&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; $ip = "err";&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; return $ip;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;echo "IP: " . getClientIp() . "";&lt;/div&gt;&lt;div&gt;echo "referer: " . $_SERVER["HTTP_REFERER"];&lt;/div&gt;&lt;div&gt;伪造成功，这是不是给&amp;#8220;刷票&amp;#8221;的朋友提供了很好的换IP的方案！！&lt;/div&gt;&lt;img src="http://www.cnblogs.com/top5/aggbug/2345061.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/top5/archive/2012/02/10/2345061.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/top5/archive/2012/02/08/2342729.html</id><title type="text">as3鱼眼放大镜</title><summary type="text">package {//hi.baidu.com/inuko//bitmapdata fisheye magnifier//原创代码，如有雷同，纯属巧合/*本例是使用近似算法，只是最简单的鱼眼应用。此类绑定一个以0,0为中心，半径R=50的圆即可使用。也可以自行绘制放大镜子。原理很简单，可以baidu下。须和被放大的object封在一个mc里。这样bitmapdata.draw比较方便。涉及到层级问题，不这么做执行效率较低。可以用模糊滤镜使之更平滑，不建议使用。需要近远调节，可以自行写 放大镜与物件的距离，放大镜与人眼的距离 与 放大倍数的映射关系this is a proximation. a</summary><published>2012-02-08T07:00:00Z</published><updated>2012-02-08T07:00:00Z</updated><author><name>与时俱进</name><uri>http://www.cnblogs.com/top5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/top5/archive/2012/02/08/2342729.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/top5/archive/2012/02/08/2342729.html"/><content type="html">&lt;div&gt;&lt;div&gt;package {&lt;/div&gt;&lt;div&gt;//hi.baidu.com/inuko&lt;/div&gt;&lt;div&gt;//bitmapdata fisheye magnifier&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;//原创代码，如有雷同，纯属巧合&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;/*&lt;/div&gt;&lt;div&gt;本例是使用近似算法，只是最简单的鱼眼应用。此类绑定一个以0,0为中心，半径R=50的圆即可使用。也可以自行绘制放大镜子。&lt;/div&gt;&lt;div&gt;原理很简单，可以baidu下。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;须和被放大的object封在一个mc里。这样bitmapdata.draw比较方便。涉及到层级问题，不这么做执行效率较低。&lt;/div&gt;&lt;div&gt;可以用模糊滤镜使之更平滑，不建议使用。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;需要近远调节，可以自行写 放大镜与物件的距离，放大镜与人眼的距离 与 放大倍数的映射关系&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;this is a proximation. a simple fisheye.bind it with a sprite which has a circle which r=100 in point(0,0),u can draw your own magnifier.&lt;/div&gt;&lt;div&gt;just put it in a movie,and then it can render the parent&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;the theory is concentric circles filled with different scaled original pictures&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;可以用tweener做动画 move with tweener class&lt;/div&gt;&lt;div&gt;Tweener.addTween(myMovieClip, {x:10, time:1,onUpdate:magnifier.render});&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;时间轴动画可以用enterFrame &amp;nbsp; move in flash&amp;nbsp;&lt;/div&gt;&lt;div&gt;function enterFrameH(e){&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;if(currentFrame&amp;gt;arg&amp;amp;&amp;amp;currentFrame&amp;lt;arg){ //动画范围 moving frames range&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; magnifier.render()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;*/&lt;/div&gt;&lt;div&gt;import flash.display.Sprite;&lt;/div&gt;&lt;div&gt;import flash.display.MovieClip;&lt;/div&gt;&lt;div&gt;import flash.display.BitmapData;&lt;/div&gt;&lt;div&gt;import flash.geom.Rectangle;&lt;/div&gt;&lt;div&gt;import flash.geom.Matrix;&lt;/div&gt;&lt;div&gt;import flash.geom.Point;&lt;/div&gt;&lt;div&gt;import flash.filters.BlurFilter&lt;/div&gt;&lt;div&gt;public class magnifier extends Sprite {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;public var scaleMax=2; //最大放缩&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;public var scaleMin=1; //最小放缩&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;public var scaleStep=32; //精细度，即同新圆数 render steps,as same as concentric circles number&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;//预存储提高执行效率 &amp;nbsp; defined these in init function to upgrad efficiency&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;private var scaleArr=[]; &amp;nbsp; &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;private var matrixArr=[];&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;private var rArr=[];&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;private var spriteArr=[]&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;private var nowWidth; &amp;nbsp; &amp;nbsp;//当前放大镜显示圆的直径，即bimmapdata绘制区域 &amp;nbsp; the rendercircle's width&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;public var bmpd=new BitmapData(10,10);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;public var bmpd_=new BitmapData(10,10);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;public var rect;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;public var point=new Point(0,0)&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;//public var blur=new BlurFilter(3,3,1) 用模糊滤镜可以更平滑，但是太卡，不建议 &amp;nbsp; make it smoother,but increase the scaleStep is better&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;public function magnifier(scaleMax=2,scaleMin=1,scaleStep=32) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; this.scaleMax=scaleMax;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; this.scaleMin=scaleMin;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; this.scaleStep=scaleStep;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; init();&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; //addEventListener("enterFrame",render); //render in each frame,can wirte these outside the class&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; render()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;public function init() {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; var d=(scaleMax-scaleMin)/(scaleStep-1);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; if (d&amp;lt;0) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;scaleMax=scaleMin&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;d=0&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;return;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; nowWidth=this.scaleX*100;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; for (var i=0; i&amp;lt;=scaleStep; i++) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;scaleArr[i]=scaleMin+i*d;//先缓冲提高效率,从大带小&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;rArr[i]=50*(scaleStep-i+1)/(scaleStep+1);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;matrixArr[i]=new Matrix();&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;matrixArr[i].scale(scaleArr[i],scaleArr[i]);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;matrixArr[i].translate(-50*scaleArr[i],-50*scaleArr[i])&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;spriteArr[i]=new Sprite()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;//if(i&amp;gt;0){&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; //spriteArr[i].filters=[blur] //用模糊滤镜可以更平滑，但是太卡，不建议 &amp;nbsp; make it smoother,but increase the scaleStep is better&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;//}&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;addChild(spriteArr[i])&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;public function render(e=null) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; var i&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; this.visible=false //不显示，以免绘制自身 &amp;nbsp; invisible to avoid draw magnifier self&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; rect=new Rectangle(this.x-nowWidth/2,this.y-nowWidth/2,nowWidth,nowWidth); //实际范围 true bitmapdata.draw area&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; bmpd.dispose()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; bmpd=new BitmapData(this.parent.width,this.parent.height,true);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; bmpd.draw(this.parent,null,null,null,rect,true);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; bmpd_.dispose() &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; bmpd_=new BitmapData(nowWidth,nowWidth) &amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; bmpd_.copyPixels(bmpd,rect,point) //拷贝实际范围到新的bitmapdata，方便放缩的matrix计算 copy to a new bitmapdata,so can be easier to calc matrix&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; for (i=0; i&amp;lt;=scaleStep; i++) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;spriteArr[i].graphics.clear()&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;//spriteArr[i].graphics.lineStyle(1,0) 圆外框，此行可以帮助理解原理 help to understand&amp;amp;debug&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;spriteArr[i].graphics.beginBitmapFill(bmpd_,matrixArr[i],false,true); //填充不同matrix的圆 &amp;nbsp; fill circles with difference matrix&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;spriteArr[i].graphics.drawCircle(0,0,rArr[i]);&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;spriteArr[i].graphics.endFill();&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; }&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; this.visible=true&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;}&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/top5/aggbug/2342729.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/top5/archive/2012/02/08/2342729.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/top5/archive/2012/02/07/2342064.html</id><title type="text">WinHex手动恢复分区表及误删除文件</title><summary type="text">WinHex是一个专门用来对付各种日常紧急情况的小工具。它可以用来检查和修复各种文件、恢复删除文件、硬盘损坏造成的数据丢失等。同时它还可以让你看到其他程序隐藏起来的文件和数据。总体来说是一款非常不错的 16 进制编辑器。得到 ZDNetSoftwareLibrary 五星级最高评价，拥有强大的系统效用。首先说说恢复文件，打开程序菜单——“工具”——“打开磁盘”，可选择要恢复文件的磁盘，点击打开，在上半部分可以浏览到所有磁盘文件，找到要恢复的文件，右击选择“恢复”，设定好恢复位置即可。（注：用于删除文件后没有写入新数据情况）。其次，我们说下恢复分区信息，本例中是挂接了两块硬盘。打开Winhex发</summary><published>2012-02-07T15:11:00Z</published><updated>2012-02-07T15:11:00Z</updated><author><name>与时俱进</name><uri>http://www.cnblogs.com/top5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/top5/archive/2012/02/07/2342064.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/top5/archive/2012/02/07/2342064.html"/><content type="html">&lt;div&gt;&lt;div&gt;WinHex是一个专门用来对付各种日常紧急情况的小工具。它可以用来检查和修复各种文件、恢复删除文件、硬盘损坏造成的数据丢失等。同时它还可以让你看到其他程序隐藏起来的文件和数据。总体来说是一款非常不错的 16 进制编辑器。得到 ZDNetSoftwareLibrary 五星级最高评价，拥有强大的系统效用。&lt;/div&gt;&lt;div&gt;首先说说恢复文件，打开程序菜单&amp;#8212;&amp;#8212;&amp;#8220;工具&amp;#8221;&amp;#8212;&amp;#8212;&amp;#8220;打开磁盘&amp;#8221;，可选择要恢复文件的磁盘，点击打开，在上半部分可以浏览到所有磁盘文件，找到要恢复的文件，右击选择&amp;#8220;恢复&amp;#8221;，设定好恢复位置即可。（注：用于删除文件后没有写入新数据情况）。&lt;/div&gt;&lt;div&gt;其次，我们说下恢复分区信息，本例中是挂接了两块硬盘。&lt;/div&gt;&lt;div&gt;打开Winhex发现MBR全部为零了，下面我们就着手开始手工恢复分区表&lt;/div&gt;&lt;div&gt;首先恢复引导代码，这最简单了，只要用Winhex到别的系统盘把引导代码复制过来就行了。我现在的机器上不是挂着两个硬盘吗？一个迈拓2G，一个西数40G，西数40G是我的系统盘，那就从这个盘上复制就行了。&lt;/div&gt;&lt;div&gt;单击&amp;#8220;磁盘编辑器&amp;#8221;按钮&lt;/div&gt;&lt;div&gt;出现&amp;#8220;编辑磁盘&amp;#8221;对话框&lt;/div&gt;&lt;div&gt;选择&amp;#8220;HD0 WDC WD400EB---00CPF0&amp;#8221;,点&amp;#8220;确定&amp;#8221;&lt;/div&gt;&lt;div&gt;这样我们就把系统盘的分区表给打开了，注意，现在我们是打开了两个窗口，当前的窗口是&amp;#8220;硬盘0&amp;#8221;，在标题栏上有显示。另外，打开窗口菜单也能看出来，当前窗口被打上一个勾，如果想切换回原来的窗口，就点击&amp;#8220;硬盘1&amp;#8221;。&lt;/div&gt;&lt;div&gt;首先选中系统盘的引导代码&lt;/div&gt;&lt;div&gt;然后在选区中单击鼠标右键，选&amp;#8220;编辑&amp;#8221;&lt;/div&gt;&lt;div&gt;又出来一个菜单，然后我们选&amp;#8220;复制选块&amp;#8221;&amp;#8212;&amp;#8212;&amp;#8220;正常&amp;#8221;&lt;/div&gt;&lt;div&gt;然后我们切换回硬盘1窗口，在零扇区的第一个字节处单击鼠标右键，选&amp;#8220;编辑&amp;#8221;&lt;/div&gt;&lt;div&gt;然后选&amp;#8220;剪贴板数据&amp;#8221;&amp;#8212;&amp;#8212;&amp;#8220;写入&amp;#8230;&amp;#8230;&amp;#8221;&lt;/div&gt;&lt;div&gt;出现一个窗口提示，点&amp;#8220;确定&amp;#8221;&lt;/div&gt;&lt;div&gt;这样，我们就把一个正常系统盘上的引导代码复制过来了。&lt;/div&gt;&lt;div&gt;下面，我们就开始恢复分区表（共64个字节，分为4个分区表项，每个分区表项占用16个字节，一般只使用前两个分区表项），我们首先来恢复第一个分区标项（也就是用来描述C盘的）。&lt;/div&gt;&lt;div&gt;首先，在第1个字节处（0扇区倒数第五行，倒数第二个字节）填上分区引导标志，因为C盘是活动分区，所以填上80。&lt;/div&gt;&lt;div&gt;接着是第2、3、4字节（本分区起始磁头号、扇区号、柱面号），填上：01 01 00。&lt;/div&gt;&lt;div&gt;第5字节是分区类型符，因为原先C盘是Fat32格式，所以填上：0B。那么，如果你不知道C盘是什么格式怎么办呢？你会说问问客户呀，那么如果他也不知道呢？别着急，后面在说恢复DBR的时候我会教你怎么分辨分区的格式。&lt;/div&gt;&lt;div&gt;第6、7、8字节是本分区的结束磁头号、扇区号、柱面号，这怎么知道呢？别着急，现在的磁盘都是按照LBA方式寻址，并不按照C/H/S(及柱面、磁头、扇区)方式寻址，所以这个地方你填些什么一般关系不大，但是我要告诉你有一个通用的填法，那就是：FE FF FF。&lt;/div&gt;&lt;div&gt;第9、10、11、12字节，本分区之前已用了的扇区数，也就是MBR所占用的扇区数，那不是63吗？对，但是要将63转为十六进制数，再反过来倒着填写上。还记得怎么用计算器吗？将63转为十六进制数是3F，不够四个字节前面加零，也就是00 00 00 3F，再将此数从右向左依次序反过来就是3F 00 00 00。&lt;/div&gt;&lt;div&gt;第13、14、15、16字节是本分区的总扇区数，也就是C盘的大小，这就要通过稍微一点点计算来得到了。因为C盘是从第63个扇区开始，而C盘后面紧接着的是EBR，所以用EBR所在的第一个扇区数减去63就是C盘的大小。那么如何才能找到EBR所在的第一个扇区呢？我们前面说过，EBR的结构和MBR是一样的，所以，EBR的结束标志也一定是55AA，那么，只要我们找到这个结束标志，再看看这个扇区是不是EBR不就行了？&lt;/div&gt;&lt;div&gt;单击&amp;#8220;搜索&amp;#8221;&amp;#8212;&amp;#8212;&amp;#8220;查找十六进制数值&amp;#8230;&amp;#8230;&amp;#8221;，然后出来一个对话框&lt;/div&gt;&lt;div&gt;在文本框中输入&amp;#8220;55AA&amp;#8221;，搜索框中选&amp;#8220;全部&amp;#8221;，然后选中&amp;#8220;条件&amp;#8221;，把偏移量设置为&amp;#8220;512=510&amp;#8221;。&lt;/div&gt;&lt;div&gt;再单击&amp;#8220;确定&amp;#8221;。画面如下：&lt;/div&gt;&lt;div&gt;首先找到第一个&amp;#8220;55AA&amp;#8221;，我们看到，个扇区在第63个扇区上，并不是我们要找的EBR，再按F3继续查找&lt;/div&gt;&lt;div&gt;又找到好几个扇区，都不是，那么下面这个扇区是不是？&lt;/div&gt;&lt;div&gt;前面我们说过，EBR的结构和MBR的结构是一样的，所以在倒数第五行倒数第二个字节应该是00 01，并且前446个字节应该是0，显然这也不是EBR，继续按F3查找&amp;#8230;&amp;#8230;终于找到了真正的EBR，在1435392扇区。&lt;/div&gt;&lt;div&gt;小技巧：现在的硬盘都比较大，要逐个扇区的查找55AA确实太慢了，那么有没有办法快点呢？有，那就是先问问客户C盘大概有多大，大多数客户还是知道的，比如他说C盘大概有10个G，那么你就不要从头开始找了，因为那实在太慢了。10个G大概是2000万个扇区，那么你可以用转到扇区命令直接到1900万扇区，从那个地方再开始找不就省事多了。&lt;/div&gt;&lt;div&gt;用1435392减去63，得到1435329，再转为16进制，就是15E6C1，将他倒转过来就是C1E61500，这就是C盘的大小。这样，第一个分区表项填写完毕，我们保存一下，再接着填写第二个分区表项。&lt;/div&gt;&lt;div&gt;第二个分区表第1个字节：因为是非活动分区，所以写00&lt;/div&gt;&lt;div&gt;第2、3、4字节，填写01 01 00（通用的）&lt;/div&gt;&lt;div&gt;第5字节：因为是扩展分区，所以填写0F&lt;/div&gt;&lt;div&gt;第6、7、8字节：填写FE FF FF(通用)&lt;/div&gt;&lt;div&gt;第9、10、11、12字节是本分区之前已用了的扇区数，应该就是C盘大小加63，也就是1435392，前面刚计算出来的，转为十六进制数再反过来就是00 E7 15 00&lt;/div&gt;&lt;div&gt;第13、14、15、16字节是本分区的总扇区数，也就是扩展分区的总扇区数，也就是用整个硬盘的大小减去C盘的大小再减去63，即4124736-1435329-63=2689344，转为十六进制就是290940，反过来就是40092900。&lt;/div&gt;&lt;div&gt;这样，第二个分区表项就填写完了。&lt;/div&gt;&lt;div&gt;不要忘了把最后的结束标志55AA填上，这样，MBR就全恢复完了，最后，保存，再重新启动&amp;#8230;&amp;#8230;&lt;/div&gt;&lt;div&gt;启动完毕，迫不及待的打开我的电脑，发现三个分区全部又回来了，并且里面的数据完好无损。&lt;/div&gt;&lt;div&gt;再右击&amp;#8220;我的电脑&amp;#8221;，选&amp;#8220;管理&amp;#8221;&lt;/div&gt;&lt;div&gt;出现一个对话框，选&amp;#8220;磁盘管理&amp;#8221;，在右边可以看到磁盘一的三个分区(Fat32、Fat16、Ntfs)全部都回来了，至此，手工恢复分区表顺利完成。&lt;/div&gt;&lt;div&gt;手工恢复数据恢复成功率比较高，而且比较有趣味和挑战性，能找回许多傻瓜似的软件所找不回来的文件，但是要求工程师一定要有耐性，而且一定要保持清醒，清楚自己正在操作什么，操作完了会有什么后果，能不能退回到上一步状态。特别是对一些破坏性操作，一定要考虑周到，只要条件允许，就一定要在操作之前进行备份，否则会造成&amp;#8220;血&amp;#8221;的教训，切记！&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/top5/aggbug/2342064.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/top5/archive/2012/02/07/2342064.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/top5/archive/2012/02/07/2342054.html</id><title type="text">忽略PNG透明区域的事件(AS/Flash)</title><summary type="text">代码:PNGLoader.asview plaincopy to clipboardprint?package net.l4cd.display { import flash.display.BitmapData; import flash.display.Loader; import flash.display.Sprite; import flash.events.Event; import flash.events.IOErrorEvent; import flash.events.ProgressEvent; import flash.geom.Matrix...</summary><published>2012-02-07T15:04:00Z</published><updated>2012-02-07T15:04:00Z</updated><author><name>与时俱进</name><uri>http://www.cnblogs.com/top5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/top5/archive/2012/02/07/2342054.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/top5/archive/2012/02/07/2342054.html"/><content type="html">&lt;div&gt;&lt;div&gt;代码:&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;PNGLoader.as&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;view plaincopy to clipboardprint?&lt;/div&gt;&lt;div&gt;package net.l4cd.display &amp;nbsp;&lt;/div&gt;&lt;div&gt;{ &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; import flash.display.BitmapData; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; import flash.display.Loader; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; import flash.display.Sprite; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; import flash.events.Event; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; import flash.events.IOErrorEvent; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; import flash.events.ProgressEvent; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; import flash.geom.Matrix; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; import flash.net.URLRequest; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; import flash.system.LoaderContext; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; import flash.utils.ByteArray; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; /**&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* PNGLoader,主要解决png图片透明像素处事件的问题&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @author L4cd.Net&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/ &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; public class PNGLoader extends Sprite &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; { &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private var loader:Loader = new Loader(); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private var hit:Sprite = new Sprite(); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public function PNGLoader() &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; addChild(loader); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; addChild(hit); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hit.visible = false; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hit.mouseEnabled = false; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; mouseChildren = false; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hitArea = hit; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; loader.contentLoaderInfo.addEventListener(Event.COMPLETE,complete); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; loader.contentLoaderInfo.addEventListener(IOErrorEvent.IO_ERROR,error); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; loader.contentLoaderInfo.addEventListener(ProgressEvent.PROGRESS,progress); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private function complete(e:Event):void &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dispatchEvent(e); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; update(); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private function error(e:IOErrorEvent):void &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dispatchEvent(e); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private function progress(e:ProgressEvent):void &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; dispatchEvent(e); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public function load(request:URLRequest,context:LoaderContext=null):void &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; loader.load(request,context); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; clear(); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public function loadBytes(bytes:ByteArray,context:LoaderContext=null):void &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; loader.loadBytes(bytes,context); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; clear(); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public function unload():void &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; loader.unload(); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; clear(); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public function close():void &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; loader.close(); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; clear(); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private function clear():void &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hit.graphics.clear(); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private function update():void &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(!loader.content)return; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var bit:BitmapData = new BitmapData(loader.width,loader.height,true,0x00000000); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; bit.draw(loader); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //重绘图象到bit &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; clear(); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hit.graphics.beginFill(0); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(var x:uint=0;x&amp;lt;bit.width;x++) &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; for(var y:uint=0;y&amp;lt;bit.height;y++) &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; if(bit.getPixel32(x,y))hit.graphics.drawRect(x,y,1,1); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; //以graphics画出bit的无透明区域 &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; hit.graphics.endFill(); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; } &amp;nbsp;&lt;/div&gt;&lt;div&gt;} &amp;nbsp;&lt;/div&gt;&lt;div&gt;PNGLoaderExample.as&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;view plaincopy to clipboardprint?&lt;/div&gt;&lt;div&gt;package &amp;nbsp;&lt;/div&gt;&lt;div&gt;{ &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; import flash.display.Loader; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; import flash.display.Sprite; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; import flash.events.MouseEvent; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; import flash.filters.GlowFilter; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; import flash.net.URLRequest; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; import net.l4cd.display.PNGLoader; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; [SWF(width="600",height="400")] &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; /**&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* PNGLoaderExample&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;* @author L4cd.Net&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp;*/ &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; public class PNGLoaderExample extends Sprite &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; { &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; public function PNGLoaderExample() &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var pl:PNGLoader = new PNGLoader(); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pl.load(new URLRequest("10020601.png")); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; addChild(pl); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pl.y = 20; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pl.addEventListener(MouseEvent.ROLL_OUT,o); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; pl.addEventListener(MouseEvent.ROLL_OVER,o); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; var ld:Loader = new Loader(); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ld.load(new URLRequest("10020601.png")); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; addChild(ld); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ld.x = 320; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ld.y = 20; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ld.addEventListener(MouseEvent.ROLL_OUT,o); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; ld.addEventListener(MouseEvent.ROLL_OVER,o); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graphics.lineStyle(1); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graphics.drawRect(20,20,250,250); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; graphics.drawRect(320,20,250,250); &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; private function o(e:MouseEvent):void &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; { &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; e.target.filters = (e.type == MouseEvent.ROLL_OVER)?[new GlowFilter()]:[]; &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; } &amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; } &amp;nbsp;&lt;/div&gt;&lt;div&gt;} &amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/top5/aggbug/2342054.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/top5/archive/2012/02/07/2342054.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/top5/archive/2012/02/07/2342030.html</id><title type="text">AS3.0实例学习 熟悉新的事件机制和addChild的运用</title><summary type="text">案例1：熟悉新的事件机制和addChild的运用说明：拖动小人到滑板上，然后拖动滑板，可以发现小人已经跟滑板粘在了一起。演示：http://www.live-my-life-with-yuyi.com/as3_cases/changing_parents/代码：boarder_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag);boarder_mc.addEventListener(MouseEvent.MOUSE_UP, drop);red_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag);red_</summary><published>2012-02-07T14:46:00Z</published><updated>2012-02-07T14:46:00Z</updated><author><name>与时俱进</name><uri>http://www.cnblogs.com/top5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/top5/archive/2012/02/07/2342030.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/top5/archive/2012/02/07/2342030.html"/><content type="html">&lt;div&gt;&lt;div&gt;案例1：熟悉新的事件机制和addChild的运用&amp;nbsp;&lt;/div&gt;&lt;div&gt;说明：拖动小人到滑板上，然后拖动滑板，可以发现小人已经跟滑板粘在了一起。&amp;nbsp;&lt;/div&gt;&lt;div&gt;演示：http://www.live-my-life-with-yuyi.com/as3_cases/changing_parents/&amp;nbsp;&lt;/div&gt;&lt;div&gt;代码：&amp;nbsp;&lt;/div&gt;&lt;div&gt;boarder_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag);&amp;nbsp;&lt;/div&gt;&lt;div&gt;boarder_mc.addEventListener(MouseEvent.MOUSE_UP, drop);&amp;nbsp;&lt;/div&gt;&lt;div&gt;red_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag);&amp;nbsp;&lt;/div&gt;&lt;div&gt;red_mc.addEventListener(MouseEvent.MOUSE_UP, drop);&amp;nbsp;&lt;/div&gt;&lt;div&gt;blue_mc.addEventListener(MouseEvent.MOUSE_DOWN, drag);&amp;nbsp;&lt;/div&gt;&lt;div&gt;blue_mc.addEventListener(MouseEvent.MOUSE_UP, drop);&amp;nbsp;&lt;/div&gt;&lt;div&gt;AS3采用了新的监听机制，而且注意到对每个mc的鼠标按下弹起都使用了相同的函数，这就需要在函数里判断事件的发生者，从而做出相应的处理。&amp;nbsp;&lt;/div&gt;&lt;div&gt;function drag(event:MouseEvent):void&amp;nbsp;&lt;/div&gt;&lt;div&gt;{&amp;nbsp;&lt;/div&gt;&lt;div&gt;if(event.target.name == "boarder_mc")&amp;nbsp;&lt;/div&gt;&lt;div&gt;{&amp;nbsp;&lt;/div&gt;&lt;div&gt;addChild(boarder_mc);&amp;nbsp;&lt;/div&gt;&lt;div&gt;event.target.startDrag(true);&amp;nbsp;&lt;/div&gt;&lt;div&gt;boarder_mc.x = mouseX;&amp;nbsp;&lt;/div&gt;&lt;div&gt;boarder_mc.y = mouseY;&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;else&amp;nbsp;&lt;/div&gt;&lt;div&gt;{&amp;nbsp;&lt;/div&gt;&lt;div&gt;event.target.startDrag();&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;通过event.target.name来取得事件发生的对象名，AS3里没有了root，addChild相当于把某个mc搬到了舞台上，其实是TimeLine0.addChild(mc)，同时保证该mc是在舞台的最顶层（AS3里没有了深度管理）。&amp;nbsp;&lt;/div&gt;&lt;div&gt;通过event.target来获取事件发生的对象&amp;nbsp;&lt;/div&gt;&lt;div&gt;接着来看drop函数&amp;nbsp;&lt;/div&gt;&lt;div&gt;function drop(event:MouseEvent):void&amp;nbsp;&lt;/div&gt;&lt;div&gt;{&amp;nbsp;&lt;/div&gt;&lt;div&gt;event.target.stopDrag();&amp;nbsp;&lt;/div&gt;&lt;div&gt;if(boarder_mc.hitTestObject(red_mc))&amp;nbsp;&lt;/div&gt;&lt;div&gt;{&amp;nbsp;&lt;/div&gt;&lt;div&gt;red_mc.addChild(boarder_mc);&amp;nbsp;&lt;/div&gt;&lt;div&gt;boarder_mc.x = 0;&amp;nbsp;&lt;/div&gt;&lt;div&gt;boarder_mc.y = 0;&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;else if(boarder_mc.hitTestObject(blue_mc))&amp;nbsp;&lt;/div&gt;&lt;div&gt;{&amp;nbsp;&lt;/div&gt;&lt;div&gt;blue_mc.addChild(boarder_mc);&amp;nbsp;&lt;/div&gt;&lt;div&gt;boarder_mc.x = 0;&amp;nbsp;&lt;/div&gt;&lt;div&gt;boarder_mc.y = 0;&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;当鼠标弹起时，啥也不管，先停止拖动，如果小人和滑板有重合区域，则将小人放到滑板里，滑板就像一个container，boarder_mc成了red_mc的child，将boarder_mc的x坐标和y坐标清零是为了将小人放到滑板的正确位置。&amp;nbsp;&lt;/div&gt;&lt;div&gt;如果小人已经成为了滑板的child，那么再次拖动滑板时，由于又执行了一次addChild(boarder_mc);所以滑板的父类又变成了舞台。&amp;nbsp;&lt;/div&gt;&lt;div&gt;整个案例1的分析到此结束，涉及的知识点不多，主要是熟悉一下AS3的语法。&amp;nbsp;&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/top5/aggbug/2342030.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/top5/archive/2012/02/07/2342030.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/top5/archive/2012/02/06/2340108.html</id><title type="text">flash中NetConnection与NetStream知识整理</title><summary type="text">NetConnection只有一个connect方法，NetStream就完整多了，方法如下： close() 关闭 pause() 暂停 play() 播放 seek(n) 移动到n秒数值; setBufferTime(n) 设置n秒的缓冲区;下面的是属性了： bufferLength 目前在缓冲区的秒数数值; bufferTime 由setBufferTime设置的秒数数值; currentFps 目前在串流资料中的每秒影格数; time 以秒为单位，当前已经播放过的时间;事件...</summary><published>2012-02-06T06:33:00Z</published><updated>2012-02-06T06:33:00Z</updated><author><name>与时俱进</name><uri>http://www.cnblogs.com/top5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/top5/archive/2012/02/06/2340108.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/top5/archive/2012/02/06/2340108.html"/><content type="html">&lt;div&gt;&lt;div&gt;NetConnection只有一个connect方法，NetStream就完整多了，方法如下：&lt;/div&gt;&lt;div&gt;　　　close() &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; 关闭&lt;/div&gt;&lt;div&gt;　　　pause() &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp;暂停&lt;/div&gt;&lt;div&gt;　　　play()　　　　　 播放&lt;/div&gt;&lt;div&gt;　　　seek(n)　　　　 移动到n秒数值;&lt;/div&gt;&lt;div&gt;　　　setBufferTime(n) 设置n秒的缓冲区;&lt;/div&gt;&lt;div&gt;下面的是属性了：　　　&lt;/div&gt;&lt;div&gt;　　　bufferLength　　目前在缓冲区的秒数数值;&lt;/div&gt;&lt;div&gt;　　　bufferTime　　　由setBufferTime设置的秒数数值;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; &amp;nbsp; currentFps　　　目前在串流资料中的每秒影格数;&lt;/div&gt;&lt;div&gt;　　　time　　　　　　以秒为单位，当前已经播放过的时间;&lt;/div&gt;&lt;div&gt;事件处理函数：&lt;/div&gt;&lt;div&gt;　　　onStatus　　　　返回串流的状态;&lt;/div&gt;&lt;div&gt;　　　onMetaData　　 返回串流的总时间;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;例：&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;　　在库中创建一个视频元件，取名为my_video;拖到场景中放好位置,在帧上输入如下代码：&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;var connection_nc:NetConnection = new NetConnection();//建立一个链接对象，&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;connection_nc.connect(null);//开始链接。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;var stream_ns:NetStream = new NetStream(connection_nc);//建立一个视频对象，并和链接对象关联。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;my_video.attachVideo(stream_ns);//场景中的新建视频实例加载视频。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;stream_ns.setBufferTime(5);//设定N秒钟的时间缓冲区;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;stream_ns.play("video_1.flv");//视频开始播放。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;TotalTime();&lt;/div&gt;&lt;div&gt;stream_ns.onStatus = function(infoObject:Object) {//视频的事件反馈函数。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; for (var prop in infoObject) {//获取事件内容infoObject[prop];&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; trace(infoObject[prop]);//跟踪一下stream_ms状态&lt;/div&gt;&lt;div&gt;&amp;nbsp; var test:String = infoObject[prop];&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;if (test == "NetStream.Play.Stop") { //假如事件内容是flv播放完毕，则开始播放下一个或者重新播放，这就看自己的要求了。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;trace("播放完毕，马上开始播放下一个");&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;stream_ns.play("video_2.flv");&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;TotalTime();&lt;/div&gt;&lt;div&gt;&amp;nbsp; }&lt;/div&gt;&lt;div&gt;&amp;nbsp;}&lt;/div&gt;&lt;div&gt;};&lt;/div&gt;&lt;div&gt;function TotalTime() {//duration获取影片的长度,flashmx2004下没有onMetaData,所以需要自己给它定义一个;flash8就不存在这样的问题，可以直接使用，也可以用2004的代码&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&amp;nbsp; stream_ns["onMetaData"] = function (metadata) {&lt;/div&gt;&lt;div&gt;&amp;nbsp; Time_txt.text = "TotalTime: &amp;nbsp;"+metadata.duration;&lt;/div&gt;&lt;div&gt;&amp;nbsp;};&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/top5/aggbug/2340108.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/top5/archive/2012/02/06/2340108.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/top5/archive/2012/02/06/2340103.html</id><title type="text">设定麦克风的声音品质</title><summary type="text">一般默认Microphone的声音频率是8kHz ，如果调节更好的声音品质，就需要使用setRate方法，如：myMic.setRate(userRate);//其中userRate的可能值有： 5, 8, 11, 22或 44。</summary><published>2012-02-06T06:31:00Z</published><updated>2012-02-06T06:31:00Z</updated><author><name>与时俱进</name><uri>http://www.cnblogs.com/top5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/top5/archive/2012/02/06/2340103.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/top5/archive/2012/02/06/2340103.html"/><content type="html">&lt;div&gt;&lt;div&gt;一般默认Microphone的声音频率是8kHz ，如果调节更好的声音品质，就需要使用setRate方法，如：&amp;nbsp;&lt;/div&gt;&lt;div&gt;myMic.setRate(userRate);&amp;nbsp;&lt;/div&gt;&lt;div&gt;//其中userRate的可能值有： 5, 8, 11, 22或 44。&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/top5/aggbug/2340103.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/top5/archive/2012/02/06/2340103.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/top5/archive/2012/02/06/2340097.html</id><title type="text">在FlashCom中检测摄像头和麦克风的方法</title><summary type="text">//检查摄像头function CheckForCam() {camArray = Camera.names;if (camArray.length &amp;gt;= 1){temp_cam = Camera.get();if(temp_cam == -1) {trace(&amp;#39;--- cam is detected but its busy&amp;#39;);return -1; }else {trace(&amp;#39;--- cam detected&amp;#39;);return 1; }delete temp_cam;} else if (camArray.length == 0) {trace(&amp;#3</summary><published>2012-02-06T06:29:00Z</published><updated>2012-02-06T06:29:00Z</updated><author><name>与时俱进</name><uri>http://www.cnblogs.com/top5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/top5/archive/2012/02/06/2340097.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/top5/archive/2012/02/06/2340097.html"/><content type="html">&lt;div&gt;&lt;div&gt;//检查摄像头&amp;nbsp;&lt;/div&gt;&lt;div&gt;function CheckForCam() {&amp;nbsp;&lt;/div&gt;&lt;div&gt;camArray = Camera.names;&amp;nbsp;&lt;/div&gt;&lt;div&gt;if (camArray.length &amp;gt;= 1){&amp;nbsp;&lt;/div&gt;&lt;div&gt;temp_cam = Camera.get();&amp;nbsp;&lt;/div&gt;&lt;div&gt;if(temp_cam == -1) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;trace('--- cam is detected but its busy');&amp;nbsp;&lt;/div&gt;&lt;div&gt;return -1; }&amp;nbsp;&lt;/div&gt;&lt;div&gt;else {&amp;nbsp;&lt;/div&gt;&lt;div&gt;trace('--- cam detected');&amp;nbsp;&lt;/div&gt;&lt;div&gt;return 1; }&amp;nbsp;&lt;/div&gt;&lt;div&gt;delete temp_cam;&amp;nbsp;&lt;/div&gt;&lt;div&gt;} else if (camArray.length == 0) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;trace('--- no cam detected');&amp;nbsp;&lt;/div&gt;&lt;div&gt;return 0;&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;// 检查麦克风&amp;nbsp;&lt;/div&gt;&lt;div&gt;function CheckForMic() {&amp;nbsp;&lt;/div&gt;&lt;div&gt;micArray = Microphone.names;;&amp;nbsp;&lt;/div&gt;&lt;div&gt;if (micArray.length &amp;gt;= 1){&amp;nbsp;&lt;/div&gt;&lt;div&gt;temp_mic = Microphone.get();&amp;nbsp;&lt;/div&gt;&lt;div&gt;if(temp_mic == -1) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;trace('--- mic is detected but its busy');&amp;nbsp;&lt;/div&gt;&lt;div&gt;return -1; }&amp;nbsp;&lt;/div&gt;&lt;div&gt;else {&amp;nbsp;&lt;/div&gt;&lt;div&gt;trace('--- mic detected');&amp;nbsp;&lt;/div&gt;&lt;div&gt;return 1; }&amp;nbsp;&lt;/div&gt;&lt;div&gt;delete temp_mic;&amp;nbsp;&lt;/div&gt;&lt;div&gt;} else if (micArray.length == 0) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;trace('--- no Mic detected');&amp;nbsp;&lt;/div&gt;&lt;div&gt;return 0;&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/top5/aggbug/2340097.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/top5/archive/2012/02/06/2340097.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry><entry><id>http://www.cnblogs.com/top5/archive/2012/02/06/2340083.html</id><title type="text">ActionScript 3鼠绘</title><summary type="text">本文用AS3分别描绘了曲线、直线、圆、椭圆和矩形5种绘制方法，希望能给大家带来帮助！（1）：曲线知识点：1、添加鼠标监听事件MouseEvent；2、规定画布大小；3、moveTo和lineTo；4、绘制开始与结束判断。代码：var huabu:Sprite=new Sprite();huabu.graphics.beginFill(0xFFFFFF);huabu.graphics.drawRect(20,20,510,360);huabu.graphics.endFill();addChild(huabu);var _drawing:Boolean;var quxian:Sprite=new</summary><published>2012-02-06T06:23:00Z</published><updated>2012-02-06T06:23:00Z</updated><author><name>与时俱进</name><uri>http://www.cnblogs.com/top5/</uri></author><link rel="alternate" href="http://www.cnblogs.com/top5/archive/2012/02/06/2340083.html"/><link rel="alternate" type="text/html" href="http://www.cnblogs.com/top5/archive/2012/02/06/2340083.html"/><content type="html">&lt;div&gt;&lt;div&gt;本文用AS3分别描绘了曲线、直线、圆、椭圆和矩形5种绘制方法，希望能给大家带来帮助！&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;（1）：曲线&lt;/div&gt;&lt;div&gt;知识点：&lt;/div&gt;&lt;div&gt;1、添加鼠标监听事件MouseEvent；&lt;/div&gt;&lt;div&gt;2、规定画布大小；&lt;/div&gt;&lt;div&gt;3、moveTo和lineTo；&lt;/div&gt;&lt;div&gt;4、绘制开始与结束判断。&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;代码：&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;var huabu:Sprite=new Sprite();&amp;nbsp;&lt;/div&gt;&lt;div&gt;huabu.graphics.beginFill(0xFFFFFF);&amp;nbsp;&lt;/div&gt;&lt;div&gt;huabu.graphics.drawRect(20,20,510,360);&amp;nbsp;&lt;/div&gt;&lt;div&gt;huabu.graphics.endFill();&amp;nbsp;&lt;/div&gt;&lt;div&gt;addChild(huabu);&amp;nbsp;&lt;/div&gt;&lt;div&gt;var _drawing:Boolean;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var quxian:Sprite=new Sprite();&amp;nbsp;&lt;/div&gt;&lt;div&gt;quxian.graphics.lineStyle( 2, 0xFF0000 );&amp;nbsp;&lt;/div&gt;&lt;div&gt;huabu.addChild(quxian);&amp;nbsp;&lt;/div&gt;&lt;div&gt;_drawing = false;&amp;nbsp;&lt;/div&gt;&lt;div&gt;huabu.addEventListener( MouseEvent.MOUSE_DOWN, startDrawing );&amp;nbsp;&lt;/div&gt;&lt;div&gt;huabu.addEventListener( MouseEvent.MOUSE_MOVE,moving);&amp;nbsp;&lt;/div&gt;&lt;div&gt;huabu.addEventListener( MouseEvent.MOUSE_UP, stopDrawing );&amp;nbsp;&lt;/div&gt;&lt;div&gt;stage.addEventListener(MouseEvent.MOUSE_UP,stopDrawing);&amp;nbsp;&lt;/div&gt;&lt;div&gt;function startDrawing( event:MouseEvent ):void {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;quxian.graphics.moveTo( mouseX, mouseY );&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;_drawing = true;&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;function moving( event:MouseEvent ):void {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;if ( _drawing ) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; quxian.graphics.lineTo( mouseX, mouseY );&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;function stopDrawing( event:MouseEvent ):void {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;_drawing = false;&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;（2）：直线&lt;/div&gt;&lt;div&gt;知识点：&lt;/div&gt;&lt;div&gt;1、添加鼠标监听事件MouseEvent；&lt;/div&gt;&lt;div&gt;2、规定画布大小；&lt;/div&gt;&lt;div&gt;3、moveTo和lineTo；&lt;/div&gt;&lt;div&gt;4、绘制开始与结束判断。&lt;/div&gt;&lt;div&gt;难点：&lt;/div&gt;&lt;div&gt;绘制多条直线&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;代码：&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;var huabu:Sprite=new Sprite();&amp;nbsp;&lt;/div&gt;&lt;div&gt;huabu.graphics.beginFill(0xFFFFFF);&amp;nbsp;&lt;/div&gt;&lt;div&gt;huabu.graphics.drawRect(20,20,510,360);&amp;nbsp;&lt;/div&gt;&lt;div&gt;huabu.graphics.endFill();&amp;nbsp;&lt;/div&gt;&lt;div&gt;addChild(huabu);&amp;nbsp;&lt;/div&gt;&lt;div&gt;var _drawing:Boolean=false;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var zhixian:Sprite=new Sprite();&amp;nbsp;&lt;/div&gt;&lt;div&gt;huabu.addChild(zhixian);&amp;nbsp;&lt;/div&gt;&lt;div&gt;var _color:Number=0xFF0000;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var zx:int=1;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var ys_x:Number;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var ys_y:Number;&amp;nbsp;&lt;/div&gt;&lt;div&gt;huabu.addEventListener( MouseEvent.MOUSE_DOWN, startDrawing );&amp;nbsp;&lt;/div&gt;&lt;div&gt;huabu.addEventListener( MouseEvent.MOUSE_MOVE,moving);&amp;nbsp;&lt;/div&gt;&lt;div&gt;huabu.addEventListener( MouseEvent.MOUSE_UP, stopDrawing );&amp;nbsp;&lt;/div&gt;&lt;div&gt;stage.addEventListener( MouseEvent.MOUSE_UP, stopDrawing );&amp;nbsp;&lt;/div&gt;&lt;div&gt;function startDrawing( event:MouseEvent ):void {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;ys_x=mouseX;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;ys_y=mouseY;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;_drawing = true;&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;function moving( event:MouseEvent ):void {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;if (_drawing) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; huabu.removeChild(zhixian);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; zhixian=new Sprite();&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; zhixian.graphics.lineStyle( zx, _color );&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; zhixian.graphics.moveTo(ys_x,ys_y);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; zhixian.graphics.lineTo(mouseX,mouseY);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; huabu.addChild(zhixian);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;function stopDrawing( event:MouseEvent ):void {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;zhixian=new Sprite();&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;huabu.addChild(zhixian);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;//没有以上两句，只能画一条直线&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;_drawing = false;&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;（3）：圆&lt;/div&gt;&lt;div&gt;知识点：&lt;/div&gt;&lt;div&gt;1、添加鼠标监听事件MouseEvent；&lt;/div&gt;&lt;div&gt;2、绘制过程中显示半径（两点间的距离Point.distance(坐标1,坐标2)）；&lt;/div&gt;&lt;div&gt;3、drawCircle、moveTo和lineTo；&lt;/div&gt;&lt;div&gt;4、绘制开始与结束判断。&lt;/div&gt;&lt;div&gt;难点：&lt;/div&gt;&lt;div&gt;绘制多个圆&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;代码：&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;var _drawing:Boolean;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var yuan:Sprite=new Sprite();&amp;nbsp;&lt;/div&gt;&lt;div&gt;addChild(yuan);&amp;nbsp;&lt;/div&gt;&lt;div&gt;var banjing:Sprite=new Sprite();&amp;nbsp;&lt;/div&gt;&lt;div&gt;addChild(banjing);&amp;nbsp;&lt;/div&gt;&lt;div&gt;var yuanxin_x:Number;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var yuanxin_y:Number;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var zuobiao1:Point;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var zuobiao2:Point;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var bj:Number;&amp;nbsp;&lt;/div&gt;&lt;div&gt;_drawing = false;&amp;nbsp;&lt;/div&gt;&lt;div&gt;stage.addEventListener( MouseEvent.MOUSE_DOWN, startDrawing );&amp;nbsp;&lt;/div&gt;&lt;div&gt;stage.addEventListener( MouseEvent.MOUSE_MOVE,yd);&amp;nbsp;&lt;/div&gt;&lt;div&gt;stage.addEventListener( MouseEvent.MOUSE_UP, stopDrawing );&amp;nbsp;&lt;/div&gt;&lt;div&gt;function startDrawing( event:MouseEvent ):void {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;yuanxin_x=mouseX;//鼠标按下的位置就是圆心的位置&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;yuanxin_y=mouseY;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;_drawing = true;&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;function yd( event:MouseEvent ):void {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;if ( _drawing ) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; zuobiao1 = new Point(yuanxin_x,yuanxin_y);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; zuobiao2 = new Point(mouseX, mouseY);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; bj= Point.distance(zuobiao1, zuobiao2);//显示两点之间的距离即为半径&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; removeChild(yuan);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; yuan=new Sprite();&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; yuan.graphics.lineStyle( 2, 0xFF0000 );&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; yuan.graphics.drawCircle(yuanxin_x,yuanxin_y,bj);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; addChild(yuan);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; removeChild(banjing);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; banjing=new Sprite();&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; banjing.graphics.lineStyle(2,0xFF0000,0.5);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; banjing.graphics.moveTo(yuanxin_x,yuanxin_y);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; banjing.graphics.lineTo(mouseX,mouseY);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; addChild(banjing);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;function stopDrawing( event:MouseEvent ):void {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;removeChild(banjing);//绘制结束时半径线消失&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;banjing=new Sprite();//每次画圆过程中都显示半径&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;addChild(banjing);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;yuan=new Sprite();//可绘制多个圆&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;addChild(yuan);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;_drawing = false;&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;（4）：椭圆&lt;/div&gt;&lt;div&gt;知识点：&lt;/div&gt;&lt;div&gt;1、添加鼠标监听事件MouseEvent和键盘监听事件KeyboardEvent；&lt;/div&gt;&lt;div&gt;2、椭圆的宽与高；&lt;/div&gt;&lt;div&gt;3、drawEllipse；&lt;/div&gt;&lt;div&gt;4、绘制开始与结束判断；&lt;/div&gt;&lt;div&gt;5、按下Shift键绘制正圆。&lt;/div&gt;&lt;div&gt;难点：&lt;/div&gt;&lt;div&gt;按下Shift键绘制正圆&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;代码：&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;var _drawing:Boolean=false;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var ellipse:Sprite=new Sprite();&amp;nbsp;&lt;/div&gt;&lt;div&gt;addChild(ellipse);&amp;nbsp;&lt;/div&gt;&lt;div&gt;var kaishi_x:Number;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var kaishi_y:Number;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var w:Number;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var h:Number;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var _max:Number;&amp;nbsp;&lt;/div&gt;&lt;div&gt;stage.addEventListener( MouseEvent.MOUSE_DOWN, startDrawing );&amp;nbsp;&lt;/div&gt;&lt;div&gt;stage.addEventListener( MouseEvent.MOUSE_MOVE,moving);&amp;nbsp;&lt;/div&gt;&lt;div&gt;stage.addEventListener( MouseEvent.MOUSE_UP, stopDrawing );&amp;nbsp;&lt;/div&gt;&lt;div&gt;function startDrawing( event:MouseEvent ):void {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;kaishi_x=mouseX;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;kaishi_y=mouseY;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;_drawing = true;&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;function moving( event:MouseEvent ):void {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;if (_drawing) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; w=mouseX-kaishi_x;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; h=mouseY-kaishi_y;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; removeChild(ellipse);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; ellipse=new Sprite();&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; ellipse.graphics.lineStyle( 2, 0xFF0000 );&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; ellipse.graphics.drawEllipse(kaishi_x,kaishi_y,w,h);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; addChild(ellipse);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;function stopDrawing( event:MouseEvent ):void {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;ellipse=new Sprite();&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;addChild(ellipse);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;_drawing = false;&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;stage.focus=this;&amp;nbsp;&lt;/div&gt;&lt;div&gt;stage.addEventListener(KeyboardEvent.KEY_DOWN, shift);&amp;nbsp;&lt;/div&gt;&lt;div&gt;function shift(event:KeyboardEvent):void {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;if (event.charCode==0) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; if (_drawing) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;w=mouseX-kaishi_x;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;h=mouseY-kaishi_y;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;_max=Math.max(Math.abs(w),Math.abs(h));&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;if (w&amp;lt;0 &amp;amp;&amp;amp; h&amp;lt;0) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; w=-_max;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; h=-_max;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;if (w&amp;gt;0 &amp;amp;&amp;amp; h&amp;gt;0) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; w=_max;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; h=_max;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;if (w&amp;lt;0 &amp;amp;&amp;amp; h&amp;gt;0) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; w=-_max;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; h=_max;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;if (w&amp;gt;0 &amp;amp;&amp;amp; h&amp;lt;0) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; w=_max;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; h=-_max;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;removeChild(ellipse);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;ellipse=new Sprite();&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;ellipse.graphics.lineStyle( 2, 0xFF0000 );&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;ellipse.graphics.drawEllipse(kaishi_x,kaishi_y,w,h);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;addChild(ellipse);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; }&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;div&gt;（5）：矩形&lt;/div&gt;&lt;div&gt;知识点：&lt;/div&gt;&lt;div&gt;1、添加鼠标监听事件MouseEvent和键盘监听事件KeyboardEvent；&lt;/div&gt;&lt;div&gt;2、椭圆的宽与高；&lt;/div&gt;&lt;div&gt;3、drawRect；&lt;/div&gt;&lt;div&gt;4、绘制开始与结束判断；&lt;/div&gt;&lt;div&gt;5、按下Shift键绘制正方形。&lt;/div&gt;&lt;div&gt;难点：&lt;/div&gt;&lt;div&gt;按下Shift键绘制正方形&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;代码：&lt;/div&gt;&lt;div&gt;&lt;/div&gt;&lt;div&gt;var _drawing:Boolean=false;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var _drawrect:Sprite=new Sprite();&amp;nbsp;&lt;/div&gt;&lt;div&gt;addChild(_drawrect);&amp;nbsp;&lt;/div&gt;&lt;div&gt;var yx_x:Number;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var yx_y:Number;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var w:Number;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var h:Number;&amp;nbsp;&lt;/div&gt;&lt;div&gt;var _max:Number;&amp;nbsp;&lt;/div&gt;&lt;div&gt;stage.addEventListener( MouseEvent.MOUSE_DOWN, startDrawing );&amp;nbsp;&lt;/div&gt;&lt;div&gt;stage.addEventListener( MouseEvent.MOUSE_MOVE,moving);&amp;nbsp;&lt;/div&gt;&lt;div&gt;stage.addEventListener( MouseEvent.MOUSE_UP, stopDrawing );&amp;nbsp;&lt;/div&gt;&lt;div&gt;function startDrawing( event:MouseEvent ):void {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;yx_x=mouseX;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;yx_y=mouseY;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;_drawing = true;&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;function moving( event:MouseEvent ):void {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;if (_drawing) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; w=mouseX-yx_x;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; h=mouseY-yx_y;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; removeChild(_drawrect);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; _drawrect=new Sprite();&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; _drawrect.graphics.lineStyle( 2, 0xFF0000 );&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; _drawrect.graphics.drawRect(yx_x,yx_y,w,h);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; addChild(_drawrect);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;function stopDrawing( event:MouseEvent ):void {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;_drawrect=new Sprite();&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;addChild(_drawrect);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;_drawing = false;&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;stage.focus=this;&amp;nbsp;&lt;/div&gt;&lt;div&gt;stage.addEventListener(KeyboardEvent.KEY_DOWN, shift);&amp;nbsp;&lt;/div&gt;&lt;div&gt;function shift(event:KeyboardEvent):void {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;if (event.charCode==0) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; if (_drawing) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;_max=Math.max(Math.abs(w),Math.abs(h));&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;if (w&amp;lt;0 &amp;amp;&amp;amp; h&amp;lt;0) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; w=-_max;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; h=-_max;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;if (w&amp;gt;0 &amp;amp;&amp;amp; h&amp;gt;0) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; w=_max;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; h=_max;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;if (w&amp;lt;0 &amp;amp;&amp;amp; h&amp;gt;0) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; w=-_max;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; h=_max;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;if (w&amp;gt;0 &amp;amp;&amp;amp; h&amp;lt;0) {&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; w=_max;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp; h=-_max;&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;removeChild(_drawrect);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;_drawrect=new Sprite();&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;_drawrect.graphics.lineStyle( 2, 0xFF0000 );&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;_drawrect.graphics.drawRect(yx_x,yx_y,w,h);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; &amp;nbsp;addChild(_drawrect);&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp; }&amp;nbsp;&lt;/div&gt;&lt;div&gt;&amp;nbsp;}&amp;nbsp;&lt;/div&gt;&lt;div&gt;}&lt;/div&gt;&lt;/div&gt;&lt;img src="http://www.cnblogs.com/top5/aggbug/2340083.html?type=1" width="1" height="1" alt=""/&gt;&lt;p&gt;&lt;a href="http://www.cnblogs.com/top5/archive/2012/02/06/2340083.html" target="_blank"&gt;本文链接&lt;/a&gt;&lt;/p&gt;</content></entry></feed>
