从ActionScript3编程书籍中的ENTER_FRAME说起

学习一门技术,比较系统的途径仍然是书籍。然而教程书籍有时提供的范例并没有推荐良好的编程习惯,使读者走了不少的弯路。7yue这篇博文便是就ActionScript3编程书籍的一些常见情况来描述这一问题。

现在开始接触ActionScript3编程的爱好者越来越多,他们可以选择从不同的角度来学习ActionScript3编程:书籍,教程,博客,开放源码项目等等。我最近发现一个有趣的现象,就是AS3的部分教程中都存在一个小问题,就是当面向初学者提供某些范例和教程时,这些内容并未从良好的编程经验或者是习惯入手,而是寄期望于日后的学习中,再了解更好的,更加值得使用的方法,我在想,为什么很多教程或文章不能一开始就提供***实践相关的内容给爱好者呢?这样,既提高了学习的效率,也减少了学习的弯路。

比如,下列的一小段代码出自某本O'Reilly的书籍

书中这段代码目的是让开发者了解AS3在SWF中的处理优先级是大于可视化效果的,于是,就先用这样的一段代码来说明:

 
 
 
  1. for (var i:int = 0; i<50; i++){  
  2.   myClip.x+=2;  
  3. }  

这段代码为了说明在循环中,MC的位置根本就不会按照for循环一样,呈现x坐标的递加,而是直接跳转到***循环结束时x坐标的位置上去,这其实没什么问题,但是下面的代码,则是说,开发者可以使用Event.ENTER_FRAME事件来触发一个侦听函数,在侦听函数中处理一个MC的移动。

 
 
 
  1. myClip.addEventListener(Event.ENTER_FRAME,slideClip);  
  2. function slideClip(evt:Event):void{  
  3.   if (myClip.x <100){  
  4.     myClip.x += 2;  
  5.   } else {  
  6.     myClip.removeEventListener(Event.ENTER_FRAME,slideClip);  
  7.   }  
  8. }  
  9.  

开发者在学习这段代码的时候,尤其是初学者,就对Event.ENTER_FRAME有了深刻的印象,于是乎,随着他的学习曲线,以后对于AS3中对于MC的动态处理,他们自然而然的就会不断的用到ENTER_FRAME,甚至于不断的将各种处理机制都放入其中。结果显而易见,大量的应用性能和灵活性问题随之而来,或许在若干长的时间过后,才听到有讲座说,ENTER_FRAME是一个不推荐的编程方式,更推荐大家用Timer云云之类的说法。

这些类似的教程内容本身没有什么错,为了演示一个功能或特点,使用了最容易实现的方法来说明问题,如果这是一个售前工程师的工作,那么这种方式是***的,如果是面向读者和学习的人,这种方法是粗心的,不考虑学习成本和效率的,因为它直接导致了开发者的常用编程方式,直到开发者积累了一定的经验,抑或是付出了一定的代价之后,才会发现有更好的方式,更加的性能来实现同样的结果。所以,如果写书或者是教程,我觉的更好的一点是多考虑一下学习者的成本和曲线,不要为了达到目的,而让学习者获取了一个实际并不可取的方法。

记得以前我就发现过这样的问题,在MSDN上,存在着大量的代码和范例,结果用到后来,才发现是不好的和有很大代价的内容,我就在想,为啥不能在我学习的时候就告诉我一个更好的方法呢?

【编辑推荐】

  1. Adobe进军云计算 Flash云平台服务推出
  2. Adobe 18亿美元收购软件商Omniture 抑制销售下滑
  3. Google或因收购On2与Adobe反目
  4. Adobe向开发者社区开源两项目
  5. Flash Builder能否为Adobe赢得RIA之战
THE END