EaselJS:从库中实例化对象后如何访问子项

Posted

技术标签:

【中文标题】EaselJS:从库中实例化对象后如何访问子项【英文标题】:EaselJS: How to access the children after instantiating object from library 【发布时间】:2016-11-14 21:22:52 【问题描述】:

我需要一些魔法来获取我刚刚实例化的对象的子对象。故事是这样的:

所以我有一个 Animate CC,我正在制作一个里面有几个孩子的 MovieClip。满意后,我将库中的 Linkage 设置为 FooClip 并发布场景。现在我想编辑 JS 文件并添加一些魔法。假设在每个对象中实例化几个对象和不同的子对象。代码看起来或多或少是这样的:

for (var i = 0; i < 10; i++) 
    var foo = new lib.FooClip();
    var child = foo.getChildAt(i);
    console.log(child);                // This prints out `undefined`
    child.alpha = 0.5;
    foo.x = i * 10;
    stage.addChild(foo);

显然,我在这里遇到了一个错误......

Main.js:58 Uncaught TypeError: Cannot set property 'alpha' of 未定义

添加更多日志并设置断点后,我可以看到在实例化新对象后我还没有任何子对象。 console.log(foo.children); 也没有向我展示任何东西......

但是...添加肮脏的小技巧: setTimeout(function() console.log(foo.children); , 200); 在我的 for 循环中打印出所有的孩子。所以就像我需要等到对象实际实例化并在里面创建所有废话才能访问它。回到过去美好的 Flash 日子,我记得我在等待 ADDED_TO_STAGE 事件,但我在这里看不到类似的东西:/(有 added,但它没有帮助)。

有人知道怎么解决吗?我忘记了一些明显的事情吗?

【问题讨论】:

【参考方案1】:

我很确定这是由于 Animate CC 导出中的一个错误造成的,即儿童无法立即使用。

试试这个:

var foo = new lib.FooClip();
foo.gotoAndStop(0); // Force an update
var child = foo.getChildAt(i);

在即将发布的版本中应该会对此进行修复。

【讨论】:

太棒了!它现在确实有效。很高兴知道gotoAndStop(和 Play)正在强制更新。非常感谢@Lanny。 乐于助人。绝对想解决这个问题!

以上是关于EaselJS:从库中实例化对象后如何访问子项的主要内容,如果未能解决你的问题,请参考以下文章

Android - 如何访问在 onResume 中的 onCreate 中实例化的 View 对象?

如何从类内实例化的对象访问私有变量

C++只能实例化1个对象的类

用TypeScript开发Vue——如何通过vue实例化对象访问实际ViewModel对象

如何在这个 javascript 用户系统代码库中找到用户的实例?

在 Python 中,如何在重新加载后更改实例化对象?