<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0">
<channel>
<title><![CDATA[*Eoocy's Blog*]]></title>
<link>http://www.eoocy.com/</link>
<description><![CDATA[激情的工作 开心的生活]]></description>
<language>zh-cn</language>
<copyright><![CDATA[Copyright 2005 PBlog3 v2.8]]></copyright>
<webMaster><![CDATA[lihelihe@126.com(Eoocy)]]></webMaster>
<generator>PBlog2 v2.4</generator> 
<image>
	<title>*Eoocy&#39;s Blog*</title>
	<url>http://www.eoocy.com/images/logos.gif</url>
	<link>http://www.eoocy.com/</link>
	<description>*Eoocy&#39;s Blog*</description>
</image>

			<item>
			<link>http://www.eoocy.com/article.asp?id=16</link>
			<title><![CDATA[终于拿到Surface玩了]]></title>
			<author>lihelihe@126.com(aaron)</author>
			<category><![CDATA[Other]]></category>
			<pubDate>Mon,18 Jan 2010 21:39:32 +0800</pubDate>
			<guid>http://www.eoocy.com/default.asp?id=16</guid>
		<description><![CDATA[今天微软把surface机子送过来了<br/>仔细的玩了一下某些方面还是值得学习的<br/>从实用价值来看 嘿嘿....&nbsp;&nbsp;反正要是送我一个 我是笑纳的 哈哈~~<br/><img src="http://www.eoocy.com/tempImages/serface1.jpg" border="0" alt=""/><br/><img src="http://www.eoocy.com/tempImages/serface2.jpg" border="0" alt=""/>]]></description>
		</item>
		
			<item>
			<link>http://www.eoocy.com/article.asp?id=15</link>
			<title><![CDATA[3D弧形墙]]></title>
			<author>lihelihe@126.com(aaron)</author>
			<category><![CDATA[我的作品]]></category>
			<pubDate>Fri,15 Jan 2010 21:16:05 +0800</pubDate>
			<guid>http://www.eoocy.com/default.asp?id=15</guid>
		<description><![CDATA[一直想把这个放上来 总想不起来 今天抽出点时间<br/>可以看看效果<br/><br/><img src="http://www.eoocy.com/tempImages/huwall.jpg" border="0" alt=""/><br/><br/>体验一下吧<br/><a target="_blank" href="http://www.eoocy.com/tempImages/huwall/curve_wall.html" rel="external">http://www.eoocy.com/tempImages/huwall/curve_wall.html</a>]]></description>
		</item>
		
			<item>
			<link>http://www.eoocy.com/article.asp?id=14</link>
			<title><![CDATA[视频识别技术]]></title>
			<author>lihelihe@126.com(aaron)</author>
			<category><![CDATA[我的作品]]></category>
			<pubDate>Sun,03 Jan 2010 22:07:36 +0800</pubDate>
			<guid>http://www.eoocy.com/default.asp?id=14</guid>
		<description><![CDATA[知道视频识别技术已经很久了 但一直没时间研究它 最近花了点时间终于有所成效<br/><br/>真兴奋 我尽然把所有交互的难点都突破了 这是最主要的 要不有交互的效果实现不了 <br/>加载各种格式的模型MD2 DAE ASE 等等 控制模型动画播放交互&nbsp;&nbsp;控制模型内部单个节点无素交互 并且可以实现自定义唯一识别标识 YES!~~ <br/><br/><img src="http://www.eoocy.com/tempImages/ar.jpg" border="0" alt=""/><br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.eoocy.com/article.asp?id=13</link>
			<title><![CDATA[3D图片球信息展示效果]]></title>
			<author>lihelihe@126.com(aaron)</author>
			<category><![CDATA[我的作品]]></category>
			<pubDate>Sun,03 Jan 2010 22:00:11 +0800</pubDate>
			<guid>http://www.eoocy.com/default.asp?id=13</guid>
		<description><![CDATA[最近做了一个3D图片球信息展示效果 感觉还不错 支持变形由球形变成环绕形<br/><br/>放上一个小版本的玩吧 实际的比这个大<br/><a target="_blank" href="http://www.eoocy.com/tempImages/ball/flashmo_097_3d_sphere.html" rel="external">http://www.eoocy.com/tempImages/ball/flashmo_097_3d_sphere.html</a><br/><br/><br/><img src="http://www.eoocy.com/tempImages/球型.jpg" border="0" alt=""/><br/><br/><br/>变形<br/><img src="http://www.eoocy.com/tempImages/变型2.jpg" border="0" alt=""/><br/><br/><br/>]]></description>
		</item>
		
			<item>
			<link>http://www.eoocy.com/article.asp?id=12</link>
			<title><![CDATA[改行做WPF C#]]></title>
			<author>lihelihe@126.com(aaron)</author>
			<category><![CDATA[WPF &amp; C#]]></category>
			<pubDate>Thu,21 May 2009 11:01:54 +0800</pubDate>
			<guid>http://www.eoocy.com/default.asp?id=12</guid>
		<description><![CDATA[<p>最近一直在做WPF项目（C#版）和WIN7的多点触摸技术。</p>
<p>小有成就&nbsp;作品参加了国庆60周年大展 给我们的胡主席看了<img alt="" src="http://www.eoocy.com/fckeditor/editor/images/smiley/qq2007/2.gif" />。</p>
<p>在多点触摸技术里面我们公司还是做的比较成功的 这也得力于公司的后台视频信息技术的强力支持</p>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.eoocy.com/article.asp?id=11</link>
			<title><![CDATA[深受启发的一篇文章！]]></title>
			<author>lihelihe@126.com(aaron)</author>
			<category><![CDATA[Other]]></category>
			<pubDate>Tue,20 Jan 2009 12:07:33 +0800</pubDate>
			<guid>http://www.eoocy.com/default.asp?id=11</guid>
		<description><![CDATA[<p><span style="font-size: small"><font color="#990000">杨石头：自己，是一切的根源，也是所有问题的答案</font></span></p>
<p>&nbsp;</p>
<p>&nbsp;</p>
<p style="text-align: center"><span style="font-size: small"><span style="color: #000000"><strong><span style="font-size: x-small"><img height="525" alt="" width="350" src="http://www.adquan.com/images/shitou4.jpg" /></span></strong></span></span></p>
<p><span style="font-size: small"><strong><span style="color: #993300">从创意小兵到奥美集团高管，杨石头的跨界资源经营</span></strong></span></p>
<p><span style="font-size: small">杨石头，这是一个有着传奇色彩的名字。坊间传闻，此人比稿凭借几篇策略，就在五家4A比稿中拿下了一千万的业务，还一签两年；官至梅高中国区副总经理后，转换身份去了北京奥美做了一介月薪3000的普通文案&hellip;&hellip;之后由因为种种原因又回到客户部的桌子上，成为自陶雷之后又一位在奥美担任高层的大陆人士；作为北京奥组会的官方执行顾问，获得了国际奥委会颁发的金质嘉奖。目前又担任国家商务部品牌管理发展中心的首席品牌顾问，帮助陷入困境的众多出口企业，走出新的品牌发展之路。</span></p>
<p><span style="font-size: small">每个拉风的名字背后至少会有个有趣的灵魂。因为在学校里被同学喜欢直呼其&ldquo;石头&rdquo;，他索性给自己改了名字，正式把小名扶正，&ldquo;杨石头&rdquo;由此横空出世。</span></p>
<p><span style="font-size: small">《广告门》对杨石头的访问约在华丽大厦的一个休闲吧里，正值年末，华丽大厦华丽丽的大厅里孤零零的摆着一棵粉色许愿树，上面红艳艳的新年心愿，会随着进门气流小规模的跳起摇摆舞。穿过大厅，左拐右转，就是静中取闹的乐澜宗，店里每个凹着造型的俊男靓女都疑似奥美员工。石头老师迟到了。</span></p>
<p><span style="font-size: small">有着15年从业经历的杨石头，典型是个历经一轮轮过滤留下来广告人精儿，毫无疑问的资深人士，不过现在很难再用传统的职位划分法给石头定位了。</span></p>
<p><span style="font-size: small">&ldquo;你们不是客户，来，给你一张朋友用的私人名片吧。&rdquo;这是石头连连抱歉后的第一句话。趁着石头匆忙扒拉饭的功夫，我研究下手里的名片，白底黑字，形状像块憨厚发福的鹅卵石，简单朴素，一面印着杨石头的中英文，另一面陈列了三个职位：2008北京奥组委官方执行顾问；奥美整合传播集团北中国区集团事业发展总监，及奥美广告国内事业群副总经理；北京大学新闻传播学院IMC研究生班主讲教师。</span></p>
<p><span style="font-size: small">三种貌似不搭界的身份，如何在石头身上和谐共处的呢？几句闲扯之后，劳博开始循循善诱，说起话来行云流水的石头也爽快的打开了话匣子。</span></p>
<p style="text-align: center"><span style="font-size: small"><img height="375" alt="" width="500" src="http://www.adquan.com/images/shitou1.jpg" /></span></p>
<p style="text-align: center"><span style="font-size: small"><span style="font-size: x-small">每个出现在视线里带着眼镜的男人都疑似杨石头。</span></span></p>
<p style="text-align: left"><span style="font-size: small"><strong><span style="color: #993300">梅高中国区副总渴望做文案，33岁的石头中了创意的毒</span></strong></span></p>
<p><span style="font-size: small">石头上学时严重偏科，第一次时语文年级第一，总成绩倒数第二（倒数第一的是个弱智！每次说到这里，石头总要强调一下，其实总分最差是他）。第二次高考他选择了美术方向，从四川考到北京服装学院学美术，毕业后也在广告公司做过美术，本来要去被他看作职业生涯原点的奥美做美术设计工作，但因为北京奥美第一任总经理陈碧富从奥美出来创办观唐，杨石头成为了最早去创业观唐的员工，转成了业务工作。</span></p>
<p><span style="font-size: small">&ldquo;我入行时就明白：跟对人，远比有个带光环的公司重要。&rdquo;在快速发展的观唐，因崇拜而追随的杨石头在这得到了浓缩式的提高和成长，并扛起了公司55％的营业额，北京观唐上轨道后，他主动请缨去发展上海观唐。两年后，他去了梅高，负责建构上海分公司，一直做到梅高中国区副总的位置。直到这时，他忽然又从梅高回到奥美做一个文案，这个转折很多人都看不懂。</span></p>
<p><span style="font-size: small">&ldquo;其实我和TB（宋轶铭）聊过这事，我跟他说，电脑可以杀毒，人脑有的时候杀不了毒。&rdquo;用中毒来形容，可见感触至深，只因工作顺了以后，自己的某些原初观念反而会变成一种心结。他的第一个心结就是：人要成为梦想的主人，而不是钱财的奴隶。于是忍不住要去想自己的梦想在哪里。</span></p>
<p><span style="font-size: small">&ldquo;我是一个美术出身的人，经常有以前的伙伴会和我说：石头哥，瞧，这是我今年的获奖。听到这种消息除了为伙伴鼓掌，心里却是挺难受的，尽管你业务可能五千万八千万做得很好的，但你还是会觉得我怎么没获过奖啊，我怎么没做出好的创意啊！&rdquo;</span></p>
<p><span style="font-size: small">这个难受越来越纠结，到了让他开始失眠的地步，这时母亲的手术也给他带来了很大的转变。他辞去了一切职务工作陪护老人，怕的就是留下遗憾。手术顺利后，他也反思了自己人生有没有遗憾，决定一定要好好做一把创意，一定得去实现这件事。</span></p>
<p><span style="font-size: small">因为做美术回去操机已经不行了，加上对自己写写文字还比较有信心，杨石头决定去做文案。由于心里一直把奥美看作职业的精神原点，对其他公司都没有归属感，想要回归创意的石头也认准奥美。</span></p>
<p><span style="font-size: small">&ldquo;那时我在上海已经算是有家有房了，我把上海奥美的CD、ACD都叫到家里，说大哥求你们点事儿，我想做一个文案。他们听完都乐了，哈哈笑，说你没受刺激吧？我说我没受刺激，我想实现一下我的这个愿望。&rdquo;</span></p>
<p><span style="font-size: small">当时行业很多人认为杨石头是在玩票，求职一直没有回复。他还快递给ECD一放着石头的水盆，写上&ldquo;何时水落石出啊？&rdquo; 问了半天，也没有消息。最后终于得到一个上海奥美的freelancer机会，没想一个星期不到就被fire了。&ldquo;不知道是那个新加坡的CD不喜欢我，还是觉得不对，反正是要让到财务领工资走人，你不知道，当时我下楼的时候腿一直抖啊，丢人啊，可能是心理没有调试好，坐在楼下花坛边上简直喘不上来气儿，呵呵。&rdquo;</span></p>
<p><span style="font-size: small">这件事激发了杨石头的偏执，他又给北京奥美打电话，先后3次北上，谈了5次，还是没有结果。之后他用A3的大纸，写了满版小五号的字，写自己为什么没有威胁，为什么不是玩闹，为什么不是坏人。&ldquo;每一个石头都有他的梦想，我不知道天堂是不是黑暗的，但是我知道天使该是光明的。如果要实现自己的创意梦想，总该有个天使给我，对吧？&rdquo;谁想到还是没人理睬。杨石头急了，他准备把当时奥美所在的蓝宝大厦电梯里的广告都包了，&ldquo;一年十四万。我在上面写上：我想做COPY。呵呵，我让这个公司上上下下全看见这是一个有志的老青年的梦想，我那个时候已经快33岁了。&rdquo;</span></p>
<p><span style="font-size: small">03年底终于柳暗花明，当时的资深前辈创意总监刘继武，决定开恩收留这个执着的家伙。&ldquo;我那个时候没有Leader，没有CD，没人愿意答理我，就是孤零零的自己做，但是我很开心，有个活就抢。&rdquo;石头还专门找了一个Art，求他跟自己合租，房租自己全付，目的就是晚上能跟他一起做想做的创意稿（也包括飞机稿）。&ldquo;那个Art都惊了，说怎么会有这样的神经病啊。&rdquo;</span></p>
<p><span style="font-size: small">做到半年的时候，因为熬夜身体透支，得了美尼尔晕厥症。这个时候奥美新来的CD又把他给投诉了，理由是杨石头把卫生巾写得和哲学一样，说他是一个很好的account，还是不要捣乱了，让他回去客户部吧。之后集团找他谈话，让他最难受的倒不是说他创意做的不好，而是最后一句话：&ldquo;石头啊，要知道啊，创意是要有天分的啊。&rdquo;&hellip;&hellip;&ldquo;哇靠，这个打击实在太大了。&rdquo;石头到今天还觉得委屈。</span></p>
<p><span style="font-size: small"><strong><span style="color: #993300">升职不过是不断的调整角色</span></strong></span></p>
<p><span style="font-size: small">再回到业务系统已经不是他自己的兴趣和心愿了。&ldquo;当时大陆人没有BD，四大BD都是外籍嘛，我说我申请做BD吧。薪资比他们低，集团就同意让我试试&rdquo;。此刻的石头已经是&ldquo;不争馒头争口气了&rdquo;的心态。</span></p>
<p><span style="font-size: small">经过一番折腾，再回到熟悉的领域，他在新工作中很快如鱼得水。当时赶上奥美与长虹再续前缘的关键时刻。此前奥美服务长虹了八个月之后，因为长虹内部换帅，导致与奥美的合作解约，几年后人事重新变动后，又重新与奥美接洽，杨石头团队顺利拿来这笔大单子。</span></p>
<p><span style="font-size: small">由于业绩一直不错，杨石头的职位从奥美广告升到奥美集团，身份慢慢多元叠加，&ldquo;我的升职公告都是说在调整，我不是在升职，只是在调整工作角色，心态上已经过了需要职位来证明自己的状态。&rdquo;在一次公司会议上，被要求谈谈想法的石头说：&ldquo;我是个大陆草根，你们都比我优秀，我能做到这样，说明这是一个什么都有可能的时代，我在前面等你，你持续相信一件事情是真的，常常就是真的。今天给我鼓掌的手，请一定为你自己加油。&rdquo;</span></p>
<p><span style="font-size: small"><span style="color: #993300"><strong>沉下来做事，上达咨询，下到市场</strong> </span></span></p>
<p><span style="font-size: small">最早做美术时，杨石头认为广告是艺术，之后被教育后深信广告是科学，现在他还是觉得广告是艺术。&ldquo;不过是更大格局，是人类学的艺术&rdquo;。</span></p>
<p><span style="font-size: small">要真正帮得上企业，需要结构化的思维，帮企业区分重要又紧急或重要不紧急的那些事情，规划长短线的发展，需要更像一个智库，或说用品牌行销的角度来审视企业现在的操作。<br />
&ldquo;行销必须向上延伸到咨询，向下延伸到市场，否则的话不能叫做整合行销传播集团。在中国，省、市、地、县、乡、镇、村，7级市场你都必须要清楚，需要去学习思考。而不是某个创意获奖了就去玩，玩完会发现什么都不剩。&rdquo;</span></p>
<p><span style="font-size: small">在石头看来只追求奖项的纯创意，就像自己骗自己，&ldquo;烧客户预算的房子，煮自己创意的鸡蛋，这是不道德的。这种在别人眼中找承认的做法没有根基，只有沉下来以后才能水涨船高，再往前走水到渠成、最终水落石出，竞争格局，产业集中度就会出现。&rdquo;</span></p>
<p><span style="font-size: small">&ldquo;09年我在思考是否让自己从地球人变成月球人，就是我会变成卫星，跨一条腿在客户那边。&rdquo;因为真正有效的品牌管家是需要植入客户内部的，成为他们首席品牌官，推动企业内部管理与建设，也从企业的角度管理代理商。</span></p>
<p style="text-align: center"><span style="font-size: small"><img height="375" alt="" width="500" src="http://www.adquan.com/images/shitou5.jpg" /></span></p>
<p style="text-align: center">&nbsp;</p>
<p style="text-align: center"><span style="font-size: x-small">丝丝升腾的烟火让人担心，只因空气里思想的花火霹雳啪啦。</span></p>
<p><span style="font-size: small"><strong><span style="color: #993300">追求唯一，做有势力的公司，催生多重角色</span></strong></span></p>
<p><span style="font-size: small">07年底的时候，杨石头管理着有5个客户事业组，在越忙越累的同时，他开始在更大的范围思考事情。把作业做好，会成为一个有能力的公司，规模做大，会变成有实力的公司。不过这两者的区别不过是业绩多少而已，用时间换发展，不如用空间推动发展。</span></p>
<p><span style="font-size: small">如何把量的区别变成质的区别呢？杨石头认为要想真正在中国具有长线价值，就要变成有势力的公司。&ldquo;有势力的公司，对这个社会有影响力，才能反推过来保证商业在内的其他整体格局的良好发展。一旦形成势力格局，你就不再会是4A之一，而是唯一。&rdquo;</span></p>
<p><span style="font-size: small">为了打造心目中的资源平台，杨石头开始了从商界、跨学界、跨政界、跨传媒界的资源经营，&ldquo;在这个市场中，有人在做资本运作，那我为什么不能做资源运作呢？在中国的资本运作，首先是资源运作。平台做好了，我就可以更好推动一些有意义有价值的事件产生， <br />
&rdquo;<br />
这个平台他已经越做越宽，但让他收获的不是获取了多少社会角色，而是自己得到外界的肯定。&ldquo;不一定你有身份就一定会有角色，而是你有内在的东西&rdquo;。有时候这种肯定会通过反馈荣誉表现出来。前段时间，在奥组委主席罗格和残奥会主席克雷格文表彰为奥运做出贡献的幕后英雄，联合签发颁奖令，杨石头的名字就出现在金奖部分。&ldquo;觉得挺欣慰的，你会觉得人生上半场没白混，做的事情有意义。&rdquo;</span></p>
<p><span style="font-size: small">现在奥美的两个身份，只是杨石头角色格局中的1/4。&ldquo;国际银行能做混业经营，为什么我不能做跨界管理呢？&rdquo;。而我们预测石头的身份以后还会越来越多。</span></p>
<p><span style="font-size: small"><strong><span style="color: #993300">想在前面，惶者生存</span></strong></span></p>
<p><span style="font-size: small">杨石头在观唐时曾被一个英国大客户忽悠过一次，使用的创意却没付费。当时第一反应自然是要告这个客户，但老板对他说：&ldquo;客户没道义，是应该去告他们，但作为担负着公司55%营业额的客户经理，石头，你为什么没预料到呢？&rdquo;杨石头当时一句话也没了，以后常常提醒自己看的更远一点，考虑更周全一些。</span></p>
<p><span style="font-size: small">而且在业务系统做，他心里也常有种不安全感，譬如觉得合同就是道义的承诺，&ldquo;如果因为事情没做好，造成解约，那耳光就打大了&rdquo;，他会因为不希望看到这种情况发生，习惯性的感到不安。这种不安全感，使他始终要想到前面，想到将要发生的事情。&ldquo;没想过和没想到，这是思维懒汉面对困境的时候最常用的话。&rdquo;</span></p>
<p><span style="font-size: small">他觉得我们今天的处境，是三年前以及更早时候的所思所想决定的，今天的选择也会影响到几年以后的情况。&ldquo;为什么有时候我睡得很晚？因为我白天想的事情，是决定现在的，可我晚上想什么，是决定将来的。这个是我每天的生活习惯。&rdquo; </span></p>
<p><span style="font-size: small"><strong><span style="color: #993300">2009年的问题，在2009年之外找答案</span></strong></span></p>
<p><span style="font-size: small">乐澜宗靠窗的位子，烟灰缸里的烟屁股一个一个在增多，透过脆弱泛黄的纱质窗帘，白花花的阳光一把一把的撒在桌子上，让人忍不住想伸个大懒腰。劳博和杨石头两个有志&ldquo;老&rdquo;男人越聊越开心，噼里啪啦，仿佛能在空气里听出点思想的火花，或者用现在流行的说法扯淡的火花吧――思想有多远，咱们就扯多远。</span></p>
<p><span style="font-size: small"><strong>劳博：</strong>现在我们都有一个困惑，不知道09年会怎么样，那么多大的国际公司都在收缩规模，压缩成本，对09年国内的大环境你有什么预想？</span></p>
<p><span style="font-size: small"><strong>杨石头：</strong>我觉得事件核心5%的客户会受到直接影响，15%的客户会受到间接影响，但是37%的人是心理恐慌性。做大事有三个条件：第一是远见；第二个取舍，第三个就是面对各种事情的权谋。</span></p>
<p><span style="font-size: small">这件事情根本不能只看09年，就像人33岁时出现问题了，但是你在33岁这时看是看不清楚的，还是要从40岁往回看。需要看的不仅战术和技术性的问题，同时也要看战术和政略型问题。</span></p>
<p><br />
<span style="font-size: small"><strong><span style="color: #993300">现在要做销量，更要做品牌</span></strong></span></p>
<p><span style="font-size: small">杨石头考察美国企业的情况后，认为他们没有所谓的中小企业，只有大公司或小企业，因为夹在中间既不是最好的也不是最便宜的，自然会死得难看。金融危机之后有两个趋势，一个是集中化，最大的最好的优势资源会继续增长。另一个就是性价比，将有很多小的新公司出现。在他看来，面对09年的情况，像奥美这样的大公司，开源节流、提升效率是最简单的应对策略。</span></p>
<p><span style="font-size: small">此外，09年还有一个重新出发的角度，是大国崛起的元年。&ldquo;中国的风水中沧海桑田就是这样嘛，中国30年河东30年河西是一个现象：1919年中国人觉醒，1949年建国，1979年改革开放，2009年大国崛起。&rdquo;但这个崛起在结构上是一个连续的过程，08的龙在敲门，09年会是国力的高点，2010年的广州亚运，甚至可能会变成全国运动会。&ldquo;连续的焦点都会在这里，国家的经济预期在增长，不用太担心。&rdquo;</span></p>
<p><span style="font-size: small">从微观的心理基础来说，国际上的影响会更重一些，全部都在收缩预算。国内更多是在考虑是否要逆势而动：不指望打得过大环境，但是要打过竞争对手。&ldquo;现在比较好的应对做好销量的同时，做好品牌内力。根据结构去安排自己的重点，现在会是一个内化的好时机，填补内部没做好的品牌梳理工作。&rdquo;</span></p>
<p><span style="font-size: small"><strong><span style="color: #993300">传播型行业中，小公司如何生存？</span></strong></span></p>
<p><span style="font-size: small">在传播型行业，有特点的中小型公司很少，要不就是很庞大追求规模化，要不就是些非常小、追求性价比的公司，很多人会考虑如何做有特点的小公司，小公司培养竞争力。杨石头认为<br />
在这个行业，没所谓规模大小，只有影响力的强弱。就像一些媒体，不能只去看它的收视率，而是要看社会影响力。&ldquo;央视的《对话》栏目，总体的收视率也不高，但是影响力高。&rdquo;</span></p>
<p><span style="font-size: small">虽然首先要活着，但公司要发展，不能只从规模上考虑，而要规划在结构上发展的空间：短期的利益来自对现有能力的充分开发，你能做什么；中期的利益来自于周边资源的有效整合，不能只是交名片，而要去交朋友，把他链接成利益相关方；长期利益就来自对新的竞争力的孕育。</span></p>
<p><span style="font-size: small">铺路和开车是要同步考虑的，光是开车，不铺路没有用。&ldquo;所以我自己认为，最有竞争力的公司是――最大的小公司，结构互补性的联盟体&rdquo;。操作小公司联盟时，一定要寻找差别点，并把那个点磨得锋利些，一方面对客户有独特化的价值，另一方面会成为大公司并肩前行的配套组合。 </span></p>
<p><span style="font-size: small"><strong><span style="color: #993300">系统竞争力决定未来？</span></strong></span></p>
<p><span style="font-size: small">大家常说的核心竞争力，拆开了就是创意要做好，策略要做好，媒介要做好。但杨石头却认为广告行业没有核心竞争力，只有系统竞争力，就是为企业谋划的可持续发展空间。&ldquo;第一因为你的行业本身就是寄生行业，是服务业。第二，你所有的营运方式是用时间来获得收益，这是有限的也是有问题的。第三件就是你本身的机制和结构中间，你太依赖于人，它就会飘忽起来，动荡性会很强。奥美之所以强是因为它系统建设得特别好。在操作客户中，如果是系统竞争力的考虑，我可以让客品牌户形象得分，持续的发展得益，渠道的商业得利，请问这些不是核心竞争力又是什么？&rdquo;</span></p>
<p><span style="font-size: small">&ldquo;比如举个例子，移动和联通的竞争，移动建一个动感地带，很便宜，族群就是18～22岁核心学生为主干切入这个品牌，这个品牌很另类，稀奇怪美，而现在是15～25岁都用动感地带，这个部分用个性卡一个价格竞争的防火墙。然后在全球通是&ldquo;我能&rdquo;来拉高度，再然后用神州行&ldquo;我看行&rdquo;铺广度，联通就被卡得没有战略空间了，这就是联通输的原因。&rdquo;</span></p>
<p><span style="font-size: small">做人也是一样，做头儿有三个阶段，第一阶段是势：要专业，腹有诗书气自华，你一出来就有气场了。在第二阶段就要做局：你有多牛取决于你周边的伙伴有多牛，你怎么把聚光灯放到这些伙伴身上，在这个过程中你只是压个阵而已，你是在搭台嘛！第三阶段就是做托儿了：我不出现了，可是我制造的土壤和空气在孕育着新的东西。这方面，TB（宋秩铭）做得就特别好，他会听所有意见，但是会有自己的选择，所以你说话时不用顾虑&ldquo;他是否会生气？&rdquo;。&ldquo;有时候我和做BD、GAD的伙伴聊天，我说可能我不认为都理解，或觉得你是对的，但至少我支持你，我支援你，你尽管往前走，事实上，我越来越觉得，所谓的客观都是各自的主观，这个世界没有绝对的对错，只有观点和角度；甚至我们这一生也没所谓成败，只有收获不同而已。&rdquo;</span></p>
<p style="text-align: center"><span style="font-size: small"><img height="375" alt="" width="500" src="http://www.adquan.com/images/shitou3.jpg" /></span></p>
<p style="text-align: center"><span style="font-size: x-small">两个有志&ldquo;青年&rdquo;，在冬日灿烂的阳光里合了个影。</span></p>
<p><span style="font-size: small"><strong><span style="color: #993300">十年后杨石头在做什么？</span></strong></span></p>
<p><span style="font-size: small">曾经有一个大佬问他下一步目标，石头说：&ldquo;我说了你可别恶心。我想为中国广告做点贡献。&rdquo;大佬笑了，说：&ldquo;哇靠，你去中广协工作好了，这个理想好大啊。&rdquo;</span></p>
<p><span style="font-size: small">但身在国际公司的杨石头觉得，如果他去马来西亚工作、去越南工作，可能不会有这种责任感，可是马来西亚人，越南人自己总是要有点理想吧。</span></p>
<p><span style="font-size: small">杨石头是个按星期过日子的人，一年52个星期，商业目标都是&ldquo;以终为始&rdquo;，什么时候要做到什么程度，然后反推回来今天该做什么。这样就能建构一个可触摸到的未来。照他的话说：&ldquo;我把梦想结构成理智的梦想，简称――理想&rdquo;</span></p>
<p><span style="font-size: small">十年对他来说不过是520个星期。&ldquo;我是地摊上捡一十字架就会把自己当耶稣的人。总忍不住去思考生活意义在哪，存在意义在哪的人，所以我觉得&ldquo;向死而生&rdquo;也可以看成――好好活，做有意义的事情，哈哈。&rdquo;</span></p>
<p><span style="font-size: small">这个有意义不会是商业上的。在他看来2008年是一个分水点：2008年之前所有的成功，是财富的总和，什么财富500强啊，一头牛跑了火箭的速度啊等等。而2008年之后，成功真正的概念，会是为一个伟大梦想所进行的全程奋斗与表演。</span></p>
<p><span style="font-size: small">&ldquo;没实现就罢了，可悲的不是没实现梦想，而是你就没梦想，我希望可以力所能及的在中国创造自己的游戏规则什么的，做点贡献，对吧？实现不了我就认了，你总得去试试。&rdquo;</span></p>
<p><span style="font-size: small">杨石头觉得自己现在就想去积极推动这个角色，&ldquo;上次评那个中国杰出营销奖，有评委说业绩是检验成功的唯一标准，我是极力反对的，如果挣钱就算是成功的话，那贩毒的要不要给奖啊？史玉柱弄了一个网络游戏，雇了一堆高手就在那里打来打去，打败了花钱买道具，再打&hellip;&hellip;对这个社会的意义在哪里呢？后来那个金奖给了九阳豆浆机，我觉得那是有意义的事情。&rdquo;</span></p>
<p><span style="font-size: small">采访将要结束时，杨石头和劳博聊起了广告门，他对广告门给予了一些精辟独到的建议，并称自己会考虑作为特别顾问来协助；劳博则因为又找到一个行业推动人而兴奋不已。</span></p>
<p><span style="font-size: small"><strong><span style="color: #993300">后记：</span></strong></span></p>
<p><span style="font-size: small">&ldquo;自己，是一切的根源&rdquo;。这是石头写在他笔记本扉页上的一句话&mdash;&mdash;不管你是什么角色，但凡整日围着简报和创意打转儿的广告人，都很难对这句话免疫，不一定哪个熬夜加班的晚上，哪根神经灵机一动，心里会冒出一个声音：十年以后我在做什么呢？如果你被这句话问住，说明你需要好好规划规划了。</span></p>
<p><span style="font-size: small">看劳博和石头老师的合影，有一瞬间被这两个有着孩子般纯真眼神的老男人感动了，在别人看来大而虚的&ldquo;意义、价值&rdquo;是他们为之奋斗的原点。</span></p>
<p><span style="font-size: small">石头老师在琢磨系统竞争力的时候有了自己的核心竞争力，我们的核心竞争力在哪呢？我们的意义和梦想又在哪里呢，它们现在还好吗？</span></p>
<p>&nbsp;</p>
<p style="text-align: center">&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.eoocy.com/article.asp?id=10</link>
			<title><![CDATA[AS3的精典功能经验技巧]]></title>
			<author>lihelihe@126.com(aaron)</author>
			<category><![CDATA[AS3技巧与特效]]></category>
			<pubDate>Tue,13 Jan 2009 14:51:53 +0800</pubDate>
			<guid>http://www.eoocy.com/default.asp?id=10</guid>
		<description><![CDATA[<p>在L4cd的BLOG上看到几个比较好的文章，现在整理一下，统一发布，感谢Lc4d共享他的经验<br />
&nbsp;</p>
<h4>1.getDefinition - 模块化你的程序</h4>
<p>为了加快程序的加载..<br />
我们通常会把不同的功能模块做成不同的swf,要需要的时候再进行加载.<br />
<br />
开始的时候..我们通常会直接使用loader加载,,然后用addChild把loader显示出来..<br />
这样就完成了最简单的&quot;模块&quot;化了..<br />
<br />
当然进一步..我们会发现上面的方法已经满足不了我们的需求..<br />
有时候我们需要的不是一个实例对象,我们想得到的是一个类..让我们可以像调用自身库中的类一样可以实例化..复制..等等<br />
<br />
这时候我们就可以使用ApplicationDomain(应用程序域),把加载进来的swf中的库的东西当自己的库一样使用<br />
<br />
概念性的东西还是不好说...<br />
直接看代码吧..下面的代码就是一个最简单的例子<br />
&nbsp;</p>
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="comment">//还是需要loader先进行加载 </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="keyword">var</span><span>&nbsp;loader:</span><span class="keyword">Loader</span><span>&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">Loader</span><span>() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>loader.contentLoaderInfo.</span><span class="keyword">addEventListener</span><span>(</span><span class="keyword">Event</span><span>.COMPLETE,loaderComplete) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//sub.swf是一个外部swf,该swf库里有一个链接名叫&quot;k_abc&quot;元件 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>loader.load(</span><span class="keyword">new</span><span>&nbsp;URLRequest(</span><span class="string">&quot;sub.swf&quot;</span><span>)) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="keyword">function</span><span>&nbsp;loaderComplete(e:</span><span class="keyword">Event</span><span>):</span><span class="keyword">void</span><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//创建一个应用程序域 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;app:</span><span class="keyword">ApplicationDomain</span><span>&nbsp;=&nbsp;loader.contentLoaderInfo.applicationDomain &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//使用getDefinition返回sub.swf的库中链接名为k_abc的Class </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;c:Class&nbsp;=&nbsp;app.getDefinition(</span><span class="string">&quot;k_abc&quot;</span><span>)&nbsp;as&nbsp;Class &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//接下来就不多说了..像普通的类一样操作就</span></li>
</ol>
</div>
<h4><br />
2.AS3中for循环创建(复制)对象</h4>
<p><br />
在as2中,我们经常使用for来创建或复制多个相同的对象,<br />
到了as3,由于建立对象的方法的改变,以前的方法已经不适用了.<br />
今天介绍一下as3的方法:<br />
方法常用的有两种,<br />
第一种适用所有的对象,方法是先建一个数组,然后把建立的对象的引用指定对数组相应的索引<br />
第二种适用显示对象,其实在as3中,都应该用这种方式,就是给对象指定name,然后使用getChildByName的方式来引用该对象.</p>
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="comment">//通用的方法,适用所以对象 </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="keyword">var</span><span>&nbsp;obj:</span><span class="keyword">Array</span><span>&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">Array</span><span>() &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;i:</span><span class="keyword">uint</span><span>=0;i&lt;10;i++){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;m:</span><span class="keyword">MovieClip</span><span>&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">MovieClip</span><span>() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;addChild(m) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;obj[</span><span class="string">&quot;mc&quot;</span><span>+i]&nbsp;=&nbsp;m &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li><span>trace(obj[</span><span class="string">&quot;mc1&quot;</span><span>]) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="comment">//适用显示对象 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;k:</span><span class="keyword">uint</span><span>=0;k&lt;10;k++){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;mm:</span><span class="keyword">MovieClip</span><span>&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">MovieClip</span><span>() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;mm.name&nbsp;=&nbsp;</span><span class="string">&quot;mc&quot;</span><span>+k &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;addChild(mm) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>} &nbsp;&nbsp;</span></li>
    <li><span>trace(getChildByName(</span><span class="string">&quot;mc1&quot;</span><span>))&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="as" name="code" style="display: none">
//通用的方法,适用所以对象
var obj:Array = new Array()
for(var i:uint=0;i&lt;10;i++){
	var m:MovieClip = new MovieClip()
	addChild(m)
	obj[&quot;mc&quot;+i] = m
}
trace(obj[&quot;mc1&quot;])

//适用显示对象
for(var k:uint=0;k&lt;10;k++){
	var mm:MovieClip = new MovieClip()
	mm.name = &quot;mc&quot;+k
	addChild(mm)
}
trace(getChildByName(&quot;mc1&quot;))
</pre>
<p><br />
另外,有时候我们会遇到这样的情况<br />
var obj0:MC0 = new MC0()<br />
var obj1:MC1 = new MC1()<br />
var obj2:MC2 = new MC2()<br />
var obj3:MC3 = new MC3()<br />
<br />
这个时修，我们可以使用getDefinitionByName,用字符串返回类<br />
&nbsp;</p>
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;i:</span><span class="keyword">uint</span><span>=0;i&lt;4;i++){ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;_class:Class&nbsp;=&nbsp;getDefinitionByName(</span><span class="string">&quot;MC&quot;</span><span>+i)&nbsp;as&nbsp;Class &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;m&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;_class() &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;addChild(m) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>
<h4><br />
3.代理类</h4>
<p>对于代理类,它的作用就是在不能传参数的时候帮助你传参数,什么时候不能传参数,<br />
像:<br />
<span style="color: #000000"><b>addEventListener(Event.COMPLETE,function)</b></span><br />
这个时候如果我们需要给function参指定的参数以达到不同的效果,就需要用到代理..,我们看看以下的用了代理函数的代码<br />
<span style="color: #000000"><b>addEventListener(Event.COMPLETE,getFun(function,args))</b></span><br />
<br />
这样,我们就可以在本来不可以传参的情况下传送参数.其中getFun就是代理函数.(一般网上都已经直接写成了代理类),getFun会帮我们把function,args生成一个无参数的函数再传给addEventListener,那么我们原来的function只需要写成<br />
function(e:Event[,参数]):void{<br />
　　//代码<br />
}<br />
就可以了</p>
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">function</span><span>&nbsp;getFun(_function:</span><span class="keyword">Function</span><span>,...alt):</span><span class="keyword">Function</span><span>{ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;_fun:</span><span class="keyword">Function</span><span>&nbsp;=&nbsp;</span><span class="keyword">function</span><span>&nbsp;(e:*):</span><span class="keyword">void</span><span>&nbsp;{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">var</span><span>&nbsp;_alt:</span><span class="keyword">Array</span><span>&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">Array</span><span>() &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;_function.apply(</span><span class="keyword">null</span><span>,_alt.concat(e,alt)); &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;}; &nbsp;&nbsp;</span></li>
    <li><span class="keyword">return</span><span>&nbsp;_fun; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<p>&nbsp;</p>
<h4>4.让对象removeChild时自动删除子对象/属性/侦听</h4>
<p>在AS3里..我们无法手动完全删除一个对象,,<br />
以MovieClip为例..<br />
我们只有在删除它的时候<br />
除了removeChild(对象)外<br />
还必须清空它的子对象<br />
删除所有动态添加的属性<br />
删除所有侦听<br />
删除所有引用<br />
然后等待垃圾回收,<br />
<br />
可是实际操作的时候..<br />
在长长的代码当中..经常会忘记自己什么时候写了侦听..什么时候添加了动态属性<br />
<br />
其实,,我们可以借用显示对象中的Event.REMOVED,在删除对象的时候,让对象自己调用删除函数,删除相关的东西<br />
<br />
下面这个类继承了MovieClip,当他的实例在removeChild的时候,对象将&quot;自我毁灭&quot;</p>
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">package</span><span>&nbsp;net.L4cd.display{ &nbsp;&nbsp;</span></span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">import</span><span>&nbsp;flash.display.</span><span class="keyword">MovieClip</span><span>; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">import</span><span>&nbsp;flash.events.</span><span class="keyword">Event</span><span>; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;dynamic&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">class</span><span>&nbsp;iMovieClip&nbsp;</span><span class="keyword">extends</span><span>&nbsp;</span><span class="keyword">MovieClip</span><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">var</span><span>&nbsp;lis:</span><span class="keyword">Array</span><span>;</span><span class="comment">//定义一数组保存侦听 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">function</span><span>&nbsp;iMovieClip(){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lis&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;</span><span class="keyword">Array</span><span>() &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">addEventListener</span><span>(</span><span class="keyword">Event</span><span>.REMOVED,remove)</span><span class="comment">//侦听删除事件 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//重写addEventListener,在增加侦听的时候..把相应的事件保存到数组 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;override&nbsp;</span><span class="keyword">public</span><span>&nbsp;</span><span class="keyword">function</span><span>&nbsp;</span><span class="keyword">addEventListener</span><span>(type:</span><span class="keyword">String</span><span>,&nbsp;listener:</span><span class="keyword">Function</span><span>,&nbsp;useCapture:</span><span class="keyword">Boolean</span><span>&nbsp;=&nbsp;</span><span class="keyword">false</span><span>,&nbsp;priority:</span><span class="keyword">int</span><span>&nbsp;=&nbsp;0,&nbsp;useWeakReference:</span><span class="keyword">Boolean</span><span>&nbsp;=&nbsp;</span><span class="keyword">false</span><span>):</span><span class="keyword">void</span><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lis.push([type,listener,useCapture]) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">super</span><span>.</span><span class="keyword">addEventListener</span><span>(type,listener,useCapture,priority,useWeakReference) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//&quot;自我毁灭&quot;的方法 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">private</span><span>&nbsp;</span><span class="keyword">function</span><span>&nbsp;remove(e:</span><span class="keyword">Event</span><span>):</span><span class="keyword">void</span><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">if</span><span>(e.currentTarget&nbsp;!=&nbsp;e.target)</span><span class="keyword">return</span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;stop() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//删除子对象 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(</span><span class="string">&quot;删除前有子对象&quot;</span><span>,numChildren) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">while</span><span>(numChildren&nbsp;&gt;&nbsp;0){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;removeChildAt(0) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(</span><span class="string">&quot;删除后有子对象&quot;</span><span>,numChildren) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//删除动态属性 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;k:</span><span class="keyword">String</span><span>&nbsp;</span><span class="keyword">in</span><span>&nbsp;</span><span class="keyword">this</span><span>){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(</span><span class="string">&quot;删除属性&quot;</span><span>,k) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">delete</span><span>&nbsp;</span><span class="keyword">this</span><span>[k] &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="comment">//删除侦听 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span class="keyword">for</span><span>(</span><span class="keyword">var</span><span>&nbsp;i:</span><span class="keyword">uint</span><span>=0;i&lt;lis.length;i++){ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;trace(</span><span class="string">&quot;删除Listener&quot;</span><span>,lis[i][0]) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;removeEventListener(lis[i][0],lis[i][1],lis[i][2]) &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;lis&nbsp;=&nbsp;</span><span class="keyword">null</span><span>&nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;} &nbsp;&nbsp;</span></li>
    <li><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="as" name="code" style="display: none">
package net.L4cd.display{
	import flash.display.MovieClip;
	import flash.events.Event;
	dynamic public class iMovieClip extends MovieClip{
		private var lis:Array;//定义一数组保存侦听
		public function iMovieClip(){
			lis = new Array()
			addEventListener(Event.REMOVED,remove)//侦听删除事件
		}
		
		//重写addEventListener,在增加侦听的时候..把相应的事件保存到数组
		override public function addEventListener(type:String, listener:Function, useCapture:Boolean = false, priority:int = 0, useWeakReference:Boolean = false):void{
			lis.push([type,listener,useCapture])
			super.addEventListener(type,listener,useCapture,priority,useWeakReference)
		}
		
		//&quot;自我毁灭&quot;的方法
		private function remove(e:Event):void{
			if(e.currentTarget != e.target)return
			stop()
			//删除子对象
			trace(&quot;删除前有子对象&quot;,numChildren)
			while(numChildren &gt; 0){
				removeChildAt(0)
			}
			trace(&quot;删除后有子对象&quot;,numChildren)
			
			//删除动态属性
			for(var k:String in this){
				trace(&quot;删除属性&quot;,k)
				delete this[k]
			}
			
			//删除侦听
			for(var i:uint=0;i&lt;lis.length;i++){
				trace(&quot;删除Listener&quot;,lis[i][0])
				removeEventListener(lis[i][0],lis[i][1],lis[i][2])
			}
			lis = null
		}
	}
}</pre>
<p>然后我们另外新建一个flash,直接在时间轴上写下以下代码</p>
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="keyword">import</span><span>&nbsp;net.L4cd.display.iMovieClip; &nbsp;&nbsp;</span></span></li>
    <li><span class="keyword">var</span><span>&nbsp;mc:</span><span class="keyword">MovieClip</span><span>&nbsp;=&nbsp;</span><span class="keyword">new</span><span>&nbsp;iMovieClip() &nbsp;&nbsp;</span></li>
    <li class="alt"><span>mc.</span><span class="keyword">addEventListener</span><span>(</span><span class="keyword">Event</span><span>.ADDED,aaaa) &nbsp;&nbsp;</span></li>
    <li><span>mc.</span><span class="keyword">addEventListener</span><span>(</span><span class="keyword">Event</span><span>.ADDED_TO_STAGE,aaaa) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>mc.</span><span class="keyword">addEventListener</span><span>(</span><span class="keyword">Event</span><span>.ENTER_FRAME,aaaa) &nbsp;&nbsp;</span></li>
    <li><span>mc.</span><span class="keyword">addEventListener</span><span>(</span><span class="keyword">MouseEvent</span><span>.CLICK,aaaa) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>mc.</span><span class="keyword">addEventListener</span><span>(</span><span class="keyword">MouseEvent</span><span>.MOUSE_DOWN,aaaa) &nbsp;&nbsp;</span></li>
    <li><span>mc.a&nbsp;=&nbsp;</span><span class="string">&quot;http://L4cd.Net&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>mc.b&nbsp;=&nbsp;</span><span class="string">&quot;我是动态属性2&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li><span>mc.name&nbsp;=&nbsp;</span><span class="string">&quot;我是MC&quot;</span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span>addChild(mc) &nbsp;&nbsp;</span></li>
    <li><span class="keyword">function</span><span>&nbsp;aaaa(e:</span><span class="keyword">Event</span><span>){ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span>removeChild(mc) &nbsp;&nbsp;</span></li>
    <li><span>mc&nbsp;=&nbsp;</span><span class="keyword">null</span><span>&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="as" name="code" style="display: none">
import net.L4cd.display.iMovieClip;
var mc:MovieClip = new iMovieClip()
mc.addEventListener(Event.ADDED,aaaa)
mc.addEventListener(Event.ADDED_TO_STAGE,aaaa)
mc.addEventListener(Event.ENTER_FRAME,aaaa)
mc.addEventListener(MouseEvent.CLICK,aaaa)
mc.addEventListener(MouseEvent.MOUSE_DOWN,aaaa)
mc.a = &quot;http://L4cd.Net&quot;
mc.b = &quot;我是动态属性2&quot;
mc.name = &quot;我是MC&quot;
addChild(mc)
function aaaa(e:Event){
	
}
removeChild(mc)
mc = null</pre>
<p>运行后.,,输出框就会出现</p>
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span>删除前有子对象&nbsp;0 &nbsp;&nbsp;</span></span></li>
    <li><span>删除后有子对象&nbsp;0 &nbsp;&nbsp;</span></li>
    <li class="alt"><span>删除属性&nbsp;b &nbsp;&nbsp;</span></li>
    <li><span>删除属性&nbsp;a &nbsp;&nbsp;</span></li>
    <li class="alt"><span>删除Listener&nbsp;removed &nbsp;&nbsp;</span></li>
    <li><span>删除Listener&nbsp;added &nbsp;&nbsp;</span></li>
    <li class="alt"><span>删除Listener&nbsp;addedToStage &nbsp;&nbsp;</span></li>
    <li><span>删除Listener&nbsp;enterFrame &nbsp;&nbsp;</span></li>
    <li class="alt"><span>删除Listener&nbsp;click &nbsp;&nbsp;</span></li>
    <li><span>删除Listener&nbsp;mouseDown&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="as" name="code" style="display: none">
删除前有子对象 0
删除后有子对象 0
删除属性 b
删除属性 a
删除Listener removed
删除Listener added
删除Listener addedToStage
删除Listener enterFrame
删除Listener click
删除Listener mouseDown</pre>
<p>这样,,,我们能做的事都已经做完了..等垃圾回收进行回收就ok了<br />
<br />
上面的remove方法就是mc在移除的时候,对自己进行的清理,,<br />
注意的是,以上只针对MovieClip进行的清理,每个类或你自定义的类都有不同..<br />
如Sprite不需用要stop(),不需要删除动态属性..等等..<br />
这个就由你自己去发挥~<br />
写一组自己的&quot;自我毁灭&quot;类..<br />
<br />
还有需要注意的是..像有时候,你只想removeChild,而不想进行删除,这样可以把上面的代码进行修改.<br />
把remove设置为公开的方法<br />
然后把addEventListener(Event.REMOVED,remove)去掉..<br />
最后在你想删除对象的时候,,,再调用remove()就ok了..</p>
<p>&nbsp;</p>
<h4>5.自定义双击事件 - iDoubleClick</h4>
<p>flash从as3开始支持双击事件..<br />
我们只需要使用对象.doubleClickEnabled = true,再侦听MouseEvent.DOUBLE_CLICK事件~<br />
就可以使用双击事件<br />
可是发现了一个不足的地方..<br />
如果我们同时侦听双击跟单击事件,,<br />
那当双击的时候.就会出现两个事件同时发生..<br />
这种情况实在不是很符合我们一般的需求..<br />
<br />
看来还是要用as2的老办法,用单击间的延时..来判断单击与双击..不过由于as3的事件机制~~<br />
我们完全可以模拟发现双击..<br />
<br />
<br />
直接看看应用代码<br />
&nbsp;</p>
<div class="dp-highlighter">
<ol class="dp-c">
    <li class="alt"><span><span class="comment">//导入类 </span><span>&nbsp;&nbsp;</span></span></li>
    <li><span class="keyword">import</span><span>&nbsp;net.L4cd.*; &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//启用双击事件,注意一下.这里的200是指两次点击之前的延时. </span><span>&nbsp;&nbsp;</span></li>
    <li><span>iDoubleClick.enable(mc,200) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;</span></li>
    <li><span class="comment">//另外可以使用&nbsp;&nbsp;iDoubleClick.disable(mc)&nbsp;&nbsp;&nbsp;来取消自定义双击 </span><span>&nbsp;&nbsp;</span></li>
    <li class="alt"><span class="comment">//像平常一样侦听 </span><span>&nbsp;&nbsp;</span></li>
    <li><span>mc.</span><span class="keyword">addEventListener</span><span>(</span><span class="keyword">MouseEvent</span><span>.DOUBLE_CLICK,mcDouClick) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>mc.</span><span class="keyword">addEventListener</span><span>(</span><span class="keyword">MouseEvent</span><span>.CLICK,mcClick) &nbsp;&nbsp;</span></li>
    <li><span class="keyword">function</span><span>&nbsp;mcClick(e:</span><span class="keyword">MouseEvent</span><span>):</span><span class="keyword">void</span><span>{ &nbsp;&nbsp;</span></li>
    <li class="alt"><span>&nbsp;&nbsp;&nbsp;&nbsp;trace(e) &nbsp;&nbsp;</span></li>
    <li><span>} &nbsp;&nbsp;</span></li>
    <li class="alt"><span class="keyword">function</span><span>&nbsp;mcDouClick(e:</span><span class="keyword">MouseEvent</span><span>):</span><span class="keyword">void</span><span>{ &nbsp;&nbsp;</span></li>
    <li><span>&nbsp;&nbsp;&nbsp;&nbsp;trace(e) &nbsp;&nbsp;</span></li>
    <li class="alt"><span>}&nbsp;&nbsp;</span></li>
</ol>
</div>
<pre class="as" name="code" style="display: none">
//导入类
import net.L4cd.*;
//启用双击事件,注意一下.这里的200是指两次点击之前的延时.
iDoubleClick.enable(mc,200)

//另外可以使用  iDoubleClick.disable(mc)   来取消自定义双击
//像平常一样侦听
mc.addEventListener(MouseEvent.DOUBLE_CLICK,mcDouClick)
mc.addEventListener(MouseEvent.CLICK,mcClick)
function mcClick(e:MouseEvent):void{
	trace(e)
}
function mcDouClick(e:MouseEvent):void{
	trace(e)
}</pre>
<p><br />
注意使用了自定义事件后就不要使用doubleClickEnabled = true,以免冲突然</p>
<p>&nbsp;</p>]]></description>
		</item>
		
			<item>
			<link>http://www.eoocy.com/article.asp?id=8</link>
			<title><![CDATA[利用stage.invalidate()方法和render事件提高as3程序的运行效率【转载】 ]]></title>
			<author>lihelihe@126.com(aaron)</author>
			<category><![CDATA[AS3技巧与特效]]></category>
			<pubDate>Sun,11 Jan 2009 01:36:56 +0800</pubDate>
			<guid>http://www.eoocy.com/default.asp?id=8</guid>
		<description><![CDATA[AS3中的DisplayObject有一个render事件，他会在重绘DisplayList之前触发，这给我们提供了在重绘之前最后一次操作的机会。<br/>每次需要DisplayObject触发render事时，都要调用一次 stage.invalidate();<br/><br/>下面用一个小例子来说明一下具体用法把。<br/>假设我们现在要写一个list组件，该组件有addItem()方法用于添加list项目，和remvoeItem<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> 方法用于删除list项目，当然还可能有addItemAt<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">,</span><span style="color:#5000a0">removeItemAt</span><span style="color:#0000ff">(</span><span style="color:#0000ff">)</span>等方法，这些方法调用后，都需要对list内的显示对象进行重新排列。<br/>我们先实现一个List类，用于显示列表项目<br/>List类中，有addItem<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> 和 removeItem<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> 这两个方法提供给外部调用，用于添加和删除list项目，这两个方法中除了将列表项目添加<span style="color:#0000ff">/</span>删除，还要调用一个方法来重新对list中的项目进行排列，layoutContents<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span>。<br/>关键就是，这个layoutContents<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span>的调用，他的调用次数越少，那效率当然就越高啦，如果是常规的做法，就是类似这样：<br/><br/>代码<span style="color:#0000ff">:</span><br/><br/><span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#800000"><strong>function</strong></span> <span style="color:#5000a0">addItem</span><span style="color:#0000ff">(</span>item<span style="color:#0000ff">:</span>DisplayObject<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span> <br/><span style="color:#0000ff">{</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;addChild<span style="color:#0000ff">(</span>item<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;layoutContents<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span> <br/><span style="color:#0000ff">}</span><br/><br/>将item加入后，重新排列列表<br/><br/>下面是List类的源代码<span style="color:#0000ff">:</span><br/><br/>代码<span style="color:#0000ff">:</span><br/><br/>package <span style="color:#0000ff">{</span> <br/>import flash<span style="color:#0000ff">.</span>display<span style="color:#0000ff">.</span>DisplayObject<span style="color:#0000ff">;</span> <br/>import flash<span style="color:#0000ff">.</span>display<span style="color:#0000ff">.</span>Sprite<span style="color:#0000ff">;</span> <br/>import flash<span style="color:#0000ff">.</span>events<span style="color:#0000ff">.</span>Event<span style="color:#0000ff">;</span> <br/><span style="color:#00a0c0"><strong>public</strong></span> class List <span style="color:#00a0c0"><strong>extends</strong></span> Sprite <br/><span style="color:#0000ff">{</span> <br/><span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#800000"><strong>function</strong></span> <span style="color:#5000a0">addItem</span><span style="color:#0000ff">(</span>item<span style="color:#0000ff">:</span>DisplayObject<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span> <br/><span style="color:#0000ff">{</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;addChild<span style="color:#0000ff">(</span>item<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;layoutContents<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span> <br/><span style="color:#0000ff">}</span> <br/><span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#800000"><strong>function</strong></span> removeItem<span style="color:#0000ff">(</span>item<span style="color:#0000ff">:</span>DisplayObject<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span> <br/><span style="color:#0000ff">{</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>if</strong></span><span style="color:#0000ff">(</span>contains<span style="color:#0000ff">(</span>item<span style="color:#0000ff">)</span><span style="color:#0000ff">)</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;removeChild<span style="color:#0000ff">(</span>item<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layoutContents<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">}</span> <br/><span style="color:#0000ff">}</span> <br/><br/>这个程序粗看似乎没什么问题，但却存在一个效率问题<br/>如果只调用一次addItem，没问题，如果调用10次呢？ 前9次的layoutcontents<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span>都不是必须的，只有第十次才是真正需要的这样程序的效率就降低了。<br/>我们可以试一下<br/><br/>先需要一个简单的ListItem<br/><br/>代码<span style="color:#0000ff">:</span><br/>package <br/><span style="color:#0000ff">{</span> <br/>import flash<span style="color:#0000ff">.</span>display<span style="color:#0000ff">.</span>Shape<span style="color:#0000ff">;</span> <br/><span style="color:#00a0c0"><strong>public</strong></span> class ListItem <span style="color:#00a0c0"><strong>extends</strong></span> Shape <br/><span style="color:#0000ff">{</span> <br/><span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#800000"><strong>function</strong></span> ListItem<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> <br/><span style="color:#0000ff">{</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000a0"><strong>super</strong></span><span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;graphics<span style="color:#0000ff">.</span><span style="color:#5000a0">beginFill</span><span style="color:#0000ff">(</span>0xFF6600<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;graphics<span style="color:#0000ff">.</span>drawRect<span style="color:#0000ff">(</span>0<span style="color:#0000ff">,</span> 0<span style="color:#0000ff">,</span> 30<span style="color:#0000ff">,</span> 16<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span> <br/>&nbsp;&nbsp;&nbsp;&nbsp;graphics<span style="color:#0000ff">.</span><span style="color:#5000a0">endFill</span><span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000ff">}</span> <br/><span style="color:#0000ff">}</span><br/><span style="color:#0000ff">}</span><br/><br/>然后测试<br/>package <span style="color:#0000ff">{</span><br/>import flash<span style="color:#0000ff">.</span>display<span style="color:#0000ff">.</span>Sprite<span style="color:#0000ff">;</span><br/><span style="color:#00a0c0"><strong>public</strong></span> class ListTest <span style="color:#00a0c0"><strong>extends</strong></span> Sprite <span style="color:#0000ff">{</span><br/><span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#800000"><strong>function</strong></span> ListTest<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>var</strong></span> <span style="color:#5000a0">list</span><span style="color:#0000ff">:</span>List <span style="color:#0000ff">=</span> <span style="color:#800000"><strong>new</strong></span> List<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;addChild<span style="color:#0000ff">(</span><span style="color:#5000a0">list</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#5000a0">list</span><span style="color:#0000ff">.</span><span style="color:#5000a0">addItem</span><span style="color:#0000ff">(</span><span style="color:#800000"><strong>new</strong></span> ListItem<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#5000a0">list</span><span style="color:#0000ff">.</span><span style="color:#5000a0">addItem</span><span style="color:#0000ff">(</span><span style="color:#800000"><strong>new</strong></span> ListItem<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#5000a0">list</span><span style="color:#0000ff">.</span><span style="color:#5000a0">addItem</span><span style="color:#0000ff">(</span><span style="color:#800000"><strong>new</strong></span> ListItem<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#0000ff">}</span><br/><br/>我们可以看到，输出了3次 <span style="color:#800000"><strong>do</strong></span> layout 说明layoutcontents执行了3次，前两次都是多余的。<br/>现在，解决办法就是利用render事件啦。<br/>因为在当前帧内，显示列表更新前会触发render事件，所以在render事件触发后来排列列表项目，就可以保证排列方法在做了任意次的添加或删除操作后只需调用一次，从而提高效率。<br/>这么做只需要对List类稍做一些改动，首先肯定是要监听render事件，我们可以仅监听stage对象的render事件即可，因为这样以后可以做一个独立的RepaintManger来管理所有组件的重绘（可以参考AsWing的RepaintManager类）。<br/>在render事件触发后，做我们需要的调整，由于要render事件触发，就必须先调用stage<span style="color:#0000ff">.</span>invalidate<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> ，所以每次添加或删除list项目后，都要执行一次该方法，即<span style="color:#0000ff">:</span><br/>代码<span style="color:#0000ff">:</span><br/><span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#800000"><strong>function</strong></span> <span style="color:#5000a0">addItem</span><span style="color:#0000ff">(</span>item<span style="color:#0000ff">:</span>DisplayObject<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span>voide <span style="color:#0000ff">{</span><br/><span style="color:#0000ff">.</span><span style="color:#0000ff">.</span><span style="color:#0000ff">.</span><span style="color:#0000ff">.</span><span style="color:#0000ff">.</span><span style="color:#0000ff">.</span><br/>stage<span style="color:#0000ff">.</span>invalidate<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><br/><span style="color:#0000ff">}</span><br/><br/>由于是监听的stage的render事件，所以在添加删除操作后，要做一个标记，表示list有改动，需要在render事件后重新排列，如果该标记为 false，那么即使render触发了也不做排列，因为stage的render事件也有可能是由于该stage内的其他child需要重绘而造成 stage的render触发。<br/><br/><br/>下面是改过后的List代码<br/>package <span style="color:#0000ff">{</span><br/>import flash<span style="color:#0000ff">.</span>display<span style="color:#0000ff">.</span>DisplayObject<span style="color:#0000ff">;</span><br/>import flash<span style="color:#0000ff">.</span>display<span style="color:#0000ff">.</span>Sprite<span style="color:#0000ff">;</span><br/>import flash<span style="color:#0000ff">.</span>events<span style="color:#0000ff">.</span>Event<span style="color:#0000ff">;</span><br/><span style="color:#00a0c0"><strong>public</strong></span> class List <span style="color:#00a0c0"><strong>extends</strong></span> Sprite <span style="color:#0000ff">{</span><br/><span style="color:#00a0c0"><strong>private</strong></span> <span style="color:#800000"><strong>var</strong></span> changed<span style="color:#0000ff">:</span><span style="color:#0000a0"><strong>Boolean</strong></span><span style="color:#0000ff">;</span><br/><span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#800000"><strong>function</strong></span> List<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000a0"><strong>super</strong></span><span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;addEventListener<span style="color:#0000ff">(</span>Event<span style="color:#0000ff">.</span>ADDED_TO_STAGE<span style="color:#0000ff">,</span> __addToStage<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#800000"><strong>function</strong></span> <span style="color:#5000a0">addItem</span><span style="color:#0000ff">(</span>item<span style="color:#0000ff">:</span>DisplayObject<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;addChild<span style="color:#0000ff">(</span>item<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;requireLayout<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#00a0c0"><strong>public</strong></span> <span style="color:#800000"><strong>function</strong></span> removeItem<span style="color:#0000ff">(</span>item<span style="color:#0000ff">:</span>DisplayObject<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>if</strong></span><span style="color:#0000ff">(</span>contains<span style="color:#0000ff">(</span>item<span style="color:#0000ff">)</span><span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;removeChild<span style="color:#0000ff">(</span>item<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;requireLayout<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">}</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#00a0c0"><strong>private</strong></span> <span style="color:#800000"><strong>function</strong></span> requireLayout<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;changed <span style="color:#0000ff">=</span> <span style="color:#0000a0"><strong>true</strong></span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>if</strong></span><span style="color:#0000ff">(</span>stage <span style="color:#0000ff">!</span><span style="color:#0000ff">=</span> <span style="color:#0000a0"><strong>null</strong></span><span style="color:#0000ff">)</span> stage<span style="color:#0000ff">.</span>invalidate<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#008080">//对内部项目进行排列，可以是任意的排列算法</span><br/>protected <span style="color:#800000"><strong>function</strong></span> layoutContents<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>trace</strong></span><span style="color:#0000ff">(</span><span style="color:#ff00ff">&#34;do layout&#34;</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>var</strong></span> y<span style="color:#0000ff">:</span><span style="color:#0000a0"><strong>Number</strong></span> <span style="color:#0000ff">=</span> 0<span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>var</strong></span> num<span style="color:#0000ff">:</span><span style="color:#5000a0">int</span> <span style="color:#0000ff">=</span> numChildren<span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>for</strong></span><span style="color:#0000ff">(</span><span style="color:#800000"><strong>var</strong></span> i<span style="color:#0000ff">:</span><span style="color:#5000a0">int</span><span style="color:#0000ff">=</span>0<span style="color:#0000ff">;</span> inum<span style="color:#0000ff">;</span> i<span style="color:#0000ff">+</span><span style="color:#0000ff">+</span><span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>var</strong></span> child<span style="color:#0000ff">:</span>DisplayObject <span style="color:#0000ff">=</span> getChildAt<span style="color:#0000ff">(</span>i<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child<span style="color:#0000ff">.</span>x <span style="color:#0000ff">=</span> 0<span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;child<span style="color:#0000ff">.</span>y <span style="color:#0000ff">=</span> y<span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;y <span style="color:#0000ff">+</span><span style="color:#0000ff">=</span> child<span style="color:#0000ff">.</span><span style="color:#008000">height</span><span style="color:#0000ff">+</span>2<span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">}</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#00a0c0"><strong>private</strong></span> <span style="color:#800000"><strong>function</strong></span> __addToStage<span style="color:#0000ff">(</span>e<span style="color:#0000ff">:</span>Event<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;stage<span style="color:#0000ff">.</span>addEventListener<span style="color:#0000ff">(</span>Event<span style="color:#0000ff">.</span>RENDER<span style="color:#0000ff">,</span> __render<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>if</strong></span><span style="color:#0000ff">(</span>changed<span style="color:#0000ff">)</span> stage<span style="color:#0000ff">.</span>invalidate<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#00a0c0"><strong>private</strong></span> <span style="color:#800000"><strong>function</strong></span> __render<span style="color:#0000ff">(</span>e<span style="color:#0000ff">:</span>Event<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#800000"><strong>if</strong></span><span style="color:#0000ff">(</span>changed<span style="color:#0000ff">)</span> <span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;layoutContents<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;changed <span style="color:#0000ff">=</span> <span style="color:#0000a0"><strong>false</strong></span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">}</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#0000ff">}</span><br/><span style="color:#0000ff">}</span><br/><br/>当我们再次运行ListTest的时候，do layout 只输出了一次。<br/>就是这些内容，当然，你可能会说，需要做到这些根本不需要这么复杂，只要公开layoutContents方法，在所有操作调用之后让调用者自行调用一次layoutContents<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span>。<br/>在这个例子中当然可以，但是当情况很复杂的时候，使用者每进行一次操作都要自行调用更新的方法，这样做并不是好的解决方案。试想，如果 flashplayer不会为我们处理显示DisplayObject的工作，而是每次addChild<span style="color:#0000ff">/</span>removeChild之后，我们都需要自行调用flashplayer底层的方法来让我们需要的东西显示出来，这样做显然很不好。<br/>完了，就这些东东，写完之后俺感觉自己的表达能力不好，如果觉得我说的很模糊，那就研究下代码吧，全部代码都在上面了，欢迎指教和讨论 <span style="color:#0000ff">^</span><span style="color:#0000ff">^</span> <br/> <br/><span style="color:#0000ff">[</span><span style="color:#008000">color</span><span style="color:#0000ff">=</span>#000099<span style="color:#0000ff">]</span><span style="color:#0000ff">[</span>b<span style="color:#0000ff">]</span>原文地址<span style="color:#0000ff">[</span><span style="color:#0000ff">/</span>b<span style="color:#0000ff">]</span><span style="color:#0000ff">[</span><span style="color:#0000ff">/</span><span style="color:#008000">color</span><span style="color:#0000ff">]</span><br/><span style="color:#0000ff">[</span><span style="color:#008000">url</span><span style="color:#0000ff">=</span>http<span style="color:#0000ff">:</span><span style="color:#008080">//www.5ias.com/as3/2007-12-3/LiYong-render-ShiJianTiGao-as3-ChengXuDeYunHangXiaoLv.html]http://www.5ias.com/as3/2007-12-3/LiYong-render-ShiJianTiGao-as3-ChengXuDeYunHangXiaoLv.html[/url]</span><br/> [/color]]]></description>
		</item>
		
			<item>
			<link>http://www.eoocy.com/article.asp?id=7</link>
			<title><![CDATA[一些容易混淆的AS3问题，肯定让你有收获]]></title>
			<author>lihelihe@126.com(aaron)</author>
			<category><![CDATA[AS3技巧与特效]]></category>
			<pubDate>Sat,10 Jan 2009 23:23:20 +0800</pubDate>
			<guid>http://www.eoocy.com/default.asp?id=7</guid>
		<description><![CDATA[<span style="color:#000000">先说的最基础的：<br/><br/><br/>今天看到Aone发现一个switch扩展应用，一下仿佛自已好傻，一直以为switch没什么太大用处，原来是我们学艺不精啊。<br/><br/>switch可以这么写：<br/><br/>[color=#800000]<strong>var</strong></span> d<span style="color:#0000ff">:</span><span style="color:#5000a0">int</span><span style="color:#0000ff">=</span>0<br/><span style="color:#800000"><strong>switch</strong></span><span style="color:#0000ff">(</span><span style="color:#0000a0"><strong>true</strong></span><span style="color:#0000ff">)</span><span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>case</strong></span> aone<span style="color:#0000ff">(</span>d<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>trace</strong></span><span style="color:#0000ff">(</span><span style="color:#ff00ff">&#34;测试测试啊~都闪开点~被trace到了不负责啊~&#34;</span><span style="color:#0000ff">)</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>break</strong></span><br/><span style="color:#0000ff">}</span><br/><span style="color:#800000"><strong>function</strong></span> aone<span style="color:#0000ff">(</span>d<span style="color:#0000ff">:</span><span style="color:#5000a0">int</span><span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000a0"><strong>Boolean</strong></span><span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>return</strong></span> d<span style="color:#0000ff">&lt;</span>100<span style="color:#0000ff">?</span><span style="color:#0000a0"><strong>true</strong></span><span style="color:#0000ff">:</span><span style="color:#0000a0"><strong>false</strong></span><br/><span style="color:#0000ff">}</span><br/><br/>或者直接省略<br/><br/><span style="color:#800000"><strong>var</strong></span> d<span style="color:#0000ff">:</span><span style="color:#5000a0">int</span><span style="color:#0000ff">=</span>0<br/><span style="color:#800000"><strong>switch</strong></span><span style="color:#0000ff">(</span><span style="color:#0000a0"><strong>true</strong></span><span style="color:#0000ff">)</span><span style="color:#0000ff">{</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>case</strong></span> d<span style="color:#0000ff">&lt;</span>100<span style="color:#0000ff">:</span><br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>trace</strong></span><span style="color:#0000ff">(</span><span style="color:#ff00ff">&#34;测试测试啊~都闪开点~被trace到了不负责啊~&#34;</span><span style="color:#0000ff">)</span><br/>&#160;&#160;&#160;&#160;<span style="color:#800000"><strong>break</strong></span><br/><span style="color:#0000ff">}</span><br/><span style="color:#800000"><strong>case</strong></span> 可以用条件语句，还可以用方法，switch<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span>里的参数也可以换成函数的。<br/><br/><br/>正式开始今天的一问一答：<br/><br/>舞台与时间轴问答<br/>舞台和时间轴的真相正如相对论一样是不引起注意的，但真相带给我们的收获是巨大的。为了使得教程更加面向原因，这里采用问答形式慢慢揭开面纱。本着辩证的思想，在每个观点的背后尽量用实际的代码去求证。当然，还是按照从浅到深的顺序开始。<br/><br/><br/>问：flash中的主时间轴是舞台吗？<br/>答：否，时间轴不是舞台。舞台是播放器。舞台可能是安装到程序中的flashPlayer<span style="color:#0000ff">.</span>exe播放器，也可能是网页中的控件，还可以其它语言如vb，vc<span style="color:#0000ff">,</span>中的控件。主时间轴是播放器播放的swf文件，也是常说的文档类。而舞台是Stage类。<br/><br/><br/>问：什么是文档类？<br/>答：文档类基于MovieClip。是与主时间轴绑定的类。我们可以自定义类与它绑定，如果不指定则自动生成MainTimeline类。<br/>证明：新建一个swf，在第一帧输入：trace<span style="color:#0000ff">(</span><span style="color:#0000a0"><strong>this</strong></span> is <span style="color:#0000a0"><strong>MovieClip</strong></span><span style="color:#0000ff">)</span><span style="color:#0000ff">,</span>向上转型成功，返回true。<br/><br/><br/>问：MainTimeline做了什么事情？<br/>答MainTimeline类自动导入了flash核心类库，以flash开头的包都被导入了。核心类库的swc文件名为：playerglobals<span style="color:#0000ff">.</span>swc。可以在flash的安装目录下搜索到。MainTimeline还自动生成对舞台上的对象引用并初始化。<br/>证明：我们在文档类中建立一个空类：<br/><br/><br/>复制内容到剪贴板 <br/>代码<span style="color:#0000ff">:</span><br/><br/>package<br/><span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;import flash<span style="color:#0000ff">.</span>display<span style="color:#0000ff">.</span>Sprite<span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#00a0c0"><strong>public</strong></span> class Document <span style="color:#00a0c0"><strong>extends</strong></span> Sprite<br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp;<span style="color:#0000ff">}</span><br/><span style="color:#0000ff">}</span><br/><br/><br/>然后在时间轴第一帧输入var shape<span style="color:#0000ff">:</span>Shape<span style="color:#0000ff">=</span><span style="color:#800000"><strong>new</strong></span> Shape<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span>报错，原本可以直接使用的Shape没有定义。<br/>附：as3不建议在时间轴上写代码，因为那是脚本编程方式，但在时间轴上非常适用调试代码，因为省去了导入，构造函数等等繁琐的事情。<br/><br/><br/>问：全局坐标指的主时间轴坐标还是舞台坐标<span style="color:#0000ff">?</span><br/>答：指舞台坐标。<br/>证明：在舞台上画一个方块，起名为mc。在第一帧上输入如下代码：<br/><br/><br/>复制内容到剪贴板 <br/>代码<span style="color:#0000ff">:</span><br/><br/>mc<span style="color:#0000ff">.</span>addEventListener<span style="color:#0000ff">(</span>MouseEvent<span style="color:#0000ff">.</span>CLICK<span style="color:#0000ff">,</span>clickHandle<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#800000"><strong>function</strong></span> clickHandle<span style="color:#0000ff">(</span>evtObj<span style="color:#0000ff">:</span>MouseEvent<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span><br/><span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#800000"><strong>var</strong></span> point<span style="color:#0000ff">=</span><span style="color:#800000"><strong>new</strong></span> Point<span style="color:#0000ff">(</span>evtObj<span style="color:#0000ff">.</span>localX<span style="color:#0000ff">,</span>evtObj<span style="color:#0000ff">.</span>localY<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#800000"><strong>trace</strong></span><span style="color:#0000ff">(</span>p<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp; p<span style="color:#0000ff">=</span>mc<span style="color:#0000ff">.</span><span style="color:#5000a0">localToGlobal</span><span style="color:#0000ff">(</span>p<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#800000"><strong>trace</strong></span><span style="color:#0000ff">(</span>p<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#800000"><strong>trace</strong></span><span style="color:#0000ff">(</span>evtObj<span style="color:#0000ff">.</span>stageX<span style="color:#0000ff">,</span>evtObj<span style="color:#0000ff">.</span>stageY<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000ff">}</span><br/><br/><br/><br/><br/>对照可以分发现转换后的坐标就是舞台坐标。<br/><br/><br/>问：主时间轴，也就是文档类的坐标跟舞台有什么不同？<br/>答：文档类与舞台是显示列表中的两个顶级容器，舞台是文档类对象的容器。文档类的坐标相对于文档类对象，舞台坐标相对于舞台。当文档类对象和舞台原始坐标点不同时，区别就显现了。<br/>证明：在舞台左上角画个方块，坐标为<span style="color:#0000ff">(</span>0<span style="color:#0000ff">,</span>0<span style="color:#0000ff">)</span>。在第一帧输入如下代码：<br/>x<span style="color:#0000ff">=</span>10<span style="color:#0000ff">;</span><br/>y<span style="color:#0000ff">=</span>10<span style="color:#0000ff">;</span><br/>可以看到方块位置变了。这说明文档类对象不必非要跟舞台原坐标点重合。正式因为平时都是重合的，所以看不见差别。<br/><br/><br/>问：文档类大小也跟舞台大小不同吗？<br/>答：是的。舞台是可以缩放的，当缩放舞台时可以不缩放文档对象，即使缩放文档对象也不一定拉伸到整个舞台。所以当然是不同的。<br/>证明：如图：<br/><br/><br/><br/><br/><br/><br/><br/>问：舞台有哪些缩放方式：<br/>答：使用Stage的scaleMode来控制缩放模式。scaleMode使用StageScaleMode类的静态常量表示：<br/>StageScaleMode<span style="color:#0000ff">.</span>NO_SCALE<br/>swf文件不随播放器窗口改变。会自动居中。<br/><br/>StageScaleMode<span style="color:#0000ff">.</span>SHOW_ALL<br/>以缩放方式缩放swf文件，维持宽高比。<br/><br/>StageScaleMode<span style="color:#0000ff">:</span>NO_BORDER<br/>以裁剪方式缩放swf文件，维持宽高比。<br/><br/>StageScaleMode<span style="color:#0000ff">.</span>EXACT_FIT<br/>拉伸swf文件，改变宽高比。<br/><br/>注意：在调试模式下NO_SCALE是默认值。而在发布后SHOW_ALL是默认值。<br/><br/>附：由于可以选择缩放，我们在网页中可以使用两种方式让swf在网页中居中：<br/>1．使用缩放模式。使用网页代码让控件居中。<br/>2．控件随着网页的大小而改变。采用noscale模式使内容居中。<br/> <br/>问：缩放看起来非常适合播放动画。但当制作应用程序时不必缩放，能否让swf不要自动居中？<br/>答：可以。在NO_SCALE模式下可以使用align属性来确定对齐方式，align使用StageAlign类的静态常量表示：<br/>StageAlign<span style="color:#0000ff">.</span>TOP<span style="color:#0000ff">:</span> 顶对齐<br/>StageAlign<span style="color:#0000ff">.</span>BOTTOM<span style="color:#0000ff">:</span> 底对齐<br/>StageAlign<span style="color:#0000ff">.</span><span style="color:#008000">LEFT</span><span style="color:#0000ff">:</span> 左对齐<br/>StageAlign<span style="color:#0000ff">.</span><span style="color:#008000">RIGHT</span><span style="color:#0000ff">:</span> 右对齐<br/>StageAlign<span style="color:#0000ff">.</span>TOP_LEFT<span style="color:#0000ff">:</span> 左上对齐<br/>StageAlign<span style="color:#0000ff">.</span>TOP_RIGHT<span style="color:#0000ff">:</span> 右上对齐<br/>StageAlign<span style="color:#0000ff">.</span>BOTTOM_LEFT<span style="color:#0000ff">:</span> 左下对齐。<br/>StageAlign<span style="color:#0000ff">.</span>BOTTOM_RIGHT<span style="color:#0000ff">:</span> 右下对齐。<br/><br/>我们可以在播放器中导入多个swf采取不同的对齐方式。组合成一个应用程序。<br/><br/><br/>问：舞台的大小如何访问？<br/>答：舞台大小使用stageWidth和stageHeight访问。不管采用哪种缩放模式，都是播放器或者控件的实际大小。<br/><br/><br/>问：鼠标事件中的stageX和stageY也是这样吗？<br/>答：不是，当使用除NO_SCALE之外的模式缩放后，swf文件也被缩放了，舞台内部DPI发生了变化，stageX与stageY是新DPI下的舞台坐标。<br/><br/><br/>问：舞台也继承DisplayObject，那么舞台的x<span style="color:#0000ff">,</span>y和width<span style="color:#0000ff">,</span>height又指的什么？<br/>答：舞台的x<span style="color:#0000ff">,</span>y<span style="color:#0000ff">,</span><span style="color:#008000">width</span><span style="color:#0000ff">,</span>height都是只读的。由于播放器不允许我们改变在系统中的位置，所以x<span style="color:#0000ff">,</span>y都为0。width和height属性也不是改变播放器的大小，而指向文档类的width和height。<br/>证明：<br/>画一个方块，在第一帧输入如下代码：<br/><br/>复制内容到剪贴板 <br/>代码<span style="color:#0000ff">:</span><br/><br/><span style="color:#800000"><strong>trace</strong></span><span style="color:#0000ff">(</span>root<span style="color:#0000ff">.</span><span style="color:#008000">width</span><span style="color:#0000ff">=</span><span style="color:#0000ff">=</span>stage<span style="color:#0000ff">.</span><span style="color:#008000">width</span><span style="color:#0000ff">,</span>root<span style="color:#0000ff">.</span><span style="color:#008000">height</span><span style="color:#0000ff">=</span><span style="color:#0000ff">=</span>stage<span style="color:#0000ff">.</span><span style="color:#008000">height</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><span style="color:#008080">//结果为true,true。</span><br/><br/><br/>问：文档类的x<span style="color:#0000ff">,</span>y是文档类在舞台上的坐标，那么文档类的width和height是文档类的宽和高吗？怎么root<span style="color:#0000ff">.</span>width和root<span style="color:#0000ff">.</span>height结果与属性面板中设置的不同啊。<br/>答：root<span style="color:#0000ff">.</span>width和root<span style="color:#0000ff">.</span>height确实不是文档类的大小。属性面板中才是文档类的大小。<br/><br/><br/>问：那么文档类的大小用什么来访问呢？<br/>答：文档类的大小使用文档类的loaderInfo属性访问，是loaderInfo<span style="color:#0000ff">.</span>width和loaderInfo<span style="color:#0000ff">.</span>height。<br/><br/>问：为什么我访问时提示：Error<span style="color:#0000ff">:</span> Error #2099<span style="color:#0000ff">:</span> 正在加载的对象因尚未完全加载而无法提供此信息？<br/>答：即使是文档类的loaderInfo属性也需要主swf文件加载完毕后才能访问，因此还是得在事件中访问。<br/>证明：<br/>在第一帧输入如下代码：<br/><br/>复制内容到剪贴板 <br/>代码<span style="color:#0000ff">:</span><br/><br/>loaderInfo<span style="color:#0000ff">.</span>addEventListener<span style="color:#0000ff">(</span>Event<span style="color:#0000ff">.</span>COMPLETE<span style="color:#0000ff">,</span>mainSwfComplete<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><br/><span style="color:#800000"><strong>function</strong></span> mainSwfComplete<span style="color:#0000ff">(</span>evtObj<span style="color:#0000ff">:</span>Event<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span><br/><span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#800000"><strong>trace</strong></span><span style="color:#0000ff">(</span>loaderInfo<span style="color:#0000ff">.</span><span style="color:#008000">width</span><span style="color:#0000ff">,</span>loaderInfo<span style="color:#0000ff">.</span><span style="color:#008000">height</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000ff">}</span><br/><br/>看，现在可以访问了。不光是width和height，还有其它属性也需要这样访问。所以最好在complete或init中访问loaderInfo的属性。<br/><br/><br/>问：那么文档类的width和height究竟表示什么？<br/>答：问的好。文档类的width和height表示的是可视内容的大小。<br/>证明，在舞台上画两条线，如图：<br/><br/><br/>在帧上输入：trace<span style="color:#0000ff">(</span><span style="color:#008000">width</span><span style="color:#0000ff">,</span><span style="color:#008000">height</span><span style="color:#0000ff">)</span>。<br/>发现大小是这两条线确定的矩形范围。<br/>附：假设改变文档对象的背景色，也是改变可视内容范围的背景色。在帧上添加代码：<br/><br/>复制内容到剪贴板 <br/>代码<span style="color:#0000ff">:</span><br/>opaqueBackground<span style="color:#0000ff">=</span>0xFF0000<span style="color:#0000ff">;</span><br/> <br/> <br/>问：那么改变文档类的width和height是改变了可视区域的大小吗？<br/>答：不完全是。flash以播放器原点为坐标原点采取按比例延伸方式，也可以称作放射。原理如图：<br/><br/><br/>这张图显示了采用放射方式使宽度扩展两倍。上面一个方块中的每一个像素的横坐标都由原位置延伸到2倍距离。得到的结果是宽度延伸了2倍，横坐标也成了原来的两倍。对于高度也是这样。改变宽度为原来的两倍等价于设置scaleX＝2。实际应用中由于同时改变了大小和坐标使得我们很不习惯。所以一般我们不改变文档类对象的大小。<br/><br/><br/>问：当使用了opaqueBackgoundg改变主时间轴的背景色后，能响应鼠标点击事件吗？<br/>答：不能。不但背景色不能响应点击事件，就算画一个矢量图形，导入一张位图，文档类对象也不能捕获鼠标事件。这是因为这些图形不是InteractiveObject的子类，不支持鼠标事件，不能成为事件目标，而系统也不选择文档类对象作为事件目标。使得系统直接选择舞台为事件目标。<br/>证明：画几个矢量，再载入一副位图，在帧上添加代码：<br/><br/>复制内容到剪贴板 <br/>代码<span style="color:#0000ff">:</span><br/><br/>addEventListener<span style="color:#0000ff">(</span>MouseEvent<span style="color:#0000ff">.</span>CLICK<span style="color:#0000ff">,</span>clickHandle<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>stage<span style="color:#0000ff">.</span>addEventListener<span style="color:#0000ff">(</span>MouseEvent<span style="color:#0000ff">.</span>CLICK<span style="color:#0000ff">,</span>clickHandle<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><br/><span style="color:#800000"><strong>function</strong></span> clickHandle<span style="color:#0000ff">(</span>evtObj<span style="color:#0000ff">:</span>MouseEvent<span style="color:#0000ff">)</span><span style="color:#0000ff">:</span><span style="color:#0000ff">void</span><br/><span style="color:#0000ff">{</span><br/>&nbsp;&nbsp;&nbsp;&nbsp; <span style="color:#800000"><strong>trace</strong></span><span style="color:#0000ff">(</span>evtObj<span style="color:#0000ff">.</span>currentTarget<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000ff">}</span><br/><br/>dispatchEvent<span style="color:#0000ff">(</span><span style="color:#800000"><strong>new</strong></span> MouseEvent<span style="color:#0000ff">(</span>MouseEvent<span style="color:#0000ff">.</span>CLICK<span style="color:#0000ff">)</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/>点击矢量和位图，输出的只有stage而没有主时间轴。<br/><br/><br/>问：那么文档类对鼠标一点作用都不起了吗？<br/>答：否，虽然系统不选择文档类对象作为事件目标，但文档类关于鼠标交互属性还是有作用的。这个属性就是mouseChildren。使用这个属性能够禁用swf文件中的所有鼠标事件。<br/>证明：在舞台上分别放个按钮，输入文本，带超级链接的文本。在帧上输入<span style="color:#0000ff">:</span>mouseChildren<span style="color:#0000ff">=</span>false。发现按钮没了反应，文本不能输入，超级链接也没用了。<br/><br/><br/>问：我看stage也有这个属性。把stage的mouseChildren设置为false岂不可以禁止包括swf文件内的所有鼠标事件？<br/>答：确实如此。<br/><br/><br/>问：stage虽然是继承而来的，但很多成员都被禁用了。因为要禁止对播放器的修改，有些成员对播放器也无意义，那么哪些成员被Stage类保留下来了呢？哪些又是新添加的成员呢？能详细说明吗？<br/>答：<br/>保留的方法：<br/>1<span style="color:#0000ff">.</span>EventDispatcher的所有方法，用于为舞台添加特属于舞台的事件。<br/>2<span style="color:#0000ff">.</span>保留的容器方法。 <br/>addChild<br/>addChildAt<br/>removeChildAt<br/>setChildIndex<br/>swapChildrenAt<br/>getObjectUnderPoint<br/><br/>3<span style="color:#0000ff">.</span><span style="color:#0000a0"><strong>Stage</strong></span><span style="color:#0000ff">.</span>invalidate<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span>方法<span style="color:#0000ff">:</span><br/>触发显示对象的render事件用于延迟技术。<br/><br/><br/>事件：<br/>由于处于显示列表的顶级，Stage的事件都不冒泡，也没有默认调用方法。事件对象是Event。属性target值为Stage对象。<br/><br/>fullScreen<br/>类型为flash<span style="color:#0000ff">.</span>events<span style="color:#0000ff">.</span>Event<span style="color:#0000ff">.</span>FULL_SCREEN。进行全屏切换时触发。事件对象可使用fullScreen属性，全屏为true。<br/><br/>resize<span style="color:#0000ff">:</span><br/>类型为flash<span style="color:#0000ff">.</span>events<span style="color:#0000ff">.</span>Event<span style="color:#0000ff">.</span>RESIZE。<span style="color:#0000ff">.</span>当scaleMode设置为NO_SCALE时改变swf文件尺寸时调用。用于作布局。<br/><br/>mouseLeave<span style="color:#0000ff">:</span><br/>类型为flash<span style="color:#0000ff">.</span>events<span style="color:#0000ff">.</span>Event<span style="color:#0000ff">.</span>MOUSE_LEAVE。当鼠标离开播放器窗口时触发。<br/><br/><br/>属性：<br/>保留属性：<br/>numChildren<span style="color:#0000ff">:</span><br/>舞台中swf文件的个数。<br/><br/>mouseChildren<span style="color:#0000ff">:</span><br/>忽略所有swf文件的鼠标事件。<br/><br/><br/>下面是操作播放器的属性：<br/>focus<span style="color:#0000ff">:</span><br/>指定舞台中具有键盘焦点的对象。由于只能有一个对象具有焦点。所以由舞台来处理焦点是合适的。<br/><br/>frameRate<span style="color:#0000ff">:</span><br/>设置舞台的帧速。默认为属性面板中指定的帧速。<br/><br/>stageFocusRect<span style="color:#0000ff">:</span><br/>是否显示焦点矩形。一般用来调试。<br/><br/><span style="color:#008000">scaleMode</span><span style="color:#0000ff">:</span><br/>StageScale<span style="color:#0000ff">.</span>Mode<span style="color:#0000ff">:</span><br/>StageScaleMode<span style="color:#0000ff">.</span>NO_SCALE<br/>swf&nbsp;&nbsp;文件不随播放器窗口改变。会自动居中。<br/>StageScaleMode<span style="color:#0000ff">.</span>SHOW_ALL<br/>以缩放方式缩放swf文件，维持宽高比。<br/>StageScaleMode<span style="color:#0000ff">:</span>NO_BORDER<br/>以裁剪方式缩放swf文件，维持宽高比。<br/>StageScaleMode<span style="color:#0000ff">.</span>EXACT_FIT<br/>拉伸swf文件，改变宽高比。<br/><br/>stageWidth和stageHeight<span style="color:#0000ff">:</span><br/>舞台的宽和高。只读属性。<br/><br/>width和height<span style="color:#0000ff">:</span><br/>可视区域的宽高。 <br/><br/>displayState<span style="color:#0000ff">:</span><br/>as3现在拥有全新的全屏概念。再不是原来的缩放方式而是全新的硬件支持。速度大幅度提高。并且可以在网页上使用全屏。但全屏设置只被设计用来看电影，输入文本和键盘事件变得无效。displayStage使用StageDisplayStage<span style="color:#0000ff">.</span>NORMAL和StageDisplayState<span style="color:#0000ff">.</span>FULL_SCREEN表示全屏值。使用全屏还要求flash控件属性allowFullScreen设为true。<br/><br/><span style="color:#008000">align</span><span style="color:#0000ff">:</span><br/>使用StageAlign类的静态属性确定对齐方式：<br/>StageAlign<span style="color:#0000ff">.</span>TOP<span style="color:#0000ff">:</span> 顶对齐<br/>StageAlign<span style="color:#0000ff">.</span>BOTTOM 底对齐<br/>StageAlign<span style="color:#0000ff">.</span><span style="color:#008000">LEFT</span> 左对齐<br/>StageAlign<span style="color:#0000ff">.</span><span style="color:#008000">RIGHT</span> 右对齐<br/>StageAlign<span style="color:#0000ff">.</span>TOP_LEFT 左上对齐<br/>StageAlign<span style="color:#0000ff">.</span>TOP_RIGHT 右上对齐<br/>StageAlign<span style="color:#0000ff">.</span>BOTTOM_LEFT 左下对齐。<br/>StageAlign<span style="color:#0000ff">.</span>BOTTOM_RIGHT 右下对齐。<br/><br/> <br/>问：我对舞台的invalidate方法不太了解，延迟技术指什么？<br/>所谓延迟就是当需要频繁调用一段重负荷代码时，为了节约cpu资源，把这段代码推迟到下一帧执行。需要使用这段代码的不直接通过调用而是使用一个方法声明请求延迟渲染，这如同把一个公共变量设置为true，当系统发现变量的改变后就重新渲染舞台。stage的invalidate方法就是声明延迟渲染的方法。<br/><br/><br/>问：我看上面舞台保留的方法虽然没有DisplayObject的多，但对于添加对象已经足够，一般在什么情况下需要对舞台添加对象呢？<br/>答：舞台可导入多个外部swf文件在同一个播放器中播放。但更有用的是从库中创建鼠标指针，对话框等显示对象。它们被放置到最上层，且不必跟文档类搅和在一起。这使得文档类的设计跟鼠标、回话窗口分开。这些对话框等组件更容易作为公共组件框架跟其它程序迅速匹配。<br/><br/><br/>问：现在对舞台与主时间轴的概念已经很清晰了。这两个对象被系统创建。我们只能通过DisplayObject中提供的stage和root属性分别引用它们，可以随时访问是吧？<br/>答：不能随时访问，只有添加到显示列表中的对象才能引用它们。因为它们作为顶级显示容器，如果在显示列表外也可以访问，那被删除的显示对象在后台依然可以影响前台显示，这样会导致混乱。<br/><br/><br/>问：主时间轴和stage也有这两个属性，它们指什么？<br/>答：主时间轴的root指主时间轴，主时间轴的stage指舞台，舞台的root和stage都指舞台。<br/><br/><br/>问：还有什么限制吗？<br/>访问舞台还与安全模型有关。不受信任的域是无法访问舞台的，因为它们获取了舞台后可以利用扫描方式盗取用户信息。<br/><br/>问：原来访问舞台有这么多限制啊，那访问主时间轴应该没有什么限制吧？<br/>答：没有。MovieClip的成员都可以使用。你甚至可以把buttonMode设置成true。让整个主时间轴成为一个大按钮。<br/><br/><br/>问：那我也可以使用滤镜渲染整个swf文件了吧，使用flash不能这样呢。<br/>答：确实。但不要滥用，使用滤镜渲染主时间轴会作用于所有显示对象，也会渲染所有帧。这会消耗很多cpu资源。<br/>证明：在舞台上绘制各种图形，文字，图片。在第一帧输入如下代码：<br/><br/>复制内容到剪贴板 <br/>代码<span style="color:#0000ff">:</span><br/><br/><span style="color:#800000"><strong>var</strong></span> dro&#112;ShadowropShadowFilter <span style="color:#0000ff">=</span> <span style="color:#800000"><strong>new</strong></span> Dro&#112;ShadowFilter<span style="color:#0000ff">(</span><span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#800000"><strong>var</strong></span> filtersArray<span style="color:#0000ff">:</span><span style="color:#0000a0"><strong>Array</strong></span> <span style="color:#0000ff">=</span> <span style="color:#800000"><strong>new</strong></span> <span style="color:#0000a0"><strong>Array</strong></span><span style="color:#0000ff">(</span>dro&#112;Shadow<span style="color:#0000ff">)</span><span style="color:#0000ff">;</span><br/><span style="color:#0000a0"><strong>this</strong></span><span style="color:#0000ff">.</span>filters <span style="color:#0000ff">=</span> filtersArray<span style="color:#0000ff">;</span><br/>可以看到所有对象都被添加了阴影。[/color]]]></description>
		</item>
		
			<item>
			<link>http://www.eoocy.com/article.asp?id=6</link>
			<title><![CDATA[textField的图文混排(1)]]></title>
			<author>lihelihe@126.com(aaron)</author>
			<category><![CDATA[AS3技巧与特效]]></category>
			<pubDate>Fri,09 Jan 2009 16:50:37 +0800</pubDate>
			<guid>http://www.eoocy.com/default.asp?id=6</guid>
		<description><![CDATA[一直以来FLASH的图文混排都是讨论的焦点，AS3的诞生给图文混排带来了最大的控制空间，它能够做到精确的控制文本了，但是对图文混排还是有点弱，特别是HTML文本，功能差好多。<br/><br/>这一问题直到flash10只才得到提升，Flash CS4 的最新text API有相关的功能,可以使用更高级的文本控制功能，CS4 做这个东西已不是难题。<br/><br/><br/>我转一个 &#34;圆号手&#34; 朋友做的图文混排思路 用CS3做的<br/><br/><img src="http://www.eoocy.com/example/tempImages/图1.jpg" border="0" alt=""/><br/><br/>var arr:Array=[];//存表情替换符的位置<br/>var face:Array=[];//存表情编号<br/>var pos:Array=[];//存表情应该显示的位置<br/>while(1)<br/>{<br/>&#160;&#160;&#160;&#160;arr.push(str.search(/#[0-9][0-9]/));<br/>&#160;&#160;&#160;&#160;if(arr[arr.length-1]!=-1)<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;face.push(str.substr(arr[arr.length-1]+1,2));<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;pos.push(txt.getCharBoundaries (arr[arr.length-1]));<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;str=str.replace(/#[0-9][0-9]/,&#34;&nbsp;&nbsp;&nbsp;&nbsp; &#34;);<br/>&#160;&#160;&#160;&#160;}<br/>&#160;&#160;&#160;&#160;else<br/>&#160;&#160;&#160;&#160;{<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;txt.htmlText=string.replace(/#[0-9][0-9]/g,&#34;&nbsp;&nbsp;&nbsp;&nbsp; &#34;)<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;arr.pop();<br/>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;break;<br/>&#160;&#160;&#160;&#160;}&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<br/>}<br/><br/><br/>用的时候 ：var string=&#34;我日你个#01TextField我<br/><br/>用htmlText两个麻烦一个是图片不能放中间，一个是把gif当成静态显示<br/><br/>直接做了一个跟textField一样大的容器，专门addChild表情<br/><br/>他是用两层做的，也就是文字和图片分开的，分别控制坐标，个人觉得不是很好，为样很麻烦，不好控制<br/>最麻烦的就是滚动后的定位，还有其它问题很多。<br/><br/>过几天我想试着做一个，再来更新这个帖，先在这留个脚印!]]></description>
		</item>
		
</channel>
</rss>
