H5C3J 学习笔记 part8 Javascript static function setter

由于KineticJS在移动设备上的糟糕表现,我决定继续寻找性能过关的JS Game Engine,发现一篇讲解比较详尽的文章,作者较为客观的阐述了目前基于JS的Game Engine百花齐放的现状,比较了三个FrameWork,介绍了优缺点,看得我血脉喷张,原文在此 。

我详细读了这篇文章,里面介绍了:

CraftyLimeImpact

最后决定采用我自己利用关键词 “javascript high performance game engine”google出来的引擎。Collie

[![](http://tiger-a-s-s.tobybai.cn/%2525E5%2525B1%25258F%2525E5%2525B9%252595%2525E5%2525BF%2525AB%2525E7%252585%2525A7%2525202013-10-10%252520%2525E4%2525B8%25258B%2525E5%25258D%2525882.08.01.png)](http://tiger-a-s-s.tobybai.cn/%2525E5%2525B1%25258F%2525E5%2525B9%252595%2525E5%2525BF%2525AB%2525E7%252585%2525A7%2525202013-10-10%252520%2525E4%2525B8%25258B%2525E5%25258D%2525882.08.01.png)
Collie:A high performance javascript game engine
原因如下:

1 我并非想要系统地构建一个应用,或者大型游戏,只是想找一个性能在移动设备浏览器上过得去的引擎编写一些有助于学习的Demo。
2 大型框架各自有自己的一套系统体系,需要的预备知识会导致我偏离现在的学习轨道。

因此,我选择了这只来自新罗的牧羊犬作为继续玩学的工具。

同时,我找出了Keith Peters大师的<AdvancED Actionscript 3.0 Animation>,准备静下心好好把里面的牛逼算法们,用js实现一下,学习的同时,证实一下js要实现复杂的游戏运作,还有哪些差距。

今天需要纪录的部分有如下几点: 定义类的静态函数:
 Vector2D.angleBetween = function(v1,v2){  
     if(!v1.isNormalized()){  
       v1 = v1.clone().normalize();  
     }  
     if(!v2.isNormalized()){  
       v2 = v2.clone().normalize();  
     }  
     return Math.acos(v1.dotProd(v2));  
   }  
`</pre>
关于如何为自定义类指定getter和setter的部分,我再次感到了百花齐放的弊端,查到的资料都说,js并未内置实现这个机制,只能借由一些不标准的方式实现,我一看到“不标准”这几个字就浑身不爽,还有些地方进而指明了一个可以用于定义对象属性的标准办法:
<span>
</span><span>Object.defineProperty,[来源在此](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/defineProperty)</span>

可是这种写法带来的问题是,IE不完全支持它(要9+以上).
不管怎么样,我还是用它写了
<pre>`   var _x;  
   var _y;  
   Object.defineProperty(this, "x", {  
     get : function(){ return _x; },  
     set : function(newValue){ _x = newValue; },  
     enumerable : true,  
     configurable : true});  
   Object.defineProperty(this, "y", {  
     get : function(){ return _y; },  
     set : function(newValue){ _y = newValue; },  
     enumerable : true,  
     configurable : true});  

然后有了这样一个例子:

atomic

[![](http://tiger-a-s-s.tobybai.cn/%2525E5%2525B1%25258F%2525E5%2525B9%252595%2525E5%2525BF%2525AB%2525E7%252585%2525A7%2525202013-10-10%252520%2525E4%2525B8%25258B%2525E5%25258D%2525883.53.51.png)](http://tiger-a-s-s.tobybai.cn/%2525E5%2525B1%25258F%2525E5%2525B9%252595%2525E5%2525BF%2525AB%2525E7%252585%2525A7%2525202013-10-10%252520%2525E4%2525B8%25258B%2525E5%25258D%2525883.53.51.png)
在未考虑优化的情况下,
Mac下可以跑到250+没问题,
iphone4s的Safari可以有100个对象在保持30帧的移动,Chrome稍逊(很意外)75个可以同时移动。