<?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>ActionScript 3 Lover &#187; Aw</title>
	<atom:link href="http://as3blog.com/author/admin/feed/" rel="self" type="application/rss+xml" />
	<link>http://as3blog.com</link>
	<description>Focus on ActionScript 3</description>
	<lastBuildDate>Thu, 19 Nov 2009 04:51:08 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.8.6</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>利用Socket解析HTTP头</title>
		<link>http://as3blog.com/as3/get-http-headers-with-actionscript3/</link>
		<comments>http://as3blog.com/as3/get-http-headers-with-actionscript3/#comments</comments>
		<pubDate>Thu, 19 Nov 2009 04:50:32 +0000</pubDate>
		<dc:creator>Aw</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[http header]]></category>
		<category><![CDATA[socket]]></category>

		<guid isPermaLink="false">http://as3blog.com/as3/get-http-headers-with-actionscript3/</guid>
		<description><![CDATA[这个问题我好奇了很久都没有结果，尝试搜索了大量类似“Flash解析HTTP头”、“AS3解析HTTP Header”、&#34;Use AS3 to read/get HTTP Header&#34;的关键词，大多数文章都是讲述如何构造HTTP头（我认为大概是为了用Flash模拟一些类似文件上传的请求来改善用户体验）。但是，利用Flash（AS）解析HTTP头，还真没想到啥好办法。
今天中午终于意识到，这个问题应该用Socket……这真的是一个“意识”的问题，太惭愧了！
当然，过程也稍微复杂一点，先要构造一个请求头，然后解析返回信息。不过可以将这些操作封装成一个类似load的public function出来，日后使用则如同URLLoader那样方便。
授人以鱼不如授人以渔，具体细节我就不赘述了，有兴趣的朋友们可以制作一个给我用，哈哈！
]]></description>
			<content:encoded><![CDATA[<p>这个问题我好奇了很久都没有结果，尝试搜索了大量类似“Flash解析HTTP头”、“AS3解析HTTP Header”、&quot;Use AS3 to read/get HTTP Header&quot;的关键词，大多数文章都是讲述如何构造HTTP头（我认为大概是为了用Flash模拟一些类似文件上传的请求来改善用户体验）。但是，利用Flash（AS）解析HTTP头，还真没想到啥好办法。</p>
<p>今天中午终于意识到，这个问题应该用Socket……这真的是一个“意识”的问题，太惭愧了！</p>
<p>当然，过程也稍微复杂一点，先要构造一个请求头，然后解析返回信息。不过可以将这些操作封装成一个类似load的public function出来，日后使用则如同URLLoader那样方便。</p>
<p>授人以鱼不如授人以渔，具体细节我就不赘述了，有兴趣的朋友们可以制作一个给我用，哈哈！</p>
]]></content:encoded>
			<wfw:commentRss>http://as3blog.com/as3/get-http-headers-with-actionscript3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>已开始盈利项目寻ActionScript3高手合伙人，限北京地区</title>
		<link>http://as3blog.com/uncategorized/%e5%b7%b2%e5%bc%80%e5%a7%8b%e7%9b%88%e5%88%a9%e9%a1%b9%e7%9b%ae%e5%af%bbactionscript3%e9%ab%98%e6%89%8b%e5%90%88%e4%bc%99%e4%ba%ba%ef%bc%8c%e9%99%90%e5%8c%97%e4%ba%ac%e5%9c%b0%e5%8c%ba/</link>
		<comments>http://as3blog.com/uncategorized/%e5%b7%b2%e5%bc%80%e5%a7%8b%e7%9b%88%e5%88%a9%e9%a1%b9%e7%9b%ae%e5%af%bbactionscript3%e9%ab%98%e6%89%8b%e5%90%88%e4%bc%99%e4%ba%ba%ef%bc%8c%e9%99%90%e5%8c%97%e4%ba%ac%e5%9c%b0%e5%8c%ba/#comments</comments>
		<pubDate>Sun, 12 Jul 2009 02:26:29 +0000</pubDate>
		<dc:creator>Aw</dc:creator>
				<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://as3blog.com/?p=95</guid>
		<description><![CDATA[已开始盈利项目寻ActionScript3高手合伙人，限北京地区。有兴趣者可联系我gmail： awflasher AT gmail DOT com
（本消息8月1日失效）
]]></description>
			<content:encoded><![CDATA[<p>已开始盈利项目寻ActionScript3高手合伙人，限北京地区。有兴趣者可联系我gmail： awflasher AT gmail DOT com</p>
<p>（本消息8月1日失效）</p>
]]></content:encoded>
			<wfw:commentRss>http://as3blog.com/uncategorized/%e5%b7%b2%e5%bc%80%e5%a7%8b%e7%9b%88%e5%88%a9%e9%a1%b9%e7%9b%ae%e5%af%bbactionscript3%e9%ab%98%e6%89%8b%e5%90%88%e4%bc%99%e4%ba%ba%ef%bc%8c%e9%99%90%e5%8c%97%e4%ba%ac%e5%9c%b0%e5%8c%ba/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>我认为一个优秀的ActionScript程序员应该具备的特殊技能</title>
		<link>http://as3blog.com/as3/extra-as3-coder-skills/</link>
		<comments>http://as3blog.com/as3/extra-as3-coder-skills/#comments</comments>
		<pubDate>Fri, 29 May 2009 15:01:21 +0000</pubDate>
		<dc:creator>Aw</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[actionscript3]]></category>
		<category><![CDATA[flash]]></category>
		<category><![CDATA[jsfl]]></category>

		<guid isPermaLink="false">http://as3blog.com/as3/extra-as3-coder-skills/</guid>
		<description><![CDATA[除了一些基本的OOP思想之外，我认为一个优秀的ActionScript程序员还应该具备：

JSFL的编写能力 &#8211; 如果要你把300个类元件绑定好相应类文件输出，你难道会一个一个去改Linkage？ 
正则表达式的运用 &#8211; 无论是查代码还是实现功能，正则太重要！ 
支持宏的文本编辑器的使用 &#8211; ActionScript代码的整齐性非常好，这给宏提供了极大的用武之地 
熟练使用Flash Authoring Tool &#8211; 有些事情用Shape画不如用Flash画。 
知道Refactor &#8211; 命名规范不行的开发者更要善用Refactor 
知道Reference &#8211; 知道你的类或者对象都在哪
SVN &#8211; 一个人做项目用SVN也是有必要的。
较好与人沟通的能力 &#8211; AS3和AS1、2不同，讲究合作和谐，而不是单兵作战。

]]></description>
			<content:encoded><![CDATA[<p>除了一些基本的OOP思想之外，我认为一个优秀的ActionScript程序员还应该具备：</p>
<ol>
<li><a title="JSFL" href="http://www.awflasher.com/blog/tag/jsfl" target="_blank">JSFL</a>的编写能力 &#8211; 如果要你把300个类元件绑定好相应类文件输出，你难道会一个一个去改Linkage？ </li>
<li><a title="正则表达式" href="http://www.awflasher.com/blog/archives/1244" target="_blank">正则表达式</a>的运用 &#8211; 无论是查代码还是实现功能，正则太重要！ </li>
<li>支持宏的文本编辑器的使用 &#8211; ActionScript代码的整齐性非常好，这给宏提供了极大的用武之地 </li>
<li>熟练使用Flash Authoring Tool &#8211; 有些事情用Shape画不如用Flash画。 </li>
<li>知道Refactor &#8211; 命名规范不行的开发者更要善用Refactor </li>
<li>知道Reference &#8211; 知道你的类或者对象都在哪</li>
<li>SVN &#8211; 一个人做项目用SVN也是有必要的。</li>
<li>较好与人沟通的能力 &#8211; AS3和AS1、2不同，讲究合作和谐，而不是单兵作战。</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://as3blog.com/as3/extra-as3-coder-skills/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一个用于检测FPS和内存占用的小玩意</title>
		<link>http://as3blog.com/as3/fps-memory-leak-monitor-of-as3/</link>
		<comments>http://as3blog.com/as3/fps-memory-leak-monitor-of-as3/#comments</comments>
		<pubDate>Sun, 12 Apr 2009 13:44:12 +0000</pubDate>
		<dc:creator>Aw</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[debug]]></category>
		<category><![CDATA[fps]]></category>
		<category><![CDATA[memory leak]]></category>

		<guid isPermaLink="false">http://as3blog.com/as3/a-fps-memory-leak-monitor-of-as3/</guid>
		<description><![CDATA[最近为CPU和内存占用的细节努力不少，自己也折腾出了一个检测器，用于实时检测FPS（实际上可以算是检测CPU）和内存占用情况。
使用方法，在application的Document Class（或者Application Class）上构建一个检测器实例（MonitorKit）并addChild即可，所含参数比较简单，不再一一赘述：
var monitor:MonitorKit = new MonitorKit(MonitorKit.MKMODE_T);
addChild(monitor);

效果图如下：
 
MonitorKit类如下：

package com.as3blog.utils{
  import flash.display.Sprite;
  import flash.display.Stage;
  import flash.events.Event;
  import flash.system.System;
  import flash.text.TextField;
  import flash.text.TextFieldAutoSize;
  import flash.text.TextFormat;
  import flash.utils.getTimer;

  public class MonitorKit extends Sprite{
    public static const MKMODE_T:String = &#34;MKMODE_T&#34;;
    public static const MKMODE_B:String [...]]]></description>
			<content:encoded><![CDATA[<p>最近为CPU和内存占用的细节努力不少，自己也折腾出了一个检测器，用于实时检测FPS（实际上可以算是检测CPU）和内存占用情况。</p>
<p>使用方法，在application的Document Class（或者Application Class）上构建一个检测器实例（MonitorKit）并addChild即可，所含参数比较简单，不再一一赘述：</p>
<blockquote><pre>var monitor:MonitorKit = new MonitorKit(MonitorKit.MKMODE_T);
addChild(monitor);</pre>
</blockquote>
<p>效果图如下：</p>
<p><img src="http://pic.yupoo.com/awflasher/180917456579/futqmw43.jpg" /> </p>
<p>MonitorKit类如下：</p>
<blockquote>
<pre>package com.as3blog.utils{
  import flash.display.Sprite;
  import flash.display.Stage;
  import flash.events.Event;
  import flash.system.System;
  import flash.text.TextField;
  import flash.text.TextFieldAutoSize;
  import flash.text.TextFormat;
  import flash.utils.getTimer;

  public class MonitorKit extends Sprite{
    public static const MKMODE_T:String = &quot;MKMODE_T&quot;;
    public static const MKMODE_B:String = &quot;MKMODE_B&quot;;
    public static const MKMODE_L:String = &quot;MKMODE_L&quot;;
    public static const MKMODE_R:String = &quot;MKMODE_R&quot;;
    public static const MKMODE_TL:String = &quot;MKMODE_TL&quot;;
    public static const MKMODE_TR:String = &quot;MKMODE_TR&quot;;
    public static const MKMODE_BL:String = &quot;MKMODE_BL&quot;;
    public static const MKMODE_BR:String = &quot;MKMODE_BR&quot;;

    private static var stageInstance:Stage;

    private var lastTime:uint = getTimer();
    private var frames:Number = 0;
    private var monitorKitTextField:TextField;
    private var mode:String;
    private var textColor:uint;
    private var backgroundColor:uint;
    private var transparent:Boolean;
    public static var delay:Number = 0;
    public function MonitorKit(_mode:String = MKMODE_T,
        _transparent:Boolean = true,
        _textColor:uint=0xffffff,
        _backgroundColor:uint=0x000000) {
      mode = _mode;
      transparent = _transparent;
      textColor = _textColor;
      backgroundColor = _backgroundColor;
      // Initialize it when rendered on the stage.
      addEventListener(Event.ADDED_TO_STAGE, initMonitorHandler);
    }

    private function initMonitorHandler(event:Event):void {
      // Unregister the event handler
      removeEventListener(Event.ADDED_TO_STAGE, initMonitorHandler);
      stageInstance = this.stage;
      monitorKitTextField = new TextField();
      monitorKitTextField.selectable = false;
      monitorKitTextField.background = transparent;
      monitorKitTextField.textColor = textColor;
      monitorKitTextField.backgroundColor = backgroundColor;
      monitorKitTextField.autoSize = TextFieldAutoSize.LEFT;
      var format:TextFormat = new TextFormat();
      format.font = &quot;Courier New&quot;;
      format.size = 15;
      monitorKitTextField.setTextFormat(format);
      monitorKitTextField.defaultTextFormat = format;
      monitorKitTextField.text = &quot;[ Loading... ]&quot;;
      addChild(monitorKitTextField);
      stageInstance.addEventListener(Event.ENTER_FRAME, enterFrameHandler);
    }

    public function enterFrameHandler(evt:Event):void {
      frames++;
      var currentTime:uint = getTimer();
      var deltaTime:uint = currentTime - lastTime;
      var fps:Number = frames / deltaTime * 1000;
      monitorKitTextField.text = &quot;FPS: &quot; + fps.toFixed(1);
      monitorKitTextField.appendText(&quot;\nMem: &quot; + Number(System.totalMemory/1024/1024).toFixed(3)+&quot;(M)&quot;);
      frames = 0;
      lastTime = currentTime;
      // Replace the monitor object
      switch (mode) {
        case MKMODE_T:
          monitorKitTextField.x = stageInstance.stageWidth / 2 - monitorKitTextField.width / 2;
          monitorKitTextField.y = 0;
          break;
        case MKMODE_B:
          monitorKitTextField.x = stageInstance.stageWidth / 2 - monitorKitTextField.width / 2;
          monitorKitTextField.y = stageInstance.stageHeight - monitorKitTextField.height;
          break;
        case MKMODE_L:
          monitorKitTextField.x = 0;
          monitorKitTextField.y = stageInstance.stageHeight / 2 - monitorKitTextField.height / 2;
          break;
        case MKMODE_R:
          monitorKitTextField.x = stageInstance.stageWidth - monitorKitTextField.width;
          monitorKitTextField.y = stageInstance.stageHeight / 2 - monitorKitTextField.height / 2;
          break;
        case MKMODE_TL:
          monitorKitTextField.x = 0;
          monitorKitTextField.y = 0;
          break;
        case MKMODE_TR:
          monitorKitTextField.x = stageInstance.stageWidth - monitorKitTextField.width;
          monitorKitTextField.y = 0;
          break;
        case MKMODE_BL:
          monitorKitTextField.x = 0;
          monitorKitTextField.y = stageInstance.stageHeight - monitorKitTextField.height;
          break;
        case MKMODE_BR:
          monitorKitTextField.x = stageInstance.stageWidth - monitorKitTextField.width;
          monitorKitTextField.y = stageInstance.stageHeight - monitorKitTextField.height;
          break;
        default:
        break;
      }
    }
  }
}</pre>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://as3blog.com/as3/fps-memory-leak-monitor-of-as3/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>建立了一个关于AS3的Google Group，欢迎GMail用户加入</title>
		<link>http://as3blog.com/as3/as3-google-group-in-chinese/</link>
		<comments>http://as3blog.com/as3/as3-google-group-in-chinese/#comments</comments>
		<pubDate>Wed, 01 Apr 2009 02:18:45 +0000</pubDate>
		<dc:creator>Aw</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Resources]]></category>
		<category><![CDATA[google group]]></category>

		<guid isPermaLink="false">http://as3blog.com/as3/as3-google-group-in-chinese/</guid>
		<description><![CDATA[Google Group配合GMail可以十分方便、高效地讨论技术问题，为此，建立了一个AS3的邮件组交流技术问题。欢迎喜欢使用GMail的朋友们加入。
web地址：
http://groups.google.com/group/as3-discussion

邮件列表地址：
as3-discussion@googlegroups.com

需要加入者请联系这个邮箱，目前需要邀请才可以加入：
awflasher+urgent.as3@gmail.com

]]></description>
			<content:encoded><![CDATA[<p>Google Group配合GMail可以十分方便、高效地讨论技术问题，为此，建立了一个AS3的邮件组交流技术问题。欢迎喜欢使用GMail的朋友们加入。</p>
<p>web地址：</p>
<blockquote><p><a href="http://groups.google.com/group/as3-discussion">http://groups.google.com/group/<b>as3-discussion</b></a></p>
</blockquote>
<p>邮件列表地址：</p>
<blockquote><p><a href="mailto:as3-discussion@googlegroups.com"><b>as3-discussion</b>@googlegroups.com</a></p>
</blockquote>
<p>需要加入者请联系这个邮箱，目前需要邀请才可以加入：</p>
<blockquote><p><a href="mailto:awflasher+urgent.as3@gmail.com">awflasher+urgent.as3@gmail.com</a></p>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://as3blog.com/as3/as3-google-group-in-chinese/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Adobe携手Facebook推出官方AS3库</title>
		<link>http://as3blog.com/news/adobe-facebook-as3-client-api-library/</link>
		<comments>http://as3blog.com/news/adobe-facebook-as3-client-api-library/#comments</comments>
		<pubDate>Tue, 31 Mar 2009 10:37:05 +0000</pubDate>
		<dc:creator>Aw</dc:creator>
				<category><![CDATA[News]]></category>
		<category><![CDATA[api]]></category>
		<category><![CDATA[facebook]]></category>
		<category><![CDATA[library]]></category>

		<guid isPermaLink="false">http://as3blog.com/news/adobe-facebook-as3-client-api-library/</guid>
		<description><![CDATA[http://code.google.com/p/facebook-actionscript-api/
消息来自7yue。
我看了一下，这个库最初由Jason Crist创立，之后Adobe参与联手开发。直接看看源码，很靠谱。
]]></description>
			<content:encoded><![CDATA[<p><a href="http://code.google.com/p/facebook-actionscript-api/">http://code.google.com/p/facebook-actionscript-api/</a></p>
<p>消息来自<a href="http://7yue.com">7yue</a>。</p>
<p>我看了一下，这个库最初由<a href="http://pbking.com/">Jason Crist</a>创立，之后Adobe参与联手开发。直接看看<a href="http://code.google.com/p/facebook-actionscript-api/source/browse/">源码</a>，很靠谱。</p>
]]></content:encoded>
			<wfw:commentRss>http://as3blog.com/news/adobe-facebook-as3-client-api-library/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>一些结论，松散地记录一下</title>
		<link>http://as3blog.com/as3/flashplayer9-memory-leak-betterin-flashplayer10/</link>
		<comments>http://as3blog.com/as3/flashplayer9-memory-leak-betterin-flashplayer10/#comments</comments>
		<pubDate>Wed, 11 Mar 2009 09:02:11 +0000</pubDate>
		<dc:creator>Aw</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[flashplayer]]></category>
		<category><![CDATA[flashplayer9]]></category>
		<category><![CDATA[garbage collection]]></category>
		<category><![CDATA[memory leak]]></category>

		<guid isPermaLink="false">http://as3blog.com/as3/flashplayer9-memory-leak-betterin-flashplayer10/</guid>
		<description><![CDATA[
FlashPlayer9内存管理方面比如FlashPlayer10好，尤其是在一些cacheAsBitmap属性为true的复杂图形进行一定幅度的缩放时（即重绘区域足够大） 
FlashPlayer10在性能和内存管理方面均优于FlashPlayer9 
对于大量复杂的矢量动画，可以采用动态切换stage.quailty的做法让性能缓解（节约CPU占用） 
看到我这篇博客的读者，如果你认识我一段时间（并认为彼此性格相符）并有兴趣与我合作一个项目，可以看看这篇文章；

]]></description>
			<content:encoded><![CDATA[<ul>
<li>FlashPlayer9内存管理方面比如FlashPlayer10好，尤其是在一些cacheAsBitmap属性为true的复杂图形进行一定幅度的缩放时（即重绘区域足够大） </li>
<li>FlashPlayer10在性能和内存管理方面均优于FlashPlayer9 </li>
<li>对于大量复杂的矢量动画，可以采用动态切换stage.quailty的做法让性能缓解（节约CPU占用） </li>
<li>看到我这篇博客的读者，如果你认识我一段时间（并认为彼此性格相符）并有兴趣与我合作一个项目，可以看看<a title="Looking for Flash Developers" href="http://www.awflasher.com/blog/archives/1712">这篇文章</a>；</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://as3blog.com/as3/flashplayer9-memory-leak-betterin-flashplayer10/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>闲话Flash中对小数坐标处理的问题</title>
		<link>http://as3blog.com/as3/fix-decimal-fraction-position-in-actionscript/</link>
		<comments>http://as3blog.com/as3/fix-decimal-fraction-position-in-actionscript/#comments</comments>
		<pubDate>Sat, 14 Feb 2009 04:28:41 +0000</pubDate>
		<dc:creator>Aw</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[Decimal Fraction]]></category>
		<category><![CDATA[position]]></category>

		<guid isPermaLink="false">http://as3blog.com/as3/fix-decimal-fraction-position-in-actionscript/</guid>
		<description><![CDATA[Update: 具体项目中，其实可以用扩展Sprite类并建立setter和getter来实现，不再赘述了。
一个头痛了几天的bug终于fixed……我真的是太迟钝了。
最近，遇到这样一个案例，需要以非常缓慢的速度移动某几个物体，而且，这些物体之间还会发生“无损弹性碰撞”（修正主义万恶的高中课本翻译的是“完全弹性碰撞”，我个人觉得Perfect Collision应该为“无损”更易理解吧？）
总之，这些物体的速度（即位移增量）可能灰常灰常小。小到什么程度呢？这么说吧，由于所有的值都是根据动量守恒定律和能量守恒定律（还记得这俩公式的同学你们可以去解放美帝国主义了）算出来的，因为难免出现某一个物体从某一个角度撞击另一个物体之后，两者中某一物体的某一方向（x或者y）上的速度被“中和”掉了。
刚才提到，在计算机语言中，速度即位移增量。ActoinScript的写法则是：

fuckCERNET.x += fuckCERNET.vx; //fuckCERNET is an instance of some dynamic class

当fuckCERNET.vx &#60; 1/20时，Flash则不再渲染。这是根据FlashPlayer万恶的内部机制来实现的。根据我和一些美帝国主义的Flasher讨论，发现，FlashPlayer对物体x、y属性是有保护的：

Implementation
  public function get x():Number
  public function set x(value:Number):void

为什么要有这个保护呢，也不难理解：肯定是因为你直接让一个物体移动到0.001的位置上后计算机（FlashPlayer）不知道怎么去显示它：计算机是根据像素组成的，例如我们通常所说的1024&#215;768：即便你的影片再高清再无码，你放到80&#215;60的显示器上还是只能显示4800个点。
虽然“万恶”，但不得不承认FlashPlayer很聪明地回避了这样的问题，甚至，很优雅地通过一个setter来解决了问题，我们可以想象这个setter可能会是：

public function set x(value:Number):void {
  if (value &#60; 0.05) value = 0;
  // blah .. blah
}

好的，知道这个之后，就好办了。每次速度改变（即碰撞的时候）做一次“最低值判断”：当速度标量（即不考虑方向）不为0（实际上这种情况很小）但小于0.05时，让速度等于0.05就好，可以用我写的这个函数来修正：

private function fixDecimalFractionPosition(value:Number):Number {
  if (Math.abs(value) &#60; .05) {
    return [...]]]></description>
			<content:encoded><![CDATA[<p>Update: 具体项目中，其实可以用扩展Sprite类并建立setter和getter来实现，不再赘述了。</p>
<p>一个头痛了几天的bug终于fixed……我真的是太迟钝了。</p>
<p>最近，遇到这样一个案例，需要以非常缓慢的速度移动某几个物体，而且，这些物体之间还会发生“无损弹性碰撞”（修正主义万恶的高中课本翻译的是“完全弹性碰撞”，我个人觉得Perfect Collision应该为“无损”更易理解吧？）</p>
<p>总之，这些物体的速度（即位移增量）可能灰常灰常小。小到什么程度呢？这么说吧，由于所有的值都是根据动量守恒定律和能量守恒定律（还记得这俩公式的同学你们可以去解放美帝国主义了）算出来的，因为难免出现某一个物体从某一个角度撞击另一个物体之后，两者中某一物体的某一方向（x或者y）上的速度被“中和”掉了。</p>
<p>刚才提到，在计算机语言中，速度即位移增量。ActoinScript的写法则是：</p>
<blockquote>
<pre>fuckCERNET.x += fuckCERNET.vx; //fuckCERNET is an instance of some dynamic class</pre>
</blockquote>
<p>当fuckCERNET.vx &lt; 1/20时，Flash则不再渲染。这是根据FlashPlayer万恶的内部机制来实现的。根据我和一些美帝国主义的Flasher讨论，发现，FlashPlayer对物体x、y属性是有保护的：</p>
<blockquote>
<pre>Implementation
  public function get x():Number
  public function set x(value:Number):void</pre>
</blockquote>
<p>为什么要有这个保护呢，也不难理解：肯定是因为你直接让一个物体移动到0.001的位置上后计算机（FlashPlayer）不知道怎么去显示它：计算机是根据像素组成的，例如我们通常所说的1024&#215;768：即便你的影片再高清再无码，你放到80&#215;60的显示器上还是只能显示4800个点。</p>
<p>虽然“万恶”，但不得不承认FlashPlayer很聪明地回避了这样的问题，甚至，很优雅地通过一个setter来解决了问题，我们可以想象这个setter可能会是：</p>
<blockquote>
<pre>public function set x(value:Number):void {
  if (value &lt; 0.05) value = 0;
  // blah .. blah
}</pre>
</blockquote>
<p>好的，知道这个之后，就好办了。每次速度改变（即碰撞的时候）做一次“最低值判断”：当速度标量（即不考虑方向）不为0（实际上这种情况很小）但小于0.05时，让速度等于0.05就好，可以用我写的这个函数来修正：</p>
<blockquote>
<pre>private function fixDecimalFractionPosition(value:Number):Number {
  if (Math.abs(value) &lt; .05) {
    return (value &gt; 0) ? .05 : -.05;
  }
  return value;
}</pre>
</blockquote>
]]></content:encoded>
			<wfw:commentRss>http://as3blog.com/as3/fix-decimal-fraction-position-in-actionscript/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>什么时候该用cacheAsBitmap，什么时候不该用</title>
		<link>http://as3blog.com/as3/when-and-how-to-use-cacheasbitmap/</link>
		<comments>http://as3blog.com/as3/when-and-how-to-use-cacheasbitmap/#comments</comments>
		<pubDate>Fri, 13 Feb 2009 07:25:07 +0000</pubDate>
		<dc:creator>Aw</dc:creator>
				<category><![CDATA[ActionScript3]]></category>
		<category><![CDATA[cacheasbitmap]]></category>

		<guid isPermaLink="false">http://as3blog.com/as3/when-and-how-to-use-cacheasbitmap/</guid>
		<description><![CDATA[根据官方的说明，结合我自己的经验，分享一下：
该用cacheAsBitmap的时候：

在一个复杂的矢量化背景图片上存在大量动画；
滚动文本区域；
基于窗口的应用（你经常会拖拽整块区域）
透明遮罩（必须强制使用，否则失效）

不应该用cacheAsBitmap的时候：

不要滥用，cacheAsBitamp十分消耗内存，一块250&#215;250像素的矩形进行cache之后可能占掉250kb的内存！
目标元素缩放的时候不要使用。
目标元素本身最好是静态的，或者不要经常发生翻转、缩放这样的动画
不要把矢量图和cache的位图一起混用。

]]></description>
			<content:encoded><![CDATA[<p>根据官方的说明，结合我自己的经验，分享一下：</p>
<p>该用cacheAsBitmap的时候：</p>
<ol>
<li>在一个复杂的矢量化背景图片上存在大量动画；</li>
<li>滚动文本区域；</li>
<li>基于窗口的应用（你经常会拖拽整块区域）</li>
<li>透明遮罩（必须强制使用，否则失效）</li>
</ol>
<p>不应该用cacheAsBitmap的时候：</p>
<ol>
<li>不要滥用，cacheAsBitamp十分消耗内存，一块250&#215;250像素的矩形进行cache之后可能占掉250kb的内存！</li>
<li>目标元素缩放的时候不要使用。</li>
<li>目标元素本身最好是静态的，或者不要经常发生翻转、缩放这样的动画</li>
<li>不要把矢量图和cache的位图一起混用。</li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://as3blog.com/as3/when-and-how-to-use-cacheasbitmap/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Flex Builder编译错误An internal build error has occurred的解决方法</title>
		<link>http://as3blog.com/resources/an-internal-build-error-has-occurred-solution/</link>
		<comments>http://as3blog.com/resources/an-internal-build-error-has-occurred-solution/#comments</comments>
		<pubDate>Wed, 11 Feb 2009 07:38:46 +0000</pubDate>
		<dc:creator>Aw</dc:creator>
				<category><![CDATA[Resources]]></category>
		<category><![CDATA[flex]]></category>
		<category><![CDATA[internal build error]]></category>

		<guid isPermaLink="false">http://as3blog.com/resources/an-internal-build-error-has-occurred-solution/</guid>
		<description><![CDATA[在Flex Builder调试ActoinScript项目时，偶尔会出现这种奇怪错误。原因主要是快速编译造成的：
Severity and Description&#160;&#160;&#160; Path&#160;&#160;&#160; Resource&#160;&#160;&#160; Location&#160;&#160;&#160; Creation Time&#160;&#160;&#160; Id      An internal build error has occurred. Right-click for more information.&#160;&#160;&#160;&#160;&#160;&#160;&#160; ****** Unknown

解决方法很简单，按如下步骤：
Help &#62; Product Details. 点击 Configuration Details 按钮, 点击 View Error Log 按钮.
一般地，我们会找到这样的错误：
java.io.FileNotFoundException: D:\projects\google\MyProject.swf (The process cannot access the file because it is being used by another process)
at java.io.FileOutputStream.open(Native [...]]]></description>
			<content:encoded><![CDATA[<p>在Flex Builder调试ActoinScript项目时，偶尔会出现这种奇怪错误。原因主要是快速编译造成的：</p>
<blockquote><p>Severity and Description&#160;&#160;&#160; Path&#160;&#160;&#160; Resource&#160;&#160;&#160; Location&#160;&#160;&#160; Creation Time&#160;&#160;&#160; Id      <br />An internal build error has occurred. Right-click for more information.&#160;&#160;&#160;&#160;&#160;&#160;&#160; ****** Unknown</p>
</blockquote>
<p>解决方法很简单，按如下步骤：</p>
<p>Help &gt; Product Details. 点击 Configuration Details 按钮, 点击 View Error Log 按钮.</p>
<p>一般地，我们会找到这样的错误：</p>
<blockquote style="color: #aaa"><p>java.io.FileNotFoundException: <strong style="color: #000"><u>D:\projects\google\MyProject.swf</u></strong> (The process cannot access the file because it is being used by another process)</p>
<p>at java.io.FileOutputStream.open(Native Method)      <br />at java.io.FileOutputStream.&lt;init&gt;(Unknown Source)       <br />at java.io.FileOutputStream.&lt;init&gt;(Unknown Source)       <br />at com.adobe.flexbuilder.multisdk.compiler.internal.ASApplicationBuilder$MyBuilder.mybuild(ASApplicationBuilder.java:282)       <br />at com.adobe.flexbuilder.multisdk.compiler.internal.ASApplicationBuilder.build(ASApplicationBuilder.java:122)       <br />at com.adobe.flexbuilder.multisdk.compiler.internal.ASBuilder.build(ASBuilder.java:139)       <br />at com.adobe.flexbuilder.multisdk.compiler.internal.ASItemBuilder.build(ASItemBuilder.java:73)       <br />at com.adobe.flexbuilder.project.compiler.internal.FlexProjectBuilder.buildItem(Unknown Source)       <br />at com.adobe.flexbuilder.project.compiler.internal.FlexProjectBuilder.build(Unknown Source)       <br />at com.adobe.flexbuilder.project.compiler.internal.FlexIncrementalBuilder.build(Unknown Source)       <br />at org.eclipse.core.internal.events.BuildManager$2.run(BuildManager.java:624)       <br />at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)       <br />at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:166)       <br />at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:197)       <br />at org.eclipse.core.internal.events.BuildManager$1.run(BuildManager.java:246)       <br />at org.eclipse.core.runtime.SafeRunner.run(SafeRunner.java:37)       <br />at org.eclipse.core.internal.events.BuildManager.basicBuild(BuildManager.java:249)       <br />at org.eclipse.core.internal.events.BuildManager.basicBuildLoop(BuildManager.java:302)       <br />at org.eclipse.core.internal.events.BuildManager.build(BuildManager.java:334)       <br />at org.eclipse.core.internal.events.AutoBuildJob.doBuild(AutoBuildJob.java:137)       <br />at org.eclipse.core.internal.events.AutoBuildJob.run(AutoBuildJob.java:235)       <br />at org.eclipse.core.internal.jobs.Worker.run(Worker.java:55)</p>
</blockquote>
<p>原因就是表黑的那个文件被FlashPlayer.exe进程打开但没有关闭，因此Flex编译好的新文件无法覆盖这个文件。解决方法非常容易，打开Taskmgr，找到FlashPlayer.exe干掉就好了：）</p>
]]></content:encoded>
			<wfw:commentRss>http://as3blog.com/resources/an-internal-build-error-has-occurred-solution/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

