博客公告(点击显示/隐藏)|  今日心情:神学
2010-07-30 21:09:43
小S吧今天你来了吗?更新速度:每周2-3篇以上!
在俺博客看到有用的东西,学习了之后,记得回访带点人气哦 ^_^ 嘿嘿!
欢迎跟俺交换友情链接啊。。留言,直接QQ等联系我都行啊
转载本博客文章请注明:来源小S吧——sunbright博客,链接地址:http://www.xiaos8.com
以前老是怀疑AS3自定义命名空间会比默认命名空间效率低,正好最近想弄个简单的开源图形引擎,写框架我喜欢用自定义命名空间,因为那样看上去感觉比较高端 [表情20]
于是随便做了一个小测试:
在屏幕用BitmapData渲染的方式,创建了6400个颜色不一样的小点,因为是测试命名空间嘛,因此把渲染的预先判断关掉了,即每帧都在重绘所有区域!SBox的第三个默认参数是delay:int = 40,1秒钟等于25次渲染,每次都是6400个小点绘制到屏幕,并且开启了强行锁帧。
var box:SBox = new SBox(400,400);
box.turnOn();
for(var iy:int = 0; iy < 80; iy ++){
  for(var ix:int = 0; ix < 80; ix ++){
    var movie:SSlide = new SSlide(new BitmapData(1,1,false,Math.random() * 0xffffff));
    movie.enabled = false;
    movie.x = ix * 2;
    movie.y = iy * 2;
    box.addSon(movie);
  }
}
addChild(box);
SBox,SSlide等类的内部原本是用自定义命名空间来防止调用某些我不想让使用引擎的开发者调用的接口。
为了测试命名空间区别,因此直接将内部命名空间改成public或者protected,又输出了另一个版本来进行比较,以下两个截图即是!

图1是使用默认命名空间的绘制效率,即本来不想让外部随便访问的属性,改成了protected或者public
图片名称:图1
uploads/201004/30_140900_2.jpg

图2是使用自定义命名空间的绘制效率
图片名称:图2
uploads/201004/30_140904_1.jpg

看了这篇文章后,你也可以回顾这篇文章:http://www.xiaos8.com/article.asp?id=406
这次测试用的图形引擎,就是这篇文章讲引擎的演变过来的,原来的引擎是工作时写的没办法直接开源,现在重新写了一次,并且在不断的优化,和改善其工作方式。

另外上个引擎演示吧。引擎所加载的图片:http://www.xiaos8.com/uploads/flash/engine/image.png
这里面叠加播放了400个动画,目前还没做太多什么优化~优化标准都是按照120帧来跑的

图片名称:正在制作中……
uploads/201004/26_194811_100_1663.jpg

图片名称:两杯黑乎乎的豆浆
uploads/201004/26_194817_100_1669.jpg
黑豆,红豆,黄豆,绿豆各放了一点,最后打出来竟然是黑乎乎的。。喝起来有点像绿豆的味道,还好放了点糖,虽然不是非常好喝,但营养绝对不错!
中医上讲:红主心脏,黄主脾脏,绿主肝脏,黑主肾脏,白主肺脏,而黑红黄绿四种豆分别是针对心肝脾肾的,混着打豆浆,就都补了。。。
博主的话
个人认为这个故事讲的非常的一针见血,值得推荐!
  大学一堂选修课上。教授面带微笑,走进教室,对我们说:“我受一家机构委托,来做一项问卷调查,请同学们帮个忙。”一听这话,教室里轻微的一阵议论开了,大学课堂本来枯燥,这下好玩多了。
  问卷表发下来,一看,只有两道题。
 第一题:他很爱她。她细细的瓜子脸,弯弯的娥眉,面色白皙,美丽动人。可是有一天,她不幸遇上了车祸,痊愈后,脸上留下几道大大的丑陋疤痕。你觉得,他会一如既往地爱她吗?
 A、他一定会 B、他一定不会 C、他可能会

 第二题:她很爱他。他是商界的精英,儒雅沉稳,敢打敢拼。忽然有一天,他破产了。你觉得,她还会像以前一样爱他吗?
 A、她一定会 B、她一定不会 C、她可能会

  一会儿,我们就做好了。问卷收上来,教授一统计,发现:第一题有10%的同学选A,10%的同学选B,80%的同学选C。第二题呢,30%的同学选了 A,30%的同学选B,40%的同学选C。
  “看来,美女毁容比男人破产,更让人不能容忍啊。”教授笑了,“做这两题时,潜意识里,你们是不是把他和她当成了恋人关系?”
  “是啊。”我们答得很整齐。
  “可是,题目本身并没有说他和她是恋人关系啊?”教授似有深意地看着大家,“现在,我们来假设一下,如果,第一题中的‘他’是‘她’的父亲,第二题中的 ‘她’是‘他’的母亲。让你把这两道题重新做一遍,你还会坚持原来的选择吗?”
  问卷再次发到我们的手中,教室里忽然变得非常宁静,一张张年青的面庞变得凝重而深沉。几分钟后,问卷收了上来,教授再一统计,两道题,我们都100%地选了A。
  教授的语调深沉而动情:“这个世界上,有一种爱,亘古绵长,无私无求;不因季节更替。不因名利浮沉,这就是父母的爱啊!”
  善待自己的父母,他们永远是最爱你们的。
1、光学生命探测仪:把废墟看得清清楚楚
  “蛇眼”就是一种搜索仪器,它的学名叫“光学生命探测仪”,是利用光反射进行生命探测的仪器。仪器的主体非常柔韧,像通下水道用的蛇皮管,能在瓦砾堆中自由扭动。仪器前面有细小的探头,可深入极微小的缝隙探测,类似摄像仪器,将信息传送回来,救援队员利用观察器就可以把瓦砾深处的情况看得清清楚楚。

  此外,光学生命探测仪上的探头可以360度旋转,只要废墟上有一个手指粗细的眼,光学生命探测仪就可以伸入,探头在下面旋转后将图像传上来,基本确定被埋人所处的位置和被困地形,在实际救援时可以不伤着被埋压人员。

2、热红外生命探测仪:在黑暗中也能工作
  热红外生命探测仪具有夜视功能,它的原理是通过感知温度差异来判断不同的目标,因此在黑暗中也可照常工作。红外线生命探测仪在感觉人是否存活方面很精确,确保不错过任何仅存一线希望的生者。

  它可以完美地帮助救援队员在废墟灾区或其周围定位遇难者的位置。它能够探测并且显示出遇难者身体的热量,从而帮助救援队员很快确定被埋在废墟底下或隐藏在尘雾后面的遇难者的位置,且能经受住救援现场的恶劣条件。

  热红外生命探测仪还可用于检测煤矿井下隐性火区分布、火源的位置,亦可非接触性检测井下中央与采区变电所各种开关、接头、变压器的事故隐患,水泵、防爆电机及动力设备(动力电缆)的温升,运输机及运输皮带的发热状态。

3、声波生命探测仪:能探寻微弱声音
  声波振动生命探测仪寻找生命靠的是识别被困者发出的声音。人类有两只耳朵,这种仪器却有3—6个耳朵,它的耳朵叫做“拾振器”,也叫振动传感器,它能根据各个耳朵听到声音先后的微小差异来判断幸存者的具体位置。

  说话的声音对它来说最容易识别,因为设计者充分研究了人的发声频率。如果幸存者已经不能说话,只要用手指轻轻敲击,发出微小的声响,也能够被它听到。即便被埋人被困在一块相当严实的大面积水泥楼板下,只要心脏还有微弱的颤动,探测仪也能感觉出来,于是救援队员可以确定废墟下是否有人活着。

4、搜索犬:最“聪明”的搜索能手
  以上搜索仪器都是国际上比较先进的,可它们还不是最“聪明”的搜索能手,在此基础上国家救援队和部分省(市)救援队还引进了一批特殊的“队员”———搜索犬。经过专业培训后,它们成了百发百中的搜索行家。

  犬对气味的辨别能力比人高出百万倍,听力是人的18倍,不仅视野广阔,还有在光线微弱条件下视物的能力,是国际上普遍认为搜救效果最好的“设备”。用犬搜索是现场搜索最为行之有效的方法之一,经验表明:用人工需要30—60分钟才能完成的搜索,用犬只需5—10分钟。在某一地点,如果连续用两条搜索犬都未发现幸存者,则100%可以认为该地区不会有幸存者。当然,犬搜索也不是“万能”的,在使用犬搜索时,应当注意风向。有时搜索犬只能告诉你有幸存者,而无法告诉你准确位置,此时应结合电子设备进行准确定位。另外,搜索犬对气味的要求较高,现场有化学物质、腐烂尸体、夏天的消毒杀虫剂等都会对搜索犬的工作有干扰。

首先我们区分AS3的编译版本,目的是让同样的code,如果使用debug编译,则会含有很多测试代码方便调试;如果使用release编译,则不会将调试代码编译进去。
用过Visual Studio(以下简称VS)的程序员都知道,VS在编译时有个debug和release的选项,而flash builder(以下简称fb)在编译时,虽然可以选择不同路径编译,但无法像VS那样真正的区分编译版本。
下面我依然要说,fb的确没办法像VS那样真正的去区分版本进行编译,但fb可以条件编译!
什么是条件编译
  一般情况下,源程序中所有的行都参加编译。但是有时希望对其中一部分内容只在满足一定条件下才进行编译,即对一部分内容指定编译条件,这就是“条件编译”。
接下来看看,我们怎么样使用条件编译来完成区分编译Debug版本和Release版本:
1、首先来看一段代码:
package {
  import flash.display.Sprite;

  public class TestBuild extends Sprite
  {
    CONFIG::debug
    public function TestBuild()
    {
      graphics.beginFill(0xff0000,1);
      graphics.drawRect(0,0,100,100);
    }
    
    CONFIG::release
    public function TestBuild()
    {
      graphics.beginFill(0x0000ff,1);
      graphics.drawRect(0,0,100,100);
    }
  }
}

2、TestBuild有两个构造函数,不同的是一个构造函数上有CONFIG::debug,一个有CONFIG::release;
通过理解,如果是debug编译画出来的是红色的正方形,而release编译是蓝色正方形。

3、然后我们使用mxmlc命令行对这段代码进行debug编译

mxmlc src/TestBuild.as -define=CONFIG::debug,true -define=CONFIG::release,false -output bin-release/TestBuild.swf
4、得到一个swf文件,打开一看是红色正方形,的确是debug版本编译

5、然后改一下编译参数,进行release编译
mxmlc src/TestBuild.as -define=CONFIG::debug,false -define=CONFIG::release,true -output bin-release/TestBuild.swf
6、得到一个swf文件,打开一看是蓝色正方形,的确是release版本编译

OK,此文讲完了,你看懂了吗?不懂请留言