Javascript Easeljs模式-解释差异
我看过两本关于画架的不同教程,一本是大卫·罗塞特的,另一本是李·布里梅洛的。我不确定哪一个更好用,以及有什么区别。示例1(David Rousset): 和示例2(Lee Brimelow): 只需使用位图动画,只需使用基本位图 在示例1中: 1) 更换线路是否相同: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
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在initialize方法中,则在代码的整个运行时都会得到相同的结果,但严格来说,这与设置prototype属性不同(但这会深入到JS内部功能)
Player
-类“继承”自BitmapAnimation
,模式(在本例中也由EaselJS使用)提供每个类都具有一个初始化
-方法。因此,在为播放器定义初始化方法之前,原始初始化方法“保存”为BitmapAnimation\u initialize
,然后从新的初始化方法中调用,如下15行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
}