admin管理员组

文章数量:1666731

从我第一天了解到javascript开始,就听说在这里是没有类的。其实一开始我是沮丧的,尽管我并不知道有没有“类”对编程究竟有多大影响,不过有缺憾总是让人感觉遗憾,哪怕这是一个你可能永远不会用到的东西。确实,在没有任何自定义“类”的情况下,也能做出一款打飞机的游戏。

我们用到的是EaselJS中所定义的一些可以重复使用的对象,并且这些对象包含一些类似于类的行为,比如可以new 一个新的对象实例。为方便理解,我们在这里先把这些称作类。

在EaselJS中类的关系结构图:

偶然间找到了这张图,EaselJS中类的结构变的一目了然,元素的基类是DisplayObject,Container同做动画用的Sprite、显示图片的Bitmap、显示 图形的Shape、甚至包括Filter,基类都是DisplayObject,而stage则是继承自Container。

令人欣慰的是,在EaselJS中我们同样可以通过继承现有这些类的方式来创建自己的类,通过继承而来的新类,对EaselJS现有的元素进行功能上进行扩展,调用方式跟创建Sprite/Shape这些也没什么太大的不同,并且可以重复使用。我总觉得这好过使用javascript创建一个“模拟类",一般直接使用javascript来创建模拟类的代码看起来是这样的:

function Shape(color){
                this.color=color;
            }
            Shape.prototype.size=50;
            Shape.prototype.draw=function(){
              .....  
            }
            
            

必须在定义Shape的变量和成员函数时使用prototype才能保证使用你创建的Shape实例化的对象能够拥这些变量和成员函数(读起来真别扭,因为在javascript中并没有类的概念,我们所定义的Shape也是一个对象,不使用prototype的话,定义的size只是Shape对象的一个私有变量;而prototype的功能是使你定义的size和draw指向Shape的父类,这是一个虚拟的父类,但是通过prototype定义后,在示例化Shape时,由于它的父类包含着size和draw,所以其他由shape实例化而来的对象也会拥有size和draw。)

真够令人迷茫的,万幸,使用EaselJS,你可以这样来实现一个自定义类:

本文标签: 如何使用元素基础游戏Createjs