<?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>zrong&#039;s Blog</title>
	<atom:link href="http://zengrong.net/feed" rel="self" type="application/rss+xml" />
	<link>http://zengrong.net</link>
	<description>Flash、Flex、RIA、web、Linux和我的生活</description>
	<lastBuildDate>Fri, 03 Feb 2012 02:16:50 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.2</generator>
		<item>
		<title>Signals框架介绍（三）原生事件</title>
		<link>http://zengrong.net/post/1510.htm</link>
		<comments>http://zengrong.net/post/1510.htm#comments</comments>
		<pubDate>Mon, 23 Jan 2012 15:16:15 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[设计模式]]></category>

		<guid isPermaLink="false">http://zengrong.net/?p=1510</guid>
		<description><![CDATA[注意：本文参考An introduction to AS3 Signals写成，但不是翻译，有增删改。 第一部分：Signals框架介绍（一）基本用法 第二部分：Signals框架介绍（二）高级事件 原生事件 为了达到替换AS3事件机制的目的，Signals当然包含了对AS3原生事件的支持。这依赖于NativeSignal类。 下面的范例演示了如何在Stage上添加单击事件。由于一看就懂，这里就不废话解释了。 [NativeSignalSample.as] ?Download NativeSignalSample.as1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 &#8230;<p class="read-more"><a href="http://zengrong.net/post/1510.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>注意：本文参考<a href="http://www.developria.com/2010/10/an-introduction-to-as3-signals.html">An introduction to AS3 Signals</a>写成，但不是翻译，有增删改。</p>
<ul>
<li>第一部分：<a href="http://zengrong.net/post/1504.htm">Signals框架介绍（一）基本用法</a></li>
<li>第二部分：<a href="http://zengrong.net/post/1507.htm">Signals框架介绍（二）高级事件</a></li>
</ul>
<hr />
<h3>原生事件</h3>
<p>为了达到替换AS3事件机制的目的，Signals当然包含了对AS3原生事件的支持。这依赖于NativeSignal类。</p>
<p>下面的范例演示了如何在Stage上添加单击事件。由于一看就懂，这里就不废话解释了。</p>
<p><strong>[NativeSignalSample.as]</strong></p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://zengrong.net/wp-content/plugins/wp-codebox/wp-codebox.php?p=1510&amp;download=NativeSignalSample.as">NativeSignalSample.as</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p15102"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
</pre></td><td class="code" id="p1510code2"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;
<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">events</span>.<span style="color: #006600;">MouseEvent</span>;
<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">osflash</span>.<span style="color: #006600;">signals</span>.<span style="color: #006600;">natives</span>.<span style="color: #006600;">NativeSignal</span>;
&nbsp;
<span style="color: #66cc66;">&#91;</span>SWF<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">width</span>=<span style="color: #cc66cc;">500</span>,<span style="color: #0066CC;">height</span>=<span style="color: #cc66cc;">300</span>,frameRate=<span style="color: #cc66cc;">30</span>,<span style="color: #0066CC;">backgroundColor</span>=0xFFFFFF<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
<span style="color: #808080; font-style: italic;">/**
 * 测试原生事件
 * @author zrong(zengrong.net)
 */</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> NativeSignalSample <span style="color: #0066CC;">extends</span> Sprite 
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> NativeSignalSample<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        _click = <span style="color: #000000; font-weight: bold;">new</span> NativeSignal<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>.<span style="color: #0066CC;">stage</span>, MouseEvent.<span style="color: #006600;">CLICK</span>, MouseEvent<span style="color: #66cc66;">&#41;</span>;
        _click.<span style="color: #0066CC;">add</span><span style="color: #66cc66;">&#40;</span>handler_click<span style="color: #66cc66;">&#41;</span>;
        <span style="color: #808080; font-style: italic;">//测试只发生一次的点击事件</span>
        <span style="color: #808080; font-style: italic;">//_click.addOnce(handler_click);</span>
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _click:NativeSignal;
&nbsp;
    <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> handler_click<span style="color: #66cc66;">&#40;</span>$evt:MouseEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'currentTarget：'</span>,$evt.<span style="color: #006600;">currentTarget</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'target：'</span>,$evt.<span style="color: #0066CC;">target</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<h3>其它资料</h3>
<ul>
<li><a href="http://www.developria.com/2010/10/an-introduction-to-as3-signals.html">An introduction to AS3 Signals</a>（本文的参考）</li>
<li><a href="http://johnlindquist.com/2010/01/21/as3-signals-tutorial/">AS3 Signals Tutorial</a>（一个非常棒的视频教程）</li>
<li><a href="https://github.com/robertpenner/as3-signals/wiki/community-examples">更多的文章，与其它框架(PureMVC,Robotlegs,Flex)的连用</a></li>
<li>Signals的作者关于AS3事件机制的3篇吐槽文 <a href="http://robertpenner.com/flashblog/2009/08/my-critique-of-as3-events-part-1.html">之一</a>,<a href="http://robertpenner.com/flashblog/2009/09/my-critique-of-as3-events-part-2.html">之二</a>,<a href="http://robertpenner.com/flashblog/2009/09/as3-events-7-things-ive-learned-from.html">之三</a></li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/1510.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Signals框架介绍（二）高级事件</title>
		<link>http://zengrong.net/post/1507.htm</link>
		<comments>http://zengrong.net/post/1507.htm#comments</comments>
		<pubDate>Mon, 23 Jan 2012 14:28:32 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[设计模式]]></category>

		<guid isPermaLink="false">http://zengrong.net/?p=1507</guid>
		<description><![CDATA[注意：本文参考An introduction to AS3 Signals写成，但不是翻译，有增删改。 第一部分：Signals框架介绍（一）基本用法 第三部分：Signals框架介绍（三）原生事件 也许你现在又想起了AS3内置事件框架的好处，希望使用currentTarget？或者希望支持冒泡？OK，Signals也能满足你那多变的心……（貌似是我自己多变罢了ˇ^ˇ） 高级事件 使用DeluxeSignal可以实现更高级的事件传递。还是基于闹钟的例子进行修改，将原来AlarmClock中的Signal改为DeluxSignal： [AlarmClock.as] ?View Code ACTIONSCRIPTpublic function AlarmClock&#40;&#41; &#123; //将自己作为引用传递给DeluxeSignal，同时增加GenericEvent的传递 alarm = new DeluxeSignal&#40;this, GenericEvent, Date&#41;; &#125; &#160; public var alarm:DeluxeSignal; &#160; public function ring&#40;&#41;:void &#123; alarm.dispatch&#40;new GenericEvent&#40;&#41;, new Date&#40;&#41;&#41;; &#125; 修改Wakeup.as中的处理器函数，让它能够接受到传递的2个参数。 &#8230;<p class="read-more"><a href="http://zengrong.net/post/1507.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>注意：本文参考<a href="http://www.developria.com/2010/10/an-introduction-to-as3-signals.html">An introduction to AS3 Signals</a>写成，但不是翻译，有增删改。</p>
<ul>
<li>第一部分：<a href="http://zengrong.net/post/1504.htm">Signals框架介绍（一）基本用法</a></li>
<li>第三部分：<a href="http://zengrong.net/post/1510.htm">Signals框架介绍（三）原生事件</a></li>
</ul>
<hr />
<p>也许你现在又想起了AS3内置事件框架的好处，希望使用currentTarget？或者希望支持冒泡？OK，Signals也能满足你那多变的心……（貌似是我自己多变罢了ˇ^ˇ）</p>
<h3>高级事件</h3>
<p>使用DeluxeSignal可以实现更高级的事件传递。还是基于闹钟的例子进行修改，将原来AlarmClock中的Signal改为DeluxSignal：<span id="more-1507"></span></p>
<p>[AlarmClock.as]</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1507code9'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p15079"><td class="code" id="p1507code9"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> AlarmClock<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #808080; font-style: italic;">//将自己作为引用传递给DeluxeSignal，同时增加GenericEvent的传递</span>
    alarm = <span style="color: #000000; font-weight: bold;">new</span> DeluxeSignal<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, GenericEvent, <span style="color: #0066CC;">Date</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> alarm:DeluxeSignal;
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> ring<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
    alarm.<span style="color: #006600;">dispatch</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> GenericEvent<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Date</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>修改Wakeup.as中的处理器函数，让它能够接受到传递的2个参数。</p>
<p>[Wakeup.as]</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1507code10'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150710"><td class="code" id="p1507code10"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> handler_ring<span style="color: #66cc66;">&#40;</span>$evt:GenericEvent, $date:<span style="color: #0066CC;">Date</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'currentTarget：'</span>,$evt.<span style="color: #006600;">currentTarget</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'target：'</span>,$evt.<span style="color: #0066CC;">target</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'signal：'</span>,$evt.<span style="color: #006600;">signal</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'起床了！！！也不看看几点了：'</span>+$date.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>在这里出现的GenericEvent，并非继承自flash.events.Event，而是实现了Signals自己的IEvent接口，与AS3的事件机制毫无关系。取一个貌似兄弟的名称，是为了方便大家理解罢了。它所提供的currentTarget和target属性，也是由IEvent自身提供。</p>
<p>运行修改后的例子，可以看到如下输出：</p>
<blockquote>
<p>[trace] currentTarget： [object AlarmClock]<br />
  [trace] target： [object AlarmClock]<br />
  [trace] signal： [object DeluxeSignal]<br />
  [trace] 起床了！！！也不看看几点了：Mon Jan 23 17:07:16 GMT+0800 2012</p>
</blockquote>
<p>现在，是不是可以对currentTarget“为所欲为”了呢？</p>
<h3>冒泡事件</h3>
<p>Signals一样可以冒泡，而且并不依赖AS3自带的事件机制。当然，发送和接收冒泡事件的对象必须处于显示列表中。</p>
<p>为了让AlarmClock能够被加入显示列表，我们让AlarmClock继承Sprite。而抛出冒泡事件就非常简单，只需要在实例化GenericEvent的同时传递true参数即可。看看AlarmClock类被修改的部分吧：</p>
<p>[AlarmClock.as]</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1507code11'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150711"><td class="code" id="p1507code11"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> AlarmClock <span style="color: #0066CC;">extends</span> Sprite
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> ring<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
    <span style="color: #66cc66;">&#123;</span>
        alarm.<span style="color: #006600;">dispatch</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> GenericEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Date</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>接收事件的类，必须实现IBubbleEventHandler接口，在onEventBubbled中处理冒泡事件。同时，要将&#92;_alarm实例加入显示列表。</p>
<p>为了方便查看冒泡效果，可以将addOnce所在的一行注释掉，只接收冒泡事件。</p>
<p>[Wakeup.as]</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1507code12'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150712"><td class="code" id="p1507code12"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Wakeup <span style="color: #0066CC;">extends</span> Sprite <span style="color: #0066CC;">implements</span> IBubbleEventHandler
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Wakeup<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        _alarm  = <span style="color: #000000; font-weight: bold;">new</span> AlarmClock<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
        addChild<span style="color: #66cc66;">&#40;</span>_alarm<span style="color: #66cc66;">&#41;</span>;
        <span style="color: #808080; font-style: italic;">//_alarm.alarm.addOnce(handler_ring);</span>
        _alarm.<span style="color: #006600;">ring</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> onEventBubbled<span style="color: #66cc66;">&#40;</span>$evt:IEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Boolean</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'冒泡 currentTarget：'</span>,$evt.<span style="color: #006600;">currentTarget</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'冒泡 target：'</span>,$evt.<span style="color: #0066CC;">target</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'冒泡 signal：'</span>,$evt.<span style="color: #006600;">signal</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #808080; font-style: italic;">//返回false代表不再继续冒泡</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">false</span>;
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>运行修改后的例子，可以看到如下输出：</p>
<blockquote>
<p>[trace] 冒泡 currentTarget： [object Wakeup]<br />
  [trace] 冒泡 target： [object AlarmClock]<br />
  [trace] 冒泡 signal： [object DeluxeSignal]</p>
</blockquote>
<h3>完整的类</h3>
<p><strong>[AlarmClock.as]</strong></p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://zengrong.net/wp-content/plugins/wp-codebox/wp-codebox.php?p=1507&amp;download=AlarmClock.as">AlarmClock.as</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150713"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
</pre></td><td class="code" id="p1507code13"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;
<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">osflash</span>.<span style="color: #006600;">signals</span>.<span style="color: #006600;">Signal</span>;
<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">osflash</span>.<span style="color: #006600;">signals</span>.<span style="color: #006600;">DeluxeSignal</span>;
<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">osflash</span>.<span style="color: #006600;">signals</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">GenericEvent</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">/**
* Signals闹钟范例
* @author Aiden Tailor(http://www.developria.com/2010/10/an-introduction-to-as3-signals.html)
* @author zrong(zengrong.net)
*/</span>
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> AlarmClock <span style="color: #0066CC;">extends</span> Sprite
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> AlarmClock<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        alarm = <span style="color: #000000; font-weight: bold;">new</span> DeluxeSignal<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">this</span>, GenericEvent, <span style="color: #0066CC;">Date</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> alarm:DeluxeSignal;
&nbsp;
    <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> ring<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #808080; font-style: italic;">//使用冒泡的方式发布闹钟的响铃事件</span>
        alarm.<span style="color: #006600;">dispatch</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> GenericEvent<span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">true</span><span style="color: #66cc66;">&#41;</span>, <span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Date</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p><strong>[Wakeup.as]</strong></p>

<div class="wp_codebox_msgheader wp_codebox_hide"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left2">Download <a href="http://zengrong.net/wp-content/plugins/wp-codebox/wp-codebox.php?p=1507&amp;download=Wakeup.as">Wakeup.as</a></span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150714"><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
</pre></td><td class="code" id="p1507code14"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;
<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">osflash</span>.<span style="color: #006600;">signals</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">GenericEvent</span>;
<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">osflash</span>.<span style="color: #006600;">signals</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">IBubbleEventHandler</span>;
<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">osflash</span>.<span style="color: #006600;">signals</span>.<span style="color: #006600;">events</span>.<span style="color: #006600;">IEvent</span>;
&nbsp;
<span style="color: #66cc66;">&#91;</span>SWF<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">width</span>=<span style="color: #cc66cc;">500</span>,<span style="color: #0066CC;">height</span>=<span style="color: #cc66cc;">300</span>,frameRate=<span style="color: #cc66cc;">30</span>,<span style="color: #0066CC;">backgroundColor</span>=0xFFFFFF<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
<span style="color: #808080; font-style: italic;">/**
 * 测试闹钟
 * @author Aiden Tailor(http://www.developria.com/2010/10/an-introduction-to-as3-signals.html)
 * @author zrong(zengrong.net)
 */</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Wakeup <span style="color: #0066CC;">extends</span> Sprite <span style="color: #0066CC;">implements</span> IBubbleEventHandler
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Wakeup<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        _alarm  = <span style="color: #000000; font-weight: bold;">new</span> AlarmClock<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
        addChild<span style="color: #66cc66;">&#40;</span>_alarm<span style="color: #66cc66;">&#41;</span>;
        _alarm.<span style="color: #006600;">alarm</span>.<span style="color: #006600;">addOnce</span><span style="color: #66cc66;">&#40;</span>handler_ring<span style="color: #66cc66;">&#41;</span>;
        _alarm.<span style="color: #006600;">ring</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _alarm:AlarmClock;
&nbsp;
    <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> handler_ring<span style="color: #66cc66;">&#40;</span>$evt:GenericEvent, $date:<span style="color: #0066CC;">Date</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'currentTarget：'</span>,$evt.<span style="color: #006600;">currentTarget</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'target：'</span>,$evt.<span style="color: #0066CC;">target</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'signal：'</span>,$evt.<span style="color: #006600;">signal</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'起床了！！！也不看看几点了：'</span>+$date.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> onEventBubbled<span style="color: #66cc66;">&#40;</span>$evt:IEvent<span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">Boolean</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'冒泡 currentTarget：'</span>,$evt.<span style="color: #006600;">currentTarget</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'冒泡 target：'</span>,$evt.<span style="color: #0066CC;">target</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'冒泡 signal：'</span>,$evt.<span style="color: #006600;">signal</span><span style="color: #66cc66;">&#41;</span>;
        <span style="color: #808080; font-style: italic;">//返回false代表不再继续冒泡</span>
        <span style="color: #b1b100;">return</span> <span style="color: #000000; font-weight: bold;">false</span>;
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/1507.htm/feed</wfw:commentRss>
		<slash:comments>8</slash:comments>
		</item>
		<item>
		<title>PuTTYcyg的替代者FuTTY</title>
		<link>http://zengrong.net/post/1506.htm</link>
		<comments>http://zengrong.net/post/1506.htm#comments</comments>
		<pubDate>Sat, 21 Jan 2012 15:55:23 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[software]]></category>

		<guid isPermaLink="false">http://zengrong.net/?p=1506</guid>
		<description><![CDATA[我一直是使用PuTTYcyg作为Cygwin的终端程序的。因为Windows的Command命令行实在是难用的可以。 但是puTTYcyg已经有很长时间没有更新了，今天在它的网站发现这个：PuTTYcyg is looking for a new maintainer。看来作者也不准备再继续维护这个项目了。 与此同时，PuTTY标准版也开始支持作为Cygwin的终端使用，只是自己要编译一个cygtermd出来：PuTTY wish cygwin-terminal-window 由于我比较懒惰，不想去down PuTTY的源码来编译，就在google上搜索有没有编译好的cygtermd.exe。无意之中找到了FuTTY。 这就是我理想中的Cygwin终端了！ 与PuTTYcyg相比，好处如下： 基于PuTTY 0.61源码编译； 加入PuTTYcyg； 加入PuTTY Tray，可以将界面最小化到任务栏中； 菜单中加入&#8221;Reconnect&#8221;和&#8221;Save Current Session&#8221;功能； 支持在界面中单击url网址用浏览器打开； 界面透明； 远程控制命令复制到剪贴板。]]></description>
			<content:encoded><![CDATA[<p>我一直是使用<a href="http://code.google.com/p/puttycyg/">PuTTYcyg</a>作为<a href="http://www.cygwin.com/">Cygwin</a>的终端程序的。因为Windows的Command命令行实在是难用的可以。</p>
<p>但是puTTYcyg已经有很长时间没有更新了，今天在它的网站发现这个：<a href="http://code.google.com/p/puttycyg/issues/detail?id=68">PuTTYcyg is looking for a new maintainer</a>。看来作者也不准备再继续维护这个项目了。</p>
<p>与此同时，PuTTY标准版也开始支持作为Cygwin的终端使用，只是自己要编译一个cygtermd出来：<a href="http://www.chiark.greenend.org.uk/~sgtatham/putty/wishlist/cygwin-terminal-window.html">PuTTY wish cygwin-terminal-window</a></p>
<p>由于我比较懒惰，不想去down PuTTY的源码来编译，就在google上搜索有没有编译好的cygtermd.exe。无意之中找到了<a href="http://code.google.com/p/futty/">FuTTY</a>。</p>
<p>这就是我理想中的Cygwin终端了！</p>
<p>与PuTTYcyg相比，好处如下：</p>
<ul>
<li>基于PuTTY 0.61源码编译；</li>
<li>加入PuTTYcyg；</li>
<li>加入PuTTY Tray，<strong>可以将界面最小化到任务栏中</strong>；</li>
<li>菜单中加入&#8221;Reconnect&#8221;和&#8221;Save Current Session&#8221;功能；</li>
<li>支持在界面中单击url网址用浏览器打开；</li>
<li>界面透明；</li>
<li>远程控制命令复制到剪贴板。</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/1506.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Signals框架介绍（一）基本用法</title>
		<link>http://zengrong.net/post/1504.htm</link>
		<comments>http://zengrong.net/post/1504.htm#comments</comments>
		<pubDate>Fri, 20 Jan 2012 10:16:19 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[AS3]]></category>
		<category><![CDATA[framework]]></category>
		<category><![CDATA[设计模式]]></category>

		<guid isPermaLink="false">http://zengrong.net/?p=1504</guid>
		<description><![CDATA[注意：本文参考An introduction to AS3 Signals写成，但不是翻译，有增删改。 第二部分：Signals框架介绍（二）高级事件 第三部分：Signals框架介绍（三）原生事件 Signals是一个基于AS3的轻量级事件框架，它被设计用来代替AS3内置的Event框架。 为什么我们要放弃Event框架，改用Signals呢？原因主要有以下几点： 使用AS3内置的Event框架，必须继承EventDispatcher或者自行实现IEventDispatcher，而Signals使用组合，可以避免继承； 使用AS3内置框架在事件中实现值的传递，必须自定义事件类才可以。而Signals可以方便的实现多个强类型值的传递； Signals不使用字符串来区分不同的事件，而是使用实例; Signals的速度更快，据说是AS3内置事件机制的4倍。 来看个简单的例子吧，这个例子中的闹钟会叫我们起床。此范例部分源码来自An introduction to AS3 Signals 基本用法 先看看闹钟类AlarmClock.as ?View Code ACTIONSCRIPTpackage &#123; import org.osflash.signals.Signal; &#160; /** * Signals闹钟范例 * @author Aiden Tailor(http://www.developria.com/2010/10/an-introduction-to-as3-signals.html) * @author zrong(zengrong.net) */ &#160; public &#8230;<p class="read-more"><a href="http://zengrong.net/post/1504.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>注意：本文参考<a href="http://www.developria.com/2010/10/an-introduction-to-as3-signals.html">An introduction to AS3 Signals</a>写成，但不是翻译，有增删改。</p>
<ul>
<li>第二部分：<a href="http://zengrong.net/post/1507.htm">Signals框架介绍（二）高级事件</a></li>
<li>第三部分：<a href="http://zengrong.net/post/1510.htm">Signals框架介绍（三）原生事件</a></li>
</ul>
<hr />
<p><a href="https://github.com/robertpenner/as3-signals">Signals</a>是一个基于AS3的轻量级事件框架，它被设计用来代替AS3内置的Event框架。</p>
<p>为什么我们要放弃Event框架，改用Signals呢？原因主要有以下几点：</p>
<ol>
<li>使用AS3内置的Event框架，必须继承EventDispatcher或者自行实现IEventDispatcher，而Signals使用组合，可以避免继承；</li>
<li>使用AS3内置框架在事件中实现值的传递，必须自定义事件类才可以。而Signals可以方便的实现多个强类型值的传递；</li>
<li>Signals不使用字符串来区分不同的事件，而是使用实例;</li>
<li>Signals的速度更快，据说是AS3内置事件机制的4倍。</li>
</ol>
<p>来看个简单的例子吧，这个例子中的闹钟会叫我们起床。此范例部分源码来自<a href="http://www.developria.com/2010/10/an-introduction-to-as3-signals.html">An introduction to AS3 Signals</a><br />
<span id="more-1504"></span></p>
<h3>基本用法</h3>
<p>先看看闹钟类AlarmClock.as</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1504code21'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150421"><td class="code" id="p1504code21"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
<span style="color: #0066CC;">import</span> org.<span style="color: #006600;">osflash</span>.<span style="color: #006600;">signals</span>.<span style="color: #006600;">Signal</span>;
&nbsp;
<span style="color: #808080; font-style: italic;">/**
* Signals闹钟范例
* @author Aiden Tailor(http://www.developria.com/2010/10/an-introduction-to-as3-signals.html)
* @author zrong(zengrong.net)
*/</span>
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> AlarmClock
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> AlarmClock<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        alarm = <span style="color: #000000; font-weight: bold;">new</span> Signal<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">/**
     * 声明一个Signal实例用来发送Signal
     */</span>
    <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">var</span> alarm:Signal;
&nbsp;
    <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> ring<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #808080; font-style: italic;">//发布闹钟的响铃事件</span>
        alarm.<span style="color: #006600;">dispatch</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>再来看看起床类Wakeup.as</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1504code22'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150422"><td class="code" id="p1504code22"><pre class="actionscript" style="font-family:monospace;">package
<span style="color: #66cc66;">&#123;</span>
<span style="color: #0066CC;">import</span> flash.<span style="color: #006600;">display</span>.<span style="color: #006600;">Sprite</span>;
&nbsp;
<span style="color: #66cc66;">&#91;</span>SWF<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">width</span>=<span style="color: #cc66cc;">500</span>,<span style="color: #0066CC;">height</span>=<span style="color: #cc66cc;">300</span>,frameRate=<span style="color: #cc66cc;">30</span>,<span style="color: #0066CC;">backgroundColor</span>=0xFFFFFF<span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#93;</span>
<span style="color: #808080; font-style: italic;">/**
 * 测试闹钟
 * @author Aiden Tailor(http://www.developria.com/2010/10/an-introduction-to-as3-signals.html)
 * @author zrong(zengrong.net)
 */</span>
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">class</span> Wakeup <span style="color: #0066CC;">extends</span> Sprite
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Wakeup<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
    <span style="color: #66cc66;">&#123;</span>
        _alarm  = <span style="color: #000000; font-weight: bold;">new</span> AlarmClock<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
        <span style="color: #808080; font-style: italic;">//向alarm注册事件，这里不需要提供任何的事件名称。因为alarm就是一个确定的Signal实例。</span>
        _alarm.<span style="color: #006600;">alarm</span>.<span style="color: #0066CC;">add</span><span style="color: #66cc66;">&#40;</span>handler_ring<span style="color: #66cc66;">&#41;</span>;
&nbsp;
        <span style="color: #808080; font-style: italic;">//使用addOnce，让alarm在事件收到一次后立即取消</span>
        <span style="color: #808080; font-style: italic;">//_alarm.alarm.addOnce(handler_ring);</span>
&nbsp;
        _alarm.<span style="color: #006600;">ring</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
        _alarm.<span style="color: #006600;">ring</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
&nbsp;
    <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">var</span> _alarm:AlarmClock;
&nbsp;
    <span style="color: #808080; font-style: italic;">/**
     * 由于我们并没有在事件中传递参数，因此这里的方法也不需要提供任何参数。
     */</span>
    <span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> handler_ring<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
    <span style="color: #66cc66;">&#123;</span>
        <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'起床了！！！'</span><span style="color: #66cc66;">&#41;</span>;
    <span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span>
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>在进行事件注册的时候，我们使用的是AlarmClock的public属性alarm。在面向对象编程中，这种方式是不可取的。但我们现在只是个范例对么？不要要求那么严格好不好？</p>
<p>当然，如果你知道在AS3中，使用get方法会比直接使用public属性的性能低不少，或许你也会让这种“不规范”的编程方法延续下去？</p>
<h3>取消事件注册</h3>
<p>如果运行这个范例，应该可以看到2条“起床了！！！”的trace信息。然后，取消addOnce一行的注释，并注释掉add那行，让它们变成这样：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1504code23'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150423"><td class="code" id="p1504code23"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> Wakeup<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    _alarm  = <span style="color: #000000; font-weight: bold;">new</span> AlarmClock<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
&nbsp;
    <span style="color: #808080; font-style: italic;">//向alarm注册事件，这里不需要提供任何的事件名称。因为alarm就是一个确定的Signal实例。</span>
    <span style="color: #808080; font-style: italic;">//_alarm.alarm.add(handler_ring);</span>
&nbsp;
    <span style="color: #808080; font-style: italic;">//使用addOnce，让alarm在事件收到一次后立即取消</span>
    _alarm.<span style="color: #006600;">alarm</span>.<span style="color: #006600;">addOnce</span><span style="color: #66cc66;">&#40;</span>handler_ring<span style="color: #66cc66;">&#41;</span>;
&nbsp;
    _alarm.<span style="color: #006600;">ring</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
    _alarm.<span style="color: #006600;">ring</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>再次运行范例，应该只能看到1条trace信息了。你可以把这种现象理解成原来的AS事件机制中的removeEventDispatcher被自动执行了。</p>
<p>当然，手动移除也是可以的。如果你使用的是add方法注册，可以使用下面的方法来移除事件的注册。</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1504code24'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150424"><td class="code" id="p1504code24"><pre class="actionscript" style="font-family:monospace;">_alarm.<span style="color: #006600;">alarm</span>.<span style="color: #006600;">remove</span><span style="color: #66cc66;">&#40;</span>handler_ring<span style="color: #66cc66;">&#41;</span>;
_alarm.<span style="color: #006600;">alarm</span>.<span style="color: #006600;">removeAll</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>;</pre></td></tr></table></div>

<h3>传递参数</h3>
<p>看看传递参数有多简单吧……修改AlarmClock.as中的相关代码：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1504code25'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150425"><td class="code" id="p1504code25"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> AlarmClock<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #808080; font-style: italic;">//让我们传递一个AS3的标准Date对象吧，让那个懒虫知道现在几点</span>
    alarm = <span style="color: #000000; font-weight: bold;">new</span> Signal<span style="color: #66cc66;">&#40;</span><span style="color: #0066CC;">Date</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span>
&nbsp;
<span style="color: #0066CC;">public</span> <span style="color: #000000; font-weight: bold;">function</span> ring<span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #808080; font-style: italic;">//把当前的时间发出去</span>
    alarm.<span style="color: #006600;">dispatch</span><span style="color: #66cc66;">&#40;</span><span style="color: #000000; font-weight: bold;">new</span> <span style="color: #0066CC;">Date</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>再修改Wakeup.as中的相关代码：</p>

<div class="wp_codebox_msgheader"><span class="right"><sup><a href="http://www.ericbess.com/ericblog/2008/03/03/wp-codebox/#examples" target="_blank" title="WP-CodeBox HowTo?"><span style="color: #99cc00">?</span></a></sup></span><span class="left"><a href="javascript:;" onclick="javascript:showCodeTxt('p1504code26'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150426"><td class="code" id="p1504code26"><pre class="actionscript" style="font-family:monospace;"><span style="color: #0066CC;">private</span> <span style="color: #000000; font-weight: bold;">function</span> handler_ring<span style="color: #66cc66;">&#40;</span>$date:<span style="color: #0066CC;">Date</span><span style="color: #66cc66;">&#41;</span>:<span style="color: #0066CC;">void</span>
<span style="color: #66cc66;">&#123;</span>
    <span style="color: #0066CC;">trace</span><span style="color: #66cc66;">&#40;</span><span style="color: #ff0000;">'起床了！！！也不看看几点了：'</span>+$date.<span style="color: #0066CC;">toString</span><span style="color: #66cc66;">&#40;</span><span style="color: #66cc66;">&#41;</span><span style="color: #66cc66;">&#41;</span>;
<span style="color: #66cc66;">&#125;</span></pre></td></tr></table></div>

<p>就这样，不需要该死的继承Event和重写clone()了，是不是很清净呢？</p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/1504.htm/feed</wfw:commentRss>
		<slash:comments>4</slash:comments>
		</item>
		<item>
		<title>Flash Builder安装和卸载错误的解决办法</title>
		<link>http://zengrong.net/post/1502.htm</link>
		<comments>http://zengrong.net/post/1502.htm#comments</comments>
		<pubDate>Wed, 28 Dec 2011 03:59:05 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[FlashBuilder]]></category>

		<guid isPermaLink="false">http://zengrong.net/?p=1502</guid>
		<description><![CDATA[今天准备卸载Flash Builder 4.5.1，安装4.6，哪料到卸载出错，提示去Adobe网站下载Adobe Creative Suite Cleaner Tool进行卸载。 下载后，发现该工具是一个交互命令行工具，用来删除Adobe系列软件的注册信息。运行后，该工具只会卸载掉注册表或文件系统中的信息，不会删除Flash Builder安装目录。 卸载完成后安装Flash Builder 4.6，结果报错：“安装过程中安装程序遇到错误(-1)。请重新启动计算机,然后重试。” 再次使用Adobe Creative Suite Cleaner Tool删除所有能删除的软件信息，依然无效。 最后，删除了“C:\Program Files\Common Files\Adobe”下的所有文件夹，安装成功。]]></description>
			<content:encoded><![CDATA[<p>今天准备卸载Flash Builder 4.5.1，安装4.6，哪料到卸载出错，提示去Adobe网站下载<a href="http://www.adobe.com/support/contact/cscleanertool.html">Adobe Creative Suite Cleaner Tool</a>进行卸载。</p>
<p>下载后，发现该工具是一个交互命令行工具，用来删除Adobe系列软件的注册信息。运行后，该工具只会卸载掉注册表或文件系统中的信息，不会删除Flash Builder安装目录。</p>
<p>卸载完成后安装Flash Builder 4.6，结果报错：“安装过程中安装程序遇到错误(-1)。请重新启动计算机,然后重试。”</p>
<p>再次使用Adobe Creative Suite Cleaner Tool删除所有能删除的软件信息，依然无效。</p>
<p>最后，删除了“<code>C:\Program Files\Common Files\Adobe</code>”下的所有文件夹，安装成功。</p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/1502.htm/feed</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>碰到一个国税局退购置税的骗局</title>
		<link>http://zengrong.net/post/1500.htm</link>
		<comments>http://zengrong.net/post/1500.htm#comments</comments>
		<pubDate>Mon, 26 Dec 2011 06:39:49 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[乱弹]]></category>

		<guid isPermaLink="false">http://zengrong.net/?p=1500</guid>
		<description><![CDATA[今天收到一个武汉联通手机18627164090打来的电话，说最近国家在办理退购置税,我的房子可以退购置税8000左右，由于前段时间给我发的信件我没收到，现在退税必须联系国税局。她要求我打电话联系国税局询问相关事项，同时给了我一个电话号码(01086007773)和一个编号（58228），嘱咐我立即电话过去询问退税事项。 听到一半我就确定这是个骗局了： 对方显得过于热情（国家工作人员不可能这么热情），一再强调咨询电话是免费的，且一再要求我挂了电话后马上打电话询问； 对方普通话很差劲； 对方打来的电话是手机号码，且是联通的不记名GSM卡。 马上google了一下，确认是个骗局。如果打通骗子提供的电话，骗子会要求带银行卡去自动取款机进行操作，至于后面……你懂的。 这个骗局比较高级，骗子知道我的姓名，小区的具体名称，且让我自己电话询问，很容易让人上当。 确认之后我果断110报警。110的妹纸只记录了我提供的2个号码，说她们会跟进。估计后面也不会有什么结果了。 希望没有人受骗吧……]]></description>
			<content:encoded><![CDATA[<p>今天收到一个武汉联通手机18627164090打来的电话，说最近国家在办理退购置税,我的房子可以退购置税8000左右，由于前段时间给我发的信件我没收到，现在退税必须联系国税局。她要求我打电话联系国税局询问相关事项，同时给了我一个电话号码(01086007773)和一个编号（58228），嘱咐我立即电话过去询问退税事项。</p>
<p>听到一半我就确定这是个骗局了：</p>
<ol>
<li>对方显得过于热情（国家工作人员不可能这么热情），一再强调咨询电话是免费的，且一再要求我挂了电话后马上打电话询问；</li>
<li>对方普通话很差劲；</li>
<li>对方打来的电话是手机号码，且是联通的不记名GSM卡。</li>
</ol>
<p>马上google了一下，确认是个骗局。如果打通骗子提供的电话，骗子会要求带银行卡去自动取款机进行操作，至于后面……你懂的。</p>
<p>这个骗局比较高级，骗子知道我的姓名，小区的具体名称，且让我自己电话询问，很容易让人上当。</p>
<p>确认之后我果断110报警。110的妹纸只记录了我提供的2个号码，说她们会跟进。估计后面也不会有什么结果了。</p>
<p>希望没有人受骗吧……</p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/1500.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Android设备分辨率计算</title>
		<link>http://zengrong.net/post/1494.htm</link>
		<comments>http://zengrong.net/post/1494.htm#comments</comments>
		<pubDate>Fri, 23 Dec 2011 16:24:11 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[Android]]></category>
		<category><![CDATA[手机]]></category>

		<guid isPermaLink="false">http://zengrong.net/?p=1494</guid>
		<description><![CDATA[面对Android设备那混乱的硬件体系，最淡定的开发者也会不免蛋疼起来。在做Android UI的时候，考虑最多的就是这些不同设备的适配问题。在为不同分辨率设计不同UI的时候，我们首先要知道目标设备的分辨率到底是多少。如何计算出来？ 水果手机经常喜欢用分辨率超过人眼极限来标榜自己的设备有多么牛B，据说iPhone 4S的分辨率达到了326 PPI(pixel per inch)，这个数值的计算公式为： 开方(屏幕宽度平方+屏幕高度平方)÷对角线尺寸 iPhone 4S，960&#215;640像素，对角线尺寸3.5英寸，用上面的公式计算结果如下： sqrt(sqr(960) + sqr(640)) / 3.5 ≈ 329.65 看来水果公司并未说谎。只是3.5寸的屏搞这么高的分辨率，考视力么？ 和水果比起来，Android就更加复杂了，它把屏幕分成small,normal,large,xlarge四种，其对应的屏幕尺寸如下： xlarge 至少960dp x 720dp large 至少640dp x 480dp normal 至少470dp x 320dp small 至少426dp x 320dp dp(Density-independent pixel)是一个密度无关的像素单位，是用来表示基于160 dpi的设备计算出来的虚拟像素。 屏幕分辨率被分成low dpi,medium &#8230;<p class="read-more"><a href="http://zengrong.net/post/1494.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>面对Android设备那混乱的硬件体系，最淡定的开发者也会不免蛋疼起来。在做Android UI的时候，考虑最多的就是这些不同设备的适配问题。在为不同分辨率设计不同UI的时候，我们首先要知道目标设备的分辨率到底是多少。如何计算出来？</p>
<p>水果手机经常喜欢用分辨率超过人眼极限来标榜自己的设备有多么牛B，<a href="http://www.apple.com/iphone/features/retina-display.html">据说iPhone 4S的分辨率达到了326 PPI(pixel per inch)</a>，这个数值的计算公式为：</p>
<pre>
开方(屏幕宽度平方+屏幕高度平方)÷对角线尺寸
</pre>
<p>iPhone 4S，960&#215;640像素，对角线尺寸3.5英寸，用上面的公式计算结果如下：<span id="more-1494"></span></p>
<pre>sqrt(sqr(960) + sqr(640)) / 3.5 ≈ 329.65</pre>
<p>看来水果公司并未说谎。只是3.5寸的屏搞这么高的分辨率，考视力么？</p>
<p>和水果比起来，Android就更加复杂了，它把屏幕分成small,normal,large,xlarge四种，其对应的屏幕尺寸如下：</p>
<ul>
<li>xlarge 至少960dp x 720dp</li>
<li>large 至少640dp x 480dp</li>
<li>normal 至少470dp x 320dp</li>
<li>small 至少426dp x 320dp</li>
</ul>
<p><strong>dp(Density-independent pixel)是一个密度无关的像素单位，是用来表示基于160 dpi的设备计算出来的虚拟像素。</strong></p>
<p>屏幕分辨率被分成low dpi,medium dpi,high dpi,extra high dpi。详见下图：</p>
<p><img src="/wp-content/uploads/2011/12/screens-ranges.png" alt="Android设备尺寸定义" /></p>
<p>最近的Android设备屏幕分布图：</p>
<p><img src="/wp-content/uploads/2011/12/android_screen_20111201.png" alt="Android设备尺寸分布" /></p>
<p>更详细的文章：</p>
<ul>
<li><a href="http://developer.android.com/guide/practices/screens_support.html">Supporting Multiple Screens</a></li>
<li><a href="http://developer.android.com/resources/dashboard/screens.html">Screen Sizes and Densities</a></li>
</ul>
<p>另外，在分辨率单位上，<strong>DPI(dots per inch)和PPI(pixel per inch)目前已经通用。</strong></p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/1494.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>香港自由行经验（二）</title>
		<link>http://zengrong.net/post/1491.htm</link>
		<comments>http://zengrong.net/post/1491.htm#comments</comments>
		<pubDate>Mon, 12 Dec 2011 15:19:31 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[乱弹]]></category>
		<category><![CDATA[感悟]]></category>
		<category><![CDATA[旅游]]></category>

		<guid isPermaLink="false">http://zengrong.net/?p=1491</guid>
		<description><![CDATA[距离第一次到香港，时间过去3年多了。这是第三次到香港，写点新的经验吧。 一、关于酒店 最开始订的是“香港之家”，原因有二： 价格低 朋友推荐 但这次订房让我很失望。香港之家是必须先确定好行程再打全款的，可我订房全部成功6天后，他们却告知我无法提供房间，又将所有款项退还给我。这时距离我去香港只剩一周时间，再找比较便宜的酒店已经很困难了。而且事先根据香港之家的地理位置安排的7天行程，也要全部重新安排。可以说，这次失败的订房完全打乱了我的旅游计划。 在淘宝上订房，也不靠谱。香港之家泡汤后，我首先去了淘宝，看着哪些300－400的均价，心中一喜。可一问都不是那么回事。由于进入12月，香港旅游也进入旺季，酒店标准间价格都在700港币以上，2间房一晚就要1400港币，条件也非常一般，打破天2星标准，在内地就是招待所级别了。那些300、400元的价格，都是幌子而已。 最后敲定了香港迪士尼乐园酒店。由于当时连住3日的8折优惠房已经订完，就购买了一张600元的儿童“奇妙处处通”银卡，该卡可以在酒店房价上打85折，酒店餐饮和迪士尼乐园餐饮打9折。这样算下来，房费+服务费一共是港币2057每天。迪士尼乐园酒店的客房较大，有38平方，可以住4人。这比淘宝上的酒店靠谱多了。 迪士尼乐园一共有两座酒店。如果带孩子去迪士尼，最好是住“迪士尼好莱坞酒店”。虽然星级较前者要低，房间也小些，但价格要便宜不少，且酒店房间的布置主题是迪士尼人物（迪士尼乐园酒店房间布置是公主房），孩子会比较喜欢。 订房的时候，最好是直接电话到迪士尼乐园酒店订房中心订房，只要提供信用卡就可以订房，但要注意强调走银联通道，否则会多花不少手续费。接线生一般会主动告知你折扣的情况，也可先访问酒店网站查询折扣，在订房的时候询问接线生折扣细节。 二、关于迪士尼乐园 如果计划在迪士尼玩3天以上的，建议还是给孩子买一张“奇妙处处通”银卡，因为事先买好的儿童票，是可以抵差价的（我的抵了250港币）。而银卡在周一至周五是可以凭卡入园的，不用再买门票（记得要带上孩子的港澳通行证或护照，银卡上有名字，入园需要验证身份）。 如果安排的好，迪士尼乐园大约1天半左右的时间就可以玩完。好玩的项目可以Google之，这里不提。值得一说的是迪士尼金奖音乐剧和每晚20点的散场烟花，你不得不佩服美国人的大手笔。难怪老谋子在好莱坞也那么受欢迎…… 迪士尼乐园是禁止带饮料的，但可以带食物。海洋公园可以带饮料，但禁止带食物。其实门口检查并不太严，想逃避也很容易。可以找个有很多拉链的包（双肩的那种），然后打开其中的大部分拉链进行检查，放食物或水的拉链就不开了……这样只要带的东西不是太多，就能带进乐园的。 三、关于交通 八达通是必备的，方便且省钱。很多地方可以不用排队买票，直接刷卡。还省去了找零的时间（那些角币，是无法换回人民币的）。港铁“香港”站和“中环”站，在地图上不在一起，其实是可以不出站从香港走到中环的。只是地方太大，我都走迷路了…… 由于迪士尼在离岛上，距离市中心很远，每次从迪士尼乐园酒店到旺角或港岛购物，都要耗去40分钟至一个小时转车。下班高峰期在尖沙咀和旺角、太子等换乘站，还可能会挤不上车。所以如果酒店比较远，就一定要控制好出行的时间点。另外港铁价格较高，4个人出门一趟，随随便便就是一、两百块。比如，从罗湖到迪士尼，如果全程港铁，单程票是55元港币，刷八达通也要48。 四、关于过关 罗湖口岸当然是最方便、最快捷的过关地点选择。但这个口岸也是人最多的关口。我选在周六20点出关，那就是个错误。几千人熙熙攘攘排在3米宽的通道中小碎步向前挪动，还要时不时提防旁边巨大行李箱和纸盒子的侵袭，再看着孩子不会在你眼前消失，是何等纠结的事情啊！ 其实现在过关查验并不严的，我看到很多推着大量原包纸箱的人，也能顺利过关（当然也有被拦下来的）。像我们这样把东西偷偷摸摸藏在旅行箱里面，还战战兢兢小心翼翼，实在是没有必要。 从深圳入关的时候，是全程不查行李的（这貌似和3年前不同了）。而从香港出关的时候也不查行李，只在深圳入关会使用安检机查一次。如果你不被海关人员盯上（这几率也太低了），就没什么事。 五、关于通信 千万不要去办移不动、连不通、点不信的坑爹的手机国际漫游。先要交保证金不说，还贵得离谱。建议如下： 提前网购电话卡，建议每人一张，入关前激活（激活一般需要几分钟到几十分钟不等，口岸边都有香港方向的手机信号）方便走失的时候联系。 入关后找一家便利店购买电话卡。最便宜的是港币28元。 原号码可提前办理关机呼转（注意要开通国际长途），在香港收到电话后，可挂断，然后用香港手机拨打回去。 我购买的是RMB35元包打240分钟的电话卡，这个7天一般用不完。每天30MB上网流量，跑地图是不够的。还有28元包100分钟的卡。 六、入港行程 从武汉到香港，有这样几种走法： 飞到广州，广九直通车到香港（推荐） 优点：机票比车票便宜，过关排队人数少，直达九龙 缺点：广九直通车首班车时间较晚 动车到广州，广九直通车到香港 优点：时间安排比飞机灵活；比飞机安全？（至于你信不信，反正我信） 缺点：票价较贵 飞或动车到广州，广深高速到深圳，罗湖过关 优点：可在深圳住一晚，第二天一早过关，节省一天房费，在香港呆满一天 缺点：一天都在广州地铁、动车上转车 火车直接到深圳，罗湖过关 优点：在火车上节省出一晚时间，第二天一早过关，在香港呆满一天；硬卧票价便宜 &#8230;<p class="read-more"><a href="http://zengrong.net/post/1491.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>距离<a href="http://zengrong.net/post/461.htm">第一次到香港</a>，时间过去3年多了。这是第三次到香港，写点新的经验吧。</p>
<h3>一、关于酒店</h3>
<p>最开始订的是“<a href="http://www.y-h.cn/">香港之家</a>”，原因有二：</p>
<ol>
<li>价格低</li>
<li>朋友推荐</li>
</ol>
<p>但这次订房让我很失望。香港之家是必须先确定好行程再打全款的，<strong>可我订房全部成功6天后，他们却告知我无法提供房间</strong>，又将所有款项退还给我。这时距离我去香港只剩一周时间，再找比较便宜的酒店已经很困难了。而且事先根据香港之家的地理位置安排的7天行程，也要全部重新安排。可以说，这次失败的订房完全打乱了我的旅游计划。<span id="more-1491"></span></p>
<p>在淘宝上订房，也不靠谱。香港之家泡汤后，我首先去了淘宝，看着哪些300－400的均价，心中一喜。可一问都不是那么回事。由于进入12月，香港旅游也进入旺季，酒店标准间价格都在700港币以上，2间房一晚就要1400港币，条件也非常一般，打破天2星标准，在内地就是招待所级别了。那些300、400元的价格，都是幌子而已。</p>
<p>最后敲定了<a href="http://www.hongkongdisneyland.com.cn/hkdl/zh_CN/hotels/landing?name=HongKongDisneylandHotelLandingPage">香港迪士尼乐园酒店</a>。由于当时连住3日的8折优惠房已经订完，就购买了一张600元的儿童“奇妙处处通”银卡，该卡可以在酒店房价上打85折，酒店餐饮和迪士尼乐园餐饮打9折。这样算下来，房费+服务费一共是港币2057每天。迪士尼乐园酒店的客房较大，有38平方，可以住4人。这比淘宝上的酒店靠谱多了。</p>
<p>迪士尼乐园一共有两座酒店。如果带孩子去迪士尼，最好是住“<a href="http://park.hongkongdisneyland.com/hkdl/zh_CN/hotels/landing?name=HollywoodHotelLandingPage">迪士尼好莱坞酒店</a>”。虽然星级较前者要低，房间也小些，但价格要便宜不少，且酒店房间的布置主题是迪士尼人物（迪士尼乐园酒店房间布置是公主房），孩子会比较喜欢。</p>
<p>订房的时候，最好是直接电话到迪士尼乐园酒店订房中心订房，只要提供信用卡就可以订房，但要注意强调走银联通道，否则会多花不少手续费。接线生一般会主动告知你折扣的情况，也可先访问酒店网站查询折扣，在订房的时候询问接线生折扣细节。</p>
<h3>二、关于迪士尼乐园</h3>
<p>如果计划在迪士尼玩3天以上的，建议还是给孩子买一张“奇妙处处通”银卡，因为事先买好的儿童票，是可以抵差价的（我的抵了250港币）。而银卡在周一至周五是可以凭卡入园的，不用再买门票（记得要带上孩子的港澳通行证或护照，银卡上有名字，入园需要验证身份）。</p>
<p>如果安排的好，迪士尼乐园大约1天半左右的时间就可以玩完。好玩的项目可以Google之，这里不提。值得一说的是迪士尼金奖音乐剧和每晚20点的散场烟花，你不得不佩服美国人的大手笔。难怪老谋子在好莱坞也那么受欢迎……</p>
<p>迪士尼乐园是禁止带饮料的，但可以带食物。海洋公园可以带饮料，但禁止带食物。其实门口检查并不太严，想逃避也很容易。可以找个有很多拉链的包（双肩的那种），然后打开其中的大部分拉链进行检查，放食物或水的拉链就不开了……这样只要带的东西不是太多，就能带进乐园的。</p>
<h3>三、关于交通</h3>
<p>八达通是必备的，方便且省钱。很多地方可以不用排队买票，直接刷卡。还省去了找零的时间（那些角币，是无法换回人民币的）。港铁“香港”站和“中环”站，在地图上不在一起，其实是可以不出站从香港走到中环的。只是地方太大，我都走迷路了……</p>
<p>由于迪士尼在离岛上，距离市中心很远，每次从迪士尼乐园酒店到旺角或港岛购物，都要耗去40分钟至一个小时转车。下班高峰期在尖沙咀和旺角、太子等换乘站，还可能会挤不上车。所以如果酒店比较远，就一定要控制好出行的时间点。另外港铁价格较高，4个人出门一趟，随随便便就是一、两百块。比如，从罗湖到迪士尼，如果全程港铁，单程票是55元港币，刷八达通也要48。</p>
<h3>四、关于过关</h3>
<p>罗湖口岸当然是最方便、最快捷的过关地点选择。但这个口岸也是人最多的关口。我选在周六20点出关，那就是个错误。几千人熙熙攘攘排在3米宽的通道中小碎步向前挪动，还要时不时提防旁边巨大行李箱和纸盒子的侵袭，再看着孩子不会在你眼前消失，是何等纠结的事情啊！</p>
<p>其实现在过关查验并不严的，我看到很多推着大量原包纸箱的人，也能顺利过关（当然也有被拦下来的）。像我们这样把东西偷偷摸摸藏在旅行箱里面，还战战兢兢小心翼翼，实在是没有必要。</p>
<p>从深圳入关的时候，是全程不查行李的（这貌似和3年前不同了）。而从香港出关的时候也不查行李，只在深圳入关会使用安检机查一次。如果你不被海关人员盯上（这几率也太低了），就没什么事。</p>
<h3>五、关于通信</h3>
<p>千万不要去办移不动、连不通、点不信的坑爹的手机国际漫游。先要交保证金不说，还贵得离谱。建议如下：</p>
<ol>
<li>提前网购电话卡，建议每人一张，入关前激活（激活一般需要几分钟到几十分钟不等，口岸边都有香港方向的手机信号）方便走失的时候联系。</li>
<li>入关后找一家便利店购买电话卡。最便宜的是港币28元。</li>
<li>原号码可提前办理关机呼转（注意要开通国际长途），在香港收到电话后，可挂断，然后用香港手机拨打回去。</li>
<li>我购买的是RMB35元包打240分钟的电话卡，这个7天一般用不完。每天30MB上网流量，跑地图是不够的。还有28元包100分钟的卡。</li>
</ol>
<h3>六、入港行程</h3>
<p>从武汉到香港，有这样几种走法：</p>
<ol>
<li>飞到广州，广九直通车到香港（推荐）
<ul>
<li>优点：机票比车票便宜，过关排队人数少，直达九龙</li>
<li>缺点：广九直通车首班车时间较晚</li>
</ul>
</li>
<li>动车到广州，广九直通车到香港
<ul>
<li>优点：时间安排比飞机灵活；比飞机安全？（至于你信不信，反正我信）</li>
<li>缺点：票价较贵</li>
</ul>
</li>
<li>飞或动车到广州，广深高速到深圳，罗湖过关
<ul>
<li>优点：可在深圳住一晚，第二天一早过关，节省一天房费，在香港呆满一天</li>
<li>缺点：一天都在广州地铁、动车上转车</li>
</ul>
</li>
<li>火车直接到深圳，罗湖过关
<ul>
<li>优点：在火车上节省出一晚时间，第二天一早过关，在香港呆满一天；硬卧票价便宜</li>
<li>缺点：火车上的睡眠质量实在不咋地；带孩子的话建议买软卧</li>
</ul>
</li>
<li><a href="http://zengrong.net/post/1489.htm">问问百度</a>？（强烈不推荐！）</li>
</ol>
<h3>七、其他</h3>
<p>对于能自己行动的孩子来说，一定要准备一张联系方式卡，写上孩子的名字和家长的香港+内地手机号码，放在孩子口袋里或挂在脖子上，并每天和孩子强调一遍走失后的应对方法，切记切记。</p>
<p>问路尽量找穿制服的人（警察、清洁工、酒店服务员……）和香港本地的年青人。他们会比较热情，普通话也较好。</p>
<p>香港的巴士是不报站的，所以一定要知道自己去的地方是哪里。繁华地段的巴士上，你碰到的大多数人可能都是内地人，所以问到站没有，最好还是问巴士司机。</p>
<p>如果一定在香港要买泡面吃的话，记得买一双筷子。香港出售的泡面是不带“工具”的，筷子叉子一概没有。想想你看着一碗“香喷喷”的泡面流口水的杯具情景吧。还好不是没有调料包……</p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/1491.htm/feed</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>从罗湖海关怎么去香港迪士尼乐园？百度给你答案</title>
		<link>http://zengrong.net/post/1489.htm</link>
		<comments>http://zengrong.net/post/1489.htm#comments</comments>
		<pubDate>Mon, 05 Dec 2011 12:32:18 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[乱弹]]></category>
		<category><![CDATA[旅游]]></category>

		<guid isPermaLink="false">http://zengrong.net/?p=1489</guid>
		<description><![CDATA[打开百度地图，搜索“深圳海关到香港迪士尼乐园”，百度会给你一个非常给力的答案： 先坐15个小时火车到上海，然后坐飞机到香港机场，然后…… 一起欢乐一下： http://j.map.baidu.com/ZElyc]]></description>
			<content:encoded><![CDATA[<p>打开百度地图，搜索“深圳海关到香港迪士尼乐园”，百度会给你一个非常给力的答案：</p>
<p>先坐15个小时火车到上海，然后坐飞机到香港机场，然后……<span id="more-1489"></span></p>
<p><img src="http://zengrong.net/wp-content/uploads/2011/12/luohu2disney.png" alt="从罗湖到香港迪士尼" /></p>
<p>一起欢乐一下：</p>
<p><a href="http://j.map.baidu.com/ZElyc">http://j.map.baidu.com/ZElyc</a></p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/1489.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Flex编译器参数中-swf-version与-target-player之关系</title>
		<link>http://zengrong.net/post/1486.htm</link>
		<comments>http://zengrong.net/post/1486.htm#comments</comments>
		<pubDate>Sat, 03 Dec 2011 09:40:34 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[FlashPlayer]]></category>
		<category><![CDATA[Flex]]></category>

		<guid isPermaLink="false">http://zengrong.net/?p=1486</guid>
		<description><![CDATA[今天下载了Flex 4.6 SDK后，发现framework/flex-config.xml中的默认-swf-version的值变成了14，而-target-player则变成了11.1。 记得在Flash Player 11发布的时候，为了能正常的编译面向Flash Player 11的swf文件，需要将-swf-version的值设置为13。以此推算，14这个值应该是针对Flash Player 11.1的。 那么-swf-version和-target-player的对应关系如何？见下表： flash Player版本 Flex SDK 版本 -swf-version -target-player 9 flex 3 9 9 10.0 flex 4.0 10 10.0.0 10.1 flex 4.1 10 10.1.0 10.2 flex 4.5和4.5.1 11 10.2.0 10.3 12 &#8230;<p class="read-more"><a href="http://zengrong.net/post/1486.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<p>今天下载了<a href="http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+4.6">Flex 4.6 SDK</a>后，发现<code>framework/flex-config.xml</code>中的默认-swf-version的值变成了14，而-target-player则变成了11.1。</p>
<p>记得在Flash Player 11发布的时候，为了能正常的编译面向Flash Player 11的swf文件，需要将-swf-version的值设置为13。以此推算，14这个值应该是针对Flash Player 11.1的。</p>
<p>那么-swf-version和-target-player的对应关系如何？见下表：<span id="more-1486"></span></p>
<table>
<tr>
<td>flash Player版本</td>
<td>Flex SDK 版本</td>
<td>-swf-version</td>
<td>-target-player</td>
</tr>
<tr>
<td>9</td>
<td>flex 3</td>
<td>9</td>
<td>9</td>
</tr>
<tr>
<td>10.0</td>
<td>flex 4.0</td>
<td>10</td>
<td>10.0.0</td>
</tr>
<tr>
<td>10.1</td>
<td>flex 4.1</td>
<td>10</td>
<td>10.1.0</td>
</tr>
<tr>
<td>10.2</td>
<td>flex 4.5和4.5.1</td>
<td>11</td>
<td>10.2.0</td>
</tr>
<tr>
<td>10.3</td>
<td></td>
<td>12</td>
<td>10.3.0</td>
</tr>
<td>11.0</td>
<td></td>
<td>13</td>
<td>11.0.0</td>
</tr>
<tr>
<td>11.1</td>
<td>flex 4.6</td>
<td>14</td>
<td>11.1</td>
</tr>
</table>
<p>上面的这份表格，是根据<a href="http://help.adobe.com/en_US/flex/using/WS2db454920e96a9e51e63e3d11c0bf69084-7ee0.html">Targeting Flash Player versions</a>整理出来的，但这个表格是<strong>不准确</strong>的。</p>
<p>因为，-swf-version的值能支持到那个程度，其实与Flex SDK并没有直接的关系，而是依赖于Flex SDK中的playerglobal.swc（位于frameworks/libs/player）。</p>
<p>打开Flex 4.6 SDK的frameworks/libs/player文件夹，可以看到其中只有一个11.1子文件夹，放置着针对Flash Player 11.1的playerglobal.swc。这个swc的作用有2个：</p>
<ol>
<li>在程序编写期间，Flash Builder使用它来提供自动完成功能。当然，如果直接用mxml编译器（<a href="http://zengrong.net/post/1307.htm">比如我</a>，就没有使用这个功能；</li>
<li>在程序编译期间，mxmlc编译器需要调用它。</li>
</ol>
<p>在每个新版本的Flash Player 11发布的时候，必须一起提供playerglobal.swc文件，也是这个原因。因为SDK的发布，和Flash Player的发布<strong>并非总是同步的</strong>。</p>
<p>在Flash 8时代，编译器和Flash Player是完全同步的。因为那时，只有Flash IDE可以生成swf文件。而Flex问世，以及MacroMedia被Adobe收购以后，Flash的发展就变得多样了，FlashIDE和Flex都可以生成swf文件，Flash Player的发展也更加独立。现在的情况，Flash CS，Flash Builder，Flex SDK，Flash Player的发布已经完全不同步了。尤其是当Adobe将Flex SDK交给Apache发展后，SDK的更新速度估计会更快。Adobe自己又会紧紧将Flash Player攥在手里，保持自己的步调来更新。（关于这段历史，我在<a href="http://zengrong.net/post/1295.htm">Actionscript,AS3,MXML,Flex,Flex Builder,Flash Builder,Flash,AIR,Flash Player之关系</a>一文中做了详述）</p>
<p>偏题了一会儿，现在回到正题：</p>
<p>Flex SDK可以和不同版本的Flash Player相配。即使是使用Flex SDK 3.6，同样也可以开发出Flash Player 11.1支持的swf程序。（当然，前提是不使用Flex frameworks提供的组件，仅仅使用Flash Player提供的API）。通过使用不同版本Flash Player提供的playerglobal.swc文件，就可以让旧的Flex SDK兼容新的-swf-version和 -target-player编译属性。当然，也可以让新的Flex SDK兼容旧的-swf-version和-target-player。</p>
<p>例如，目前Adobe官方提供的最新版（也是最终版）Flex SDK版本为4.6。根据Adobe的说法，这个版本的Flex SDK的最低支持的-target-player为11.1。这是因为frameworks/libs/player中仅仅提供了11.1版本的playerglobal.swc。我们可以将旧版本的playerglobal.swc复制到该目录下，并修改frameworks/flex-config.xml中的target-player标签，以改变Flex SDK默认编译的swf目标。当然，更方便和灵活的做法是在Flex项目的编译属性中设置-target-player属性。</p>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/1486.htm/feed</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
	</channel>
</rss>

