EaselJS 中的动态舞台名称

Posted

技术标签:

【中文标题】EaselJS 中的动态舞台名称【英文标题】:Dynamic Stage name in EaselJS 【发布时间】:2016-04-30 05:22:27 【问题描述】:

我目前正在开发一个旨在同时显示多个画布的网站,但不知道它将提前显示哪些画布(php 脚本会创建列表)。

这个想法是让(通常)单个处理程序读取多个脚本文件(每个画布一个),该处理程序将填充各个阶段。

stage = new createjs.Stage(context);

我被困在这里了。在创建给定阶段时,我知道要将其附加到的画布的名称(例如,stageA),并且它在 javascript 中名为 context 的变量中可用。在这种情况下,我需要创建一个名为 stageA 的画架;问题是我不能提前知道我不需要 stageB 而不是 stageA 所以创建的舞台名称需要是动态的(等于上下文)。我尝试了一些类似

的东西
eval(context) = new createjs.Stage(context);

但它没有按原样工作。

(我还需要能够对这个动态命名的stage进行操作,即能够做到

stageA.update();

例如,在不知道 stageA 的情况下称为 stageA,但只是基于上下文。)

有什么建议吗?

【问题讨论】:

【参考方案1】:

您可以对带有windows["stageA"] 的全局变量使用括号表示法,或者如果您知道自己在全局范围内this["stageA"]

因此,如果您在全局范围内有一个上下文,并且您有一个带有变量名的字符串,那么您可以像这样通过括号表示法访问它

var stageA = // context of canvas
var stageName = "stageA"
var theStage = window[stageName];

现在theStage 引用stageA

theStage.clearRect(0,0,100,100); 
// same as
stageA.clearRect(0,0,100,100);

可以通过dot notationwindow.alertbraket notationwindow["alert"] 访问所有对象属性。由于 braket 表示法采用字符串,因此您可以在其位置使用变量。

另一个例子

   var myObj = 
       attributeA : 10,
   
   console.log(myObj.attributeA); // output 10;
   console.log(myObj["attributeA"]); // output 10;
   var attributeName  = "attributeA";
   console.log(myObj[attributeName]); // output 10;

全局作用域称为window,但大多数人放下窗口并直接引用全局作用域。例如window.alertalert 相同或window.requestAnimationFramerequestAnimationFrame 相同

全局范围也称为this,但您需要知道您在全局范围内。如果您有信心,那么this["alert"]window["alert"]alertwindow.alertthis.alert 在全球范围内都是相同的引用。

【讨论】:

非常感谢,这很有帮助。现在卡在this 的路上。 (本来想在评论里问的,结果占了太多篇幅。)

以上是关于EaselJS 中的动态舞台名称的主要内容,如果未能解决你的问题,请参考以下文章

Easeljs中的Tween旋转:控制旋转方向

如何使用 EaselJS 在位图上绘制/绘制线条?

EaselJS 拖放 - 在响应式发布中使用拖放

在 EaselJS 中按名称定位多个阶段的子级

Easeljs 使用 mousemove 旋转对象

如何使 flashCC 中的 easeljs/createjs 的 spritesheet 导出器适用于画架 7.0?