重用不同对象的实例名称

时间:2015-04-06 18:06:17

标签: actionscript-3 flash

简单的问题:我如何重用不同对象的实例名称(显然在不同的框架上)?我真的希望能够为我的所有场景使用相同的实例名称,即使这些地面实例属于不同的类,也可以使用#34; ground"我真的不想去命名他们" ground0"," ground1"等等。我意识到有办法绕过这个,但我不想傻瓜所有额外的工作。所以说,如何重用实例名称" ground"没有向我发出这个警告?:

Menu, Layer 'ground', Frame 1   Warning: The instance name 'ground' is declared on an object of type Ground but there is a conflicting use of the instance name 'ground' on an object of type Ground2.

顺便说一句,我意识到一个实例应该是一个特定对象的出现,但说实话,我并没有完全看到在适当时不允许重用实例名称的重点。任何帮助将不胜感激。

2 个答案:

答案 0 :(得分:1)

如果我记得Flash是多么挑剔,它可能与你如何创造"地面"这些框架上的实例。

由此,我的意思是:

  • 您是先创建一个实例,然后再创建新的关键帧(意思是:所有关键帧都使用相同的实例),或者......
  • 您是先开始创建空关键帧,然后拖放/粘贴一个" ground"每个帧中的实例? (意思是:在这种情况下,它可能被视为3个单独的实例)。

我不确定这个假设是否正确,但Flash并不一定将实例与图层绑定,例如"哦,地面在第1层,因此每个帧应重用相同的例如...&#34 ;.在一个完美的世界里,我同意这是有道理的。但是从Flash的早期版本开始,当它主要针对动画师时,任何事情都发生了(从同一帧上有多个形状和实例,从重新排列一个帧/层上的组/实例的深度),它就是#39 ; s仍然假设如果将项目从库中拖放/复制到舞台,它并不一定意味着它们是同一个实例。相反,您必须通过在要使用现有资产实例的框架之后创建更多关键帧(或根据您的需要补间关键帧)来照看Flash。

同样,以上是基于我的经验的假设 - 但如果你确实进入了"地面"对于在每个帧上找到的每个实例,手动实例名称,您可能先前将新实例复制/粘贴或拖动到这些帧。

这听起来像你可能做过的事情吗?

修改

如果你有"地面"跨越几帧的资产,这是不同符号的实例,然后肯定会触发你已经获得的那些警告。我不知道你可以在哪里关闭它们(首选项?项目发布设置?高级AS3设置可能吗?)..但不管怎样,这里有一种可能以编程方式为您工作的方式。

由于每个帧都有一个唯一的实例,每个实例都命名为" ground",你可以创建一个辅助函数来像.getChildByName("ground")方法一样工作(说实话,我'我不确定这种方法是否可以正常工作,你可以尝试)。您需要循环使用给定的MovieClip的孩子(在您的菜单中,我相信你的孩子的情况?),然后检查if(child.name==theNameInQuestion) return child;。 话虽如此,我无法保证这是正确的解决方案(没有测试),因为我不知道你如何在运行时导航帧(播放/停止/ gotoAndPlay) / gotoAndStop / etc),这可能会影响哪些" ground"实例在给定时间可用。在内部,Flash会addChild/removeChild交换掉各种"地面"实例在循环框架时,它不是简单的visible=true/false切换(AFAIK)。

编辑2:

这可能是你需要的吗?

Short GIF video showing the AS3 Advanced Settings to disable Stage instance declarations

答案 1 :(得分:1)

如果您想重用实例名称变量,那么只需使用最顶级的超类类型键入它们。在你的情况下:

var ground:DisplayObject;
ground = new Ground!();
ground = new Ground2();
//etc ....

编辑:如果使用属性面板,则不能对2个对象使用相同的名称,因为无法区分它们。因此会错误地抛出错误。 现在,如果您想在代码中使用,只有一个名称与上面所示相同的原则适用:

var ground:DisplayObject;
ground = ground0;
ground = ground1;
//etc ....

然后你可以安全地在代码中使用变量ground。