Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/6.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
Actionscript 3 重用不同对象的实例名称_Actionscript 3_Flash - Fatal编程技术网

Actionscript 3 重用不同对象的实例名称

Actionscript 3 重用不同对象的实例名称,actionscript-3,flash,Actionscript 3,Flash,简单的问题:如何为不同的对象重用实例名(显然是在不同的帧上)?我真的希望能够为我的所有场景使用相同的实例名“ground”,即使这些ground实例属于不同的类。我真的不想把它们命名为“ground0”、“ground1”等等。我知道有很多方法可以解决这个问题,但我不想浪费所有额外的工作。那么,我如何重用实例名“ground”,而不向我抛出此警告呢 Menu, Layer 'ground', Frame 1 Warning: The instance name 'ground' is dec

简单的问题:如何为不同的对象重用实例名(显然是在不同的帧上)?我真的希望能够为我的所有场景使用相同的实例名“ground”,即使这些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.

顺便说一句,我意识到一个实例应该是一个特定对象的实例,但老实说,我不太明白不允许在适当的时候重用实例名称的意义。任何帮助都将不胜感激。

如果我记得Flash有多挑剔,可能与您如何在这些框架上创建“地面”实例有关

我的意思是:

  • 您是先创建一个实例,然后再创建新的关键帧(意思是:相同的实例将用于所有关键帧),还是
  • 是否首先创建空关键帧,然后在每个帧中拖放/粘贴一个“地面”实例?(意思是:在这种情况下,它可能被视为3个单独的实例)
我不确定这个假设是否正确,但Flash不一定将实例绑定到层,如“哦,地面在层1上,因此每个帧都应该重用相同的实例…”。在一个完美的世界里,我同意这是有道理的。但从Flash的早期版本开始,当它主要面向动画制作者时,任何事情都会发生(从在同一帧上有多个形状和实例,从在一帧/层上重新安排组/实例的深度),它仍然假设如果你将一个项目从库拖/复制到舞台上,这并不一定意味着它们是同一个实例。相反,您必须在要重用的现有资源实例的帧之后创建更多的关键帧(或两个关键帧,具体取决于您的需要),从而为动画提供保姆服务

同样,以上是基于我的经验的假设-但是如果您确实为每个帧上找到的每个实例手动输入了“地面”实例名称,那么您以前很可能会将新实例复制/粘贴或拖动到这些帧上

这听起来像是你做的事吗

编辑:

如果您在几个帧上有“地面”资源,这些帧是不同符号的实例,那么这肯定会触发您收到的警告。我不确定在哪里可以关闭这些设置(首选项?项目发布设置?可能是高级AS3设置?)。。但不管怎样,这里有一种方法可能对您有效,编程方式

由于每个帧都有一个唯一的实例,每个实例都名为“ground”,因此您可以创建一个helper函数来像
.getChildByName(“ground”)
方法一样工作(老实说,我不确定该方法是否能立即工作,您可以尝试)。您需要for循环给定MovieClip的子项(在您的情况下,我相信是在菜单的子项中),并检查
if(child.name==theNameInQuestion)返回child。
尽管如此,我不能保证这是正确的解决方案(未测试),因为我不知道在运行时如何导航帧(play/stop/gotoAndPlay/gotoAndStop/etc),这可能会影响在给定时间可用的“地面”实例。在内部,Flash在帧间循环时,通过
addChild/removeChild
来交换这些不同的“地面”实例,这不是一个简单的
visible=true/false
切换(AFAIK)

编辑2:

这可能是你需要的


如果有任何编程语言,如果要重用实例名称变量,只需使用最顶层的超类类型键入即可。在您的情况下,这将是:

var ground:DisplayObject;
ground = new Ground!();
ground = new Ground2();
//etc ....
编辑:如果使用“属性面板”,则不能对两个对象使用相同的名称,因为无法区分它们。因此将正确抛出一个错误。 现在,如果您只想在代码中使用一个名称,则上述相同原则适用:

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

然后,您可以安全地在可变背景中使用代码。

感谢@bigp的快速响应。我知道创意层在其中起了作用,这很吸引人。至于你关于这些物体是如何形成的问题,我从第一个场景中的一个mc“Ground”开始,然后我复制了这个类,并将其命名为“Ground2”。但是,我试图让两个对象共享相同的实例名“ground”。但是Flash不会有这样的功能,因为它们是不同的类。啊,是的,可以这样做(因为它们是不同的符号实例,或者你所说的类)。但是,如果仍然希望访问每个地面实例(不管它们是实例的类/符号项),也可以通过编程方式按实例或类名查找实例。我可以在我的答案中详细说明(将进行编辑)。理解起来很难,但我会尝试:)-换句话说,在代码中,您希望能够存储对“地面”实例指向的任何引用(第一次),同时保持对时间轴的playhead在任何给定时间落在哪个“地面”实例的引用?我明白了,这可能与高级AS3设置有关。。。屏幕抓取/稍后发布……其效果应该是,即使您在代码中声明了公共变量/属性
ground
,它也不会与舞台上的“ground”实例有任何关联。开发人员有责任将所需的“地面”movieclip的引用存储到
Ground
属性。我不认为OP指的是AS3语言(类的)实例本身,而是通过Flash Pro(CS#/CC)中的属性检查器面板输入的实例名。是否有办法删除一个实例