<?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 &#187; 技术</title>
	<atom:link href="http://zengrong.net/post/category/technology/feed" rel="self" type="application/rss+xml" />
	<link>http://zengrong.net</link>
	<description>Flash、Flex、RIA、web、Linux和我的生活</description>
	<lastBuildDate>Thu, 09 Feb 2012 15:09:36 +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>Bash数组操作教程</title>
		<link>http://zengrong.net/post/1518.htm</link>
		<comments>http://zengrong.net/post/1518.htm#comments</comments>
		<pubDate>Thu, 09 Feb 2012 15:01:33 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[BASH]]></category>
		<category><![CDATA[linux]]></category>
		<category><![CDATA[shell]]></category>

		<guid isPermaLink="false">http://zengrong.net/?p=1518</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/1518.htm" title="Bash数组操作教程"></a>source on github 一、定义数组 1. 使用[]操作符 ?View Code BASHnames&#91;0&#93;='zrong' names&#91;1&#93;='jacky' 2. 使用()直接赋值 ?View Code BASHnames=&#40;'zrong' 'jacky'&#41; # 或 names=&#40;&#91;0&#93;='zrong' &#91;1&#93;='jacky'&#41; 3. 使用declare -a定义数组。这种方法可以将一个空的变量定义成数组类型。 ?View Code BASHdeclare -a names 4. 从文件中读取数组 ?View Code BASHcat&#62;names.txt zrong jacky sweet Ctrl+C # 将每一行读取为数组的一个元素 names=&#40;`cat &#8230;<p class="read-more"><a href="http://zengrong.net/post/1518.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/1518.htm" title="Bash数组操作教程"></a><p><a href="https://github.com/zrong/blog/blob/master/bash_array.md">source on github</a></p>
<h2>一、定义数组</h2>
<h3>1. 使用[]操作符</h3>

<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('p1518code14'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p151814"><td class="code" id="p1518code14"><pre class="bash" style="font-family:monospace;">names<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>=<span style="color: #ff0000;">'zrong'</span>
names<span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>=<span style="color: #ff0000;">'jacky'</span></pre></td></tr></table></div>

<h3>2. 使用()直接赋值</h3>

<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('p1518code15'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p151815"><td class="code" id="p1518code15"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">names</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'zrong'</span> <span style="color: #ff0000;">'jacky'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #666666; font-style: italic;"># 或</span>
<span style="color: #007800;">names</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>=<span style="color: #ff0000;">'zrong'</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">1</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>=<span style="color: #ff0000;">'jacky'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

<h3>3. 使用declare -a定义数组。这种方法可以将一个空的变量定义成数组类型。</h3>

<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('p1518code16'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p151816"><td class="code" id="p1518code16"><pre class="bash" style="font-family:monospace;"><span style="color: #7a0874; font-weight: bold;">declare</span> <span style="color: #660033;">-a</span> names</pre></td></tr></table></div>

<h3>4. 从文件中读取数组<span id="more-1518"></span></h3>

<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('p1518code17'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p151817"><td class="code" id="p1518code17"><pre class="bash" style="font-family:monospace;"><span style="color: #c20cb9; font-weight: bold;">cat</span><span style="color: #000000; font-weight: bold;">&gt;</span>names.txt
zrong
jacky
sweet
Ctrl+C
<span style="color: #666666; font-style: italic;"># 将每一行读取为数组的一个元素</span>
<span style="color: #007800;">names</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #000000; font-weight: bold;">`</span><span style="color: #c20cb9; font-weight: bold;">cat</span> <span style="color: #ff0000;">'names.txt'</span><span style="color: #000000; font-weight: bold;">`</span><span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

<h2>二、读取数组</h2>
<h3>1. 数组取值</h3>
<p>和ActionScript一样，Bash也使用[]操作符和基于0的下标来取值：</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('p1518code18'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p151818"><td class="code" id="p1518code18"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">adobe</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'Flash'</span> <span style="color: #ff0000;">'Flex'</span> <span style="color: #ff0000;">'Photoshop'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #800000;">${adobe[0]}</span>
<span style="color: #666666; font-style: italic;"># 打印</span>
<span style="color: #666666; font-style: italic;"># Flash</span></pre></td></tr></table></div>

<h3>2. 数组长度（元素个数）</h3>
<p>使用“@”这个特殊的下标，可以将数组扩展成列表，然后就可以使用bash中的获取变量长度的操作符“#”来获取数组中元素的个数了：</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('p1518code19'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p151819"><td class="code" id="p1518code19"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">adobe</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'Flash'</span> <span style="color: #ff0000;">'Flex'</span> <span style="color: #ff0000;">'Photoshop'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #800000;">${#adobe[@]}</span>
<span style="color: #666666; font-style: italic;"># 打印</span>
<span style="color: #666666; font-style: italic;"># 3</span></pre></td></tr></table></div>

<p>有趣的是，没有定义的数组下标，并不会占用数组中元素的个数：</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('p1518code20'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p151820"><td class="code" id="p1518code20"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">adobe</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">0</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>=<span style="color: #ff0000;">'Flash'</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">2</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>=<span style="color: #ff0000;">'Flex'</span> <span style="color: #7a0874; font-weight: bold;">&#91;</span><span style="color: #000000;">4</span><span style="color: #7a0874; font-weight: bold;">&#93;</span>=<span style="color: #ff0000;">'Photoshop'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #800000;">${#adobe[@]}</span>
<span style="color: #666666; font-style: italic;"># 打印</span>
<span style="color: #666666; font-style: italic;"># 3</span></pre></td></tr></table></div>

<h3>3. 获取数组的一部分</h3>
<p>命令替换对数组也是有效的，可以使用偏移操作符来取得数组的一部分：</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('p1518code21'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p151821"><td class="code" id="p1518code21"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">adobe</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'Flash'</span> <span style="color: #ff0000;">'Flex'</span> <span style="color: #ff0000;">'Photoshop'</span> <span style="color: #ff0000;">'Dreamweaver'</span> <span style="color: #ff0000;">'Premiere'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #800000;">${adobe[@]:1:3}</span>
<span style="color: #666666; font-style: italic;"># 打印</span>
<span style="color: #666666; font-style: italic;"># Flex Photoshop Dreamweaver</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #800000;">${adobe[@]:3}</span>
<span style="color: #666666; font-style: italic;"># 打印</span>
<span style="color: #666666; font-style: italic;"># Dreamweaver Premiere</span></pre></td></tr></table></div>

<h3>4. 连接两个数组</h3>

<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('p1518code22'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p151822"><td class="code" id="p1518code22"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">adobe</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'Flash'</span> <span style="color: #ff0000;">'Flex'</span> <span style="color: #ff0000;">'Photoshop'</span> <span style="color: #ff0000;">'Dreamweaver'</span> <span style="color: #ff0000;">'Premiere'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #007800;">adobe2</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'Fireworks'</span> <span style="color: #ff0000;">'Illustrator'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #007800;">adobe3</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #800000;">${adobe[@]}</span> <span style="color: #800000;">${adobe2[@]}</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #800000;">${#adobe3[@]}</span>
<span style="color: #666666; font-style: italic;"># 打印</span>
<span style="color: #666666; font-style: italic;"># 7</span></pre></td></tr></table></div>

<h2>三、修改数组</h2>
<h3>1. 替换数组元素</h3>
<p>模式操作符对数组也是有效的，可以使用它来替换数组中的元素</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('p1518code23'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p151823"><td class="code" id="p1518code23"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">adobe</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'Flash'</span> <span style="color: #ff0000;">'Flex'</span> <span style="color: #ff0000;">'Photoshop'</span> <span style="color: #ff0000;">'Dreamweaver'</span> <span style="color: #ff0000;">'Premiere'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #800000;">${adobe[@]/Flash/FlashCS5}</span>
<span style="color: #666666; font-style: italic;"># 打印</span>
<span style="color: #666666; font-style: italic;"># 注意，打印的结果是一个字符串列表，不是数组</span>
<span style="color: #666666; font-style: italic;"># FlashCS5 Flex Photoshop Dreamweaver Premiere</span>
<span style="color: #666666; font-style: italic;">#</span>
<span style="color: #666666; font-style: italic;"># 将替换后的值重新保存成数组</span>
<span style="color: #007800;">adobe</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #800000;">${adobe[@]/Flash/FlashCS5}</span><span style="color: #7a0874; font-weight: bold;">&#41;</span></pre></td></tr></table></div>

<h3>2. 删除数组元素</h3>
<p>使用命令替换并重新赋值的方式删除数组元素</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('p1518code24'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p151824"><td class="code" id="p1518code24"><pre class="bash" style="font-family:monospace;"><span style="color: #666666; font-style: italic;"># 删除Photoshop元素</span>
<span style="color: #007800;">adobe</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'Flash'</span> <span style="color: #ff0000;">'Flex'</span> <span style="color: #ff0000;">'Photoshop'</span> <span style="color: #ff0000;">'Dreamweaver'</span> <span style="color: #ff0000;">'Premiere'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #007800;">adobe</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #800000;">${adobe[@]:0:2}</span> <span style="color: #800000;">${adobe[@]:3}</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #800000;">${adobe[@]}</span>
<span style="color: #666666; font-style: italic;"># 打印</span>
<span style="color: #666666; font-style: italic;"># Flash Flex Dreamweaver Premiere</span></pre></td></tr></table></div>

<p>使用模式操作符删除数组元素</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('p1518code25'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p151825"><td class="code" id="p1518code25"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">adobe</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'Flash'</span> <span style="color: #ff0000;">'Flex'</span> <span style="color: #ff0000;">'Photoshop'</span> <span style="color: #ff0000;">'Dreamweaver'</span> <span style="color: #ff0000;">'Premiere'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #007800;">adobe</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #800000;">${adobe[@]/Photoshop/}</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #800000;">${adobe[@]}</span>
<span style="color: #666666; font-style: italic;"># 打印</span>
<span style="color: #666666; font-style: italic;"># Flash Flex Dreamweaver Premiere</span></pre></td></tr></table></div>

<h2>四、循环</h2>
<p>使用for in循环读取数组：</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('p1518code26'); return false;">View Code</a> BASH</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p151826"><td class="code" id="p1518code26"><pre class="bash" style="font-family:monospace;"><span style="color: #007800;">adobe</span>=<span style="color: #7a0874; font-weight: bold;">&#40;</span><span style="color: #ff0000;">'Flash'</span> <span style="color: #ff0000;">'Flex'</span> <span style="color: #ff0000;">'Photoshop'</span> <span style="color: #ff0000;">'Dreamweaver'</span> <span style="color: #ff0000;">'Premiere'</span><span style="color: #7a0874; font-weight: bold;">&#41;</span>
<span style="color: #000000; font-weight: bold;">for</span> item <span style="color: #000000; font-weight: bold;">in</span> <span style="color: #800000;">${adobe[@]}</span>;<span style="color: #000000; font-weight: bold;">do</span>
    <span style="color: #7a0874; font-weight: bold;">echo</span> <span style="color: #007800;">$item</span>
<span style="color: #000000; font-weight: bold;">done</span>
<span style="color: #666666; font-style: italic;"># 打印</span>
<span style="color: #666666; font-style: italic;"># Flash </span>
<span style="color: #666666; font-style: italic;"># Flex </span>
<span style="color: #666666; font-style: italic;"># Photoshop </span>
<span style="color: #666666; font-style: italic;"># Dreamweaver </span>
<span style="color: #666666; font-style: italic;"># Premiere</span></pre></td></tr></table></div>

<p>使用for循环读取数组：</p>
<pre><code>&lt;pre lang="BASH"&gt;
adobe=('Flash' 'Flex' 'Photoshop' 'Dreamweaver' 'Premiere')
len=${#adobe[@]}
for ((i=0;i&lt;$len;i++));do
    echo ${adobe[$i]}
done
# 打印
# Flash
# Flex
# Photoshop
# Dreamweaver
# Premiere
&lt;/pre&gt;
</code></pre>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/1518.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>ActionScript为什么默认使用Big Endian字节序？</title>
		<link>http://zengrong.net/post/1516.htm</link>
		<comments>http://zengrong.net/post/1516.htm#comments</comments>
		<pubDate>Wed, 08 Feb 2012 02:56:28 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[BitAndByte]]></category>

		<guid isPermaLink="false">http://zengrong.net/?p=1516</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/1516.htm" title="ActionScript为什么默认使用Big Endian字节序？"></a>一直不明白既然目前多数CPU内部都使用Little Endian字节序，为什么ActionScript3中的ByteArray默认使用Big Endian字节序。 看了下面的文章，大致明白了： 或许ActionScript是为了兼容TCP/IP协议的Big Endian字节序？ 下文转自：http://linux.chinaunix.net/techdoc/desktop/2009/06/26/1120396.shtml Big Endian和Little Endian的区别 故事的起源 “endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开，由此曾发生过六次叛乱，其中一个皇帝送了命，另一个丢了王位。 我们一般将endian翻译成“字节序”，将big endian和little endian称作“大尾”和“小尾”。 什么是Big Endian和Little Endian？ 在设计计算机系统的时候，有两种处理内存中数据的方法。一种叫为little-endian，存放在内存中最低位的数值是来自数据的最右边部分（也就是数据的最低位部分）。 比如某些文件需要在不同平台处理，或者通过Socket通信。这方面我们可以借助ntohl(), ntohs(), htonl(), and htons()函数进行格式转换， 个人补充：一个操作数作htonl或ntohl结果不一定相同，当机器字节序跟网络字节序刚好是仅仅big endian和little endian的区别时是相同的。 如何理解Big Endian和Little Endian 举个例子： int a = 1; a这个数本身的16进制表示是0&#215;00 00 00 01 在内存中怎么存储呢? &#8230;<p class="read-more"><a href="http://zengrong.net/post/1516.htm">继续阅读 &#187;</a></p>]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/1516.htm" title="ActionScript为什么默认使用Big Endian字节序？"></a><p>一直不明白既然目前多数CPU内部都使用Little Endian字节序，为什么ActionScript3中的ByteArray默认使用Big Endian字节序。</p>
<p>看了下面的文章，大致明白了：</p>
<p>或许ActionScript是为了兼容TCP/IP协议的Big Endian字节序？<span id="more-1516"></span></p>
<p>下文转自：http://linux.chinaunix.net/techdoc/desktop/2009/06/26/1120396.shtml</p>
<h3>Big Endian和Little Endian的区别</h3>
<ol>
<li>故事的起源 “endian”这个词出自《格列佛游记》。小人国的内战就源于吃鸡蛋时是究竟从大头(Big-Endian)敲开还是从小头(Little-Endian)敲开，由此曾发生过六次叛乱，其中一个皇帝送了命，另一个丢了王位。 我们一般将endian翻译成“字节序”，将big endian和little endian称作“大尾”和“小尾”。 </li>
<li>什么是Big Endian和Little Endian？ 在设计计算机系统的时候，有两种处理内存中数据的方法。一种叫为little-endian，存放在内存中最低位的数值是来自数据的最右边部分（也就是数据的最低位部分）。 比如某些文件需要在不同平台处理，或者通过Socket通信。这方面我们可以借助ntohl(), ntohs(), htonl(), and htons()函数进行格式转换， 个人补充：一个操作数作htonl或ntohl结果不一定相同，当机器字节序跟网络字节序刚好是仅仅big endian和little endian的区别时是相同的。 </li>
<li>如何理解Big Endian和Little Endian    举个例子： int a = 1; a这个数本身的16进制表示是0&#215;00 00 00 01 在内存中怎么存储呢? 如果你的CPU是intel x86架构的(基本上就是通常我们说的奔腾cpu),那么就是0&#215;01 0&#215;00 0&#215;00 0&#215;00 , 这也就是所谓的little-endian, 低字节存放在内存的低位. 如果你的CPU是老式AMD系列的(很老很老的那种，因为最新的AMD系列已经是x86架构了), 它的字节序就是big-endian, 其内存存储就是 0&#215;00 0&#215;00 0&#215;00 0&#215;01在内存中从高字节开始存放。 现在世界上绝大多数的CPU都是little-endian。 </li>
<li>了解big-endian和little-endian有什么作用？ 一个重要的作用就是了解在网络上不同的机器间的数据如何传输。 假设我们在网络上有两台机器A和B, 其中A为little-endian,B为big-endian 机器A要传输上面的整数a给机器B，如何传输呢？ 过程是这样的： 机器A先把a在内存中的四个字节0x 01 0&#215;00 0&#215;00 0&#215;00转化为网络字节序0&#215;00 0&#215;00 0&#215;00 0&#215;01，然后一个字节一个字节(从0&#215;00到0&#215;01)喂到网络上去 然后机器B从网络上一个字节一个字节地取出四个字节0&#215;00 0&#215;00 0&#215;00 0&#215;01后又会转化为本地字节序 0&#215;00 0&#215;00 0&#215;00 0&#215;01后放入内存。因而B正确地得到了来自A的数据a 如果数据缺少在网络上的字节序转换的话，情况会怎样呢？ 机器A先把a由在内存的四个字节0x 01 0&#215;00 0&#215;00 0&#215;00 一个字节一个字节地喂到网络上，然后机器B从网络上一个字节一个字节地收到0x 01 0&#215;00 0&#215;00 0&#215;00并放入到内存中, B认为他收到了0&#215;01000000, 也就是十进制数1677216,这显然是错误的. </li>
<li>如何判断系统是Big Endian还是Little Endian？ 在/usr/include/中（包括子目录）查找字符串BYTE_ORDER(或_BYTE_ORDER, __BYTE_ORDER)，确定其值。这个值一般在endian.h或machine/endian.h文件中可以找到,有时在feature.h中，不同的操作系统可能有所不同。一般来说，Little Endian系统BYTE_ORDER(或_BYTE_ORDER,__BYTE_ORDER)为1234，Big Endian系统为4321。大部分用户的操作系统（如windows, FreeBsd,Linux）是Little Endian的。少部分，如MAC OS ,是Big Endian 的。本质上说，Little Endian还是Big Endian与操作系统和芯片类型都有关系。 </li>
</ol>
]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/1516.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<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[<a href="http://zengrong.net/post/1510.htm" title="Signals框架介绍（三）原生事件"></a>注意：本文参考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[<a href="http://zengrong.net/post/1510.htm" title="Signals框架介绍（三）原生事件"></a><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="p151028"><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="p1510code28"><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[<a href="http://zengrong.net/post/1507.htm" title="Signals框架介绍（二）高级事件"></a>注意：本文参考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[<a href="http://zengrong.net/post/1507.htm" title="Signals框架介绍（二）高级事件"></a><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('p1507code35'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150735"><td class="code" id="p1507code35"><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('p1507code36'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150736"><td class="code" id="p1507code36"><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('p1507code37'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150737"><td class="code" id="p1507code37"><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('p1507code38'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150738"><td class="code" id="p1507code38"><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="p150739"><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="p1507code39"><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="p150740"><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="p1507code40"><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>10</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[<a href="http://zengrong.net/post/1506.htm" title="PuTTYcyg的替代者FuTTY"></a>我一直是使用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[<a href="http://zengrong.net/post/1506.htm" title="PuTTYcyg的替代者FuTTY"></a><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>2</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[<a href="http://zengrong.net/post/1504.htm" title="Signals框架介绍（一）基本用法"></a>注意：本文参考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[<a href="http://zengrong.net/post/1504.htm" title="Signals框架介绍（一）基本用法"></a><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('p1504code47'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150447"><td class="code" id="p1504code47"><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('p1504code48'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150448"><td class="code" id="p1504code48"><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('p1504code49'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150449"><td class="code" id="p1504code49"><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('p1504code50'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150450"><td class="code" id="p1504code50"><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('p1504code51'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150451"><td class="code" id="p1504code51"><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('p1504code52'); return false;">View Code</a> ACTIONSCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p150452"><td class="code" id="p1504code52"><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[<a href="http://zengrong.net/post/1502.htm" title="Flash Builder安装和卸载错误的解决办法"></a>今天准备卸载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[<a href="http://zengrong.net/post/1502.htm" title="Flash Builder安装和卸载错误的解决办法"></a><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>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[<a href="http://zengrong.net/post/1494.htm" title="Android设备分辨率计算"></a>面对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[<a href="http://zengrong.net/post/1494.htm" title="Android设备分辨率计算"></a><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>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[<a href="http://zengrong.net/post/1486.htm" title="Flex编译器参数中-swf-version与-target-player之关系"></a>今天下载了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[<a href="http://zengrong.net/post/1486.htm" title="Flex编译器参数中-swf-version与-target-player之关系"></a><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>
		<item>
		<title>对RTMP视频流进行BitmapData.draw()出错的解决办法</title>
		<link>http://zengrong.net/post/1483.htm</link>
		<comments>http://zengrong.net/post/1483.htm#comments</comments>
		<pubDate>Thu, 01 Dec 2011 05:52:23 +0000</pubDate>
		<dc:creator>zrong</dc:creator>
				<category><![CDATA[技术]]></category>
		<category><![CDATA[BitmapData]]></category>
		<category><![CDATA[FMS]]></category>
		<category><![CDATA[RTMP]]></category>

		<guid isPermaLink="false">http://zengrong.net/?p=1483</guid>
		<description><![CDATA[<a href="http://zengrong.net/post/1483.htm" title="对RTMP视频流进行BitmapData.draw()出错的解决办法"></a>source on github 在对Flash Media Server中的视频流使用BitmapData.draw()进行绘制的时候，会抛出这样异常： cannot access rtmp://xxxxx. No policy files granted access. at flash.display::BitmapData/draw() 这个错误出现的原因是，客户端（swf）没有权限复制NetStream中的原始视频数据。看提示，是需要一个策略文件。 但是，在FMS服务器上无法放置策略文件，FMS也不能像Socket服务器那样发送策略文件给客户端，这种情况应该怎么处理呢？ 答案在这里： http://help.adobe.com/en_US/flashmediaserver/ssaslr/WS5b3ccc516d4fbf351e63e3d11a11afc95e-7ec3SSASLR.html#WS5b3ccc516d4fbf351e63e3d11a11afc95e-7fcbSSASLR 只需要FMS在同意client连接后，为其设置videoSampleAccess属性即可。videoSampleAccess的设置方式与readAccess相同。 范例： ?View Code JAVASCRIPTapplication.onConnect = function&#40;$client&#41; &#123; application.acceptConnection&#40;$client&#41;; //设置成&#34;/&#34;，允许所有路径 client.videoSampleAccess = &#34;/&#34;; &#125;]]></description>
			<content:encoded><![CDATA[<a href="http://zengrong.net/post/1483.htm" title="对RTMP视频流进行BitmapData.draw()出错的解决办法"></a><p><a href="https://github.com/zrong/blog/blob/master/bitmapdata_draw_on_rtmp_video.md">source on github</a></p>
<p>在对Flash Media Server中的视频流使用BitmapData.draw()进行绘制的时候，会抛出这样异常：</p>
<blockquote>
<p>cannot access rtmp://xxxxx. No policy files granted access.<br />
  at flash.display::BitmapData/draw()</p>
</blockquote>
<p>这个错误出现的原因是，客户端（swf）没有权限复制NetStream中的原始视频数据。看提示，是需要一个策略文件。</p>
<p>但是，在FMS服务器上无法放置策略文件，FMS也不能像Socket服务器那样发送策略文件给客户端，这种情况应该怎么处理呢？<span id="more-1483"></span></p>
<p><strong>答案在这里：</strong></p>
<p><a href="http://help.adobe.com/en_US/flashmediaserver/ssaslr/WS5b3ccc516d4fbf351e63e3d11a11afc95e-7ec3SSASLR.html#WS5b3ccc516d4fbf351e63e3d11a11afc95e-7fcbSSASLR">http://help.adobe.com/en_US/flashmediaserver/ssaslr/WS5b3ccc516d4fbf351e63e3d11a11afc95e-7ec3SSASLR.html#WS5b3ccc516d4fbf351e63e3d11a11afc95e-7fcbSSASLR</a></p>
<p><strong>只需要FMS在同意client连接后，为其设置videoSampleAccess属性即可。videoSampleAccess的设置方式与readAccess相同。</strong></p>
<p>范例：</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('p1483code54'); return false;">View Code</a> JAVASCRIPT</span><div class="codebox_clear"></div></div><div class="wp_codebox"><table><tr id="p148354"><td class="code" id="p1483code54"><pre class="javascript" style="font-family:monospace;">application.<span style="color: #660066;">onConnect</span> <span style="color: #339933;">=</span> <span style="color: #003366; font-weight: bold;">function</span><span style="color: #009900;">&#40;</span>$client<span style="color: #009900;">&#41;</span>
<span style="color: #009900;">&#123;</span> 
    application.<span style="color: #660066;">acceptConnection</span><span style="color: #009900;">&#40;</span>$client<span style="color: #009900;">&#41;</span><span style="color: #339933;">;</span>
    <span style="color: #006600; font-style: italic;">//设置成&quot;/&quot;，允许所有路径</span>
    client.<span style="color: #660066;">videoSampleAccess</span> <span style="color: #339933;">=</span> <span style="color: #3366CC;">&quot;/&quot;</span><span style="color: #339933;">;</span> 
<span style="color: #009900;">&#125;</span></pre></td></tr></table></div>

]]></content:encoded>
			<wfw:commentRss>http://zengrong.net/post/1483.htm/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

