Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/399.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Easeljs模式-解释差异_Javascript_Easeljs - Fatal编程技术网

Javascript Easeljs模式-解释差异

Javascript Easeljs模式-解释差异,javascript,easeljs,Javascript,Easeljs,我看过两本关于画架的不同教程,一本是大卫·罗塞特的,另一本是李·布里梅洛的。我不确定哪一个更好用,以及有什么区别。示例1(David Rousset): 和示例2(Lee Brimelow): 只需使用位图动画,只需使用基本位图 在示例1中: 1) 更换线路是否相同: Player.prototype.alive = true; 与: 2) 以下内容: Player.prototype.BitmapAnimation_initialize = Player.prototype.initiali

我看过两本关于画架的不同教程,一本是大卫·罗塞特的,另一本是李·布里梅洛的。我不确定哪一个更好用,以及有什么区别。示例1(David Rousset):

和示例2(Lee Brimelow):

只需使用位图动画,只需使用基本位图

在示例1中:

1) 更换线路是否相同:

Player.prototype.alive = true;
与:

2) 以下内容:

Player.prototype.BitmapAnimation_initialize = Player.prototype.initialize; //unique to avoid overiding base class
是的,我不明白这个评论

3) 是否添加此行以启动initilize函数:

Player.prototype = new createjs.BitmapAnimation();
我不确定在示例1中运行new Player()时实际会发生什么

4) 将tick设置为Player的属性意味着您必须在主tick函数中调用此tick函数,在easljs中使用Ticker类的内置onTick事件处理程序(如示例2所示)不是更好吗

上面哪种模式是“最佳实践”,为什么

此外,这两种模式都依赖于创建播放器对象的main.js(并且播放器对象被设置为窗口的属性)。为了使所有内容都不在全局范围内,或者能够在node.js上使用此代码,是否最好也将main.js包装在一个对象中,类似地,并将此主对象作为参数传递给函数而不是窗口

假设你做了一个主js:

Main = {
init: function() {
    //set up and create Player
    var player = new Player;
},
//then adding som properties, variables to Main... for instance
propA: 0 
}

这是否可能/可行?

两种模式之间的差异:

这两种模式(通常,如果按预期使用)的用途不同。 第一种模式用于继承,第二种模式用于MVC。(谷歌模型视图控制器模式)。 就我个人而言,我更喜欢第一种模式,因为它也是EaselJS内部使用的模式,你可能想在更大的项目中考虑MVC,而EaselJS应用程序(通常)不是

另外:对于第二种模式,如果您想利用MVC和继承,您很可能在某个时候也要使用第一种模式,我个人从未见过没有继承的MVC项目。就我个人而言,我从未在JS/EaselJS项目中体验过MVC模式的任何优势(但可能有很多人不同意这种观点,我同意他们在大多数其他语言中的观点,但不同意JS)


回答其他问题:

  • 不,不一样了。如果您编写了
    this.alive=true
  • Player
    -类“继承”自
    BitmapAnimation
    ,模式(在本例中也由EaselJS使用)提供每个类都具有一个
    初始化
    -方法。因此,在为播放器定义初始化方法之前,原始初始化方法“保存”为
    BitmapAnimation\u initialize
    ,然后从新的初始化方法中调用,如下15行

  • 这一行基本上是“注入”(或继承…但严格地说JS没有继承模型,至少不像Java、C、AS3等…)从
    BitmapAnimation
    Player
    ,所以当你创建一个新的播放器时,你可以使用:
    myPlayer.gotoAndPlay('animation')
    但是
    gotoAndPlay()
    实际上是来自
    位图动画的方法

  • 诚然,最好使用
    onTick..
    ,如果对象是该阶段的子对象,则会自动调用该选项,
    tick
    可能仍然来自早期版本的EaselJS(但不太确定)

  • 哪种模式是“最佳实践”:


    我要说的是,第一种模式是(对于EASELJS)最佳实践,因为这也是EASELJS在自己的类中使用的模式。(有一些细微的区别,比如名称空间)。对于一个巨大的项目,你可能需要考虑MVC。

    这是个人偏好。选择一个你理解和喜欢的,并用它跑。我投票结束,因为它太宽泛了,答案主要是观点而不是具体事实。谢谢@olsn,回答得很好。我对onTick和tick做了更多的研究,发现onTick是“不推荐的:支持”tick“事件。将在未来的版本中删除。”。我不知道为什么,这是一个很好的财产。当涉及到问题1时,我的意思是将initialize方法之外的this.alive属性直接设置为Player对象上的公共属性,但我猜这不会起作用?如果在方法之外设置它,它将是
    函数(窗口){…}
    的属性,因此它不会产生任何效果,由于这是一个匿名函数,您以后将无法解决。-
    .prototye.XXX
    方式将使其成为“public”属性,因此当您创建一个播放器时,您可以检查
    myPlayer.isAlive
    -还要注意,“public”和“private”不是JS当前单独支持的。第二个示例与MVC有什么关系?我所能看到的只是显示模块模式。Strickly看到的代码示例本身只是模拟了一个视图控制器模式,但是在没有模型的情况下,你很少看到对该模式的任何解释-这就是为什么我写MVC是为了不把他与谷歌搜索混淆-但它不是显示模块模式,由于RMP是一个返回显示对象的函数(这里的示例:),第二个示例不这样做,第二个示例的任何属性都可以被视为公共的。
    Player.prototype.BitmapAnimation_initialize = Player.prototype.initialize; //unique to avoid overiding base class
    
    Player.prototype = new createjs.BitmapAnimation();
    
    Main = {
    init: function() {
        //set up and create Player
        var player = new Player;
    },
    //then adding som properties, variables to Main... for instance
    propA: 0 
    }