如何直接访问动画片段符号? - Actionscript 3.0

时间:2009-08-16 09:26:44

标签: flash actionscript-3

我制作了一个名为“SwordHolder”的影片剪辑符号,然后完成了我的所有动画,并将剑架放在另一个动画片段的正确位置(把我带走了)。我想我可以改变SwordHolder movieclip符号中的图像,所以我做了所有这些。

好了,我发现我很难弄清楚如何用剑柄影片剪辑符号更改/添加/删除图像,而不创建它的新实例(显然这不是我想要的)。

如何在不创建新实例的情况下直接访问动画片段(在我的库中)?我想我可以像[var refSwordHolder:SwordHolder; refSwordHolder.addChild(剑);]但它似乎不允许我这样做。

帮助越快越好......我需要在几个小时内解决这个问题:(

谢谢!

5 个答案:

答案 0 :(得分:0)

MovieClip符号是MovieClip的子类。您需要为此类以及可能的公共静态方法定义公共静态变量,以便能够操作类本身,而不是其实例。

您不能对类进行addChild(),因为该类只是一个蓝图。它在您的显示列表中不存在。

据我所知,您需要完全在AS3中编写该类以允许此类行为。

希望这有帮助。

答案 1 :(得分:0)

如果您使用的是Flash CS3(因为您必须使用MovieClip),为什么不在编辑器中编辑符号?如果您查看Flash库,您将看到名为“SwordHolder”的Symbol,您可以双击它来编辑它。这是最简单的选择。

如果右键单击库中的符号,请转到“属性”,然后可以选中“为ActionScript导出”框。下面的字段之一是Class字段,您可以在其中指定要与Symbol关联的类。因此,您可以创建一个名为SwordHolder的类(将其放在文件的类路径中),并将其与符号相关联,并为构造函数中的每个实例执行所需的任何代码。默认情况下,类名与符号名称相同。

e.g。

package
{
    import flash.display.MovieClip;

    public class SwordHolder extends MovieClip
    {
        public function SwordHolder()
        {
            super();

            // do what needs to be done
        }
    }
}

答案 2 :(得分:0)

如何让SwordHolder类成为Singleton ...这听起来像个好人。

Singleton可能是最简单的设计模式。我们的想法是,通过遵循这种模式,您可以确保在整个应用程序中只创建一个类的实例。

SharedObject就是一个例子。您不使用新的SharedObject创建和实例,而是使用SharedObject.getLocal()或getRemote()。

这是一个粗略的想法:

package yourcoolgame.assets{
   import flash.display.MovieClip;

   public class SwordHolder extends MovieClip{
      private static var instance:SwordHolder;

      public static function getInstance():SwordHolder {
         if (instance == null) {
            instance = new SwordHolder(new SingletonLock());
          }
         return instance;
       }

      public function SwordHolder(lock:SingletonLock):void {
         if (lock == null) {
            throw new Error("Error: Instantiation failed: Use SwordHolder.getInstance() instead of new.");
          }
       }
    }
}
internal class SingletonLock {}

当您尝试使用 new 创建和实例时,该类应该抛出并出错。 您可以使用SwordHolder.getInstance()在应用程序中的任何位置创建和实例 它始终是对同一个实例的引用。你可以添加孩子等等

如果这可能比您需要的更多,并且您正在寻找简单的东西,因为您正在使用IDE ...您可以在该剪辑的不同帧中添加符号(其他剑)并使用标签。 ..你会有像

这样的东西
public function setSword(swordID:String):void{
this.gotoAndStop(swordID);
}

希望它有所帮助。

答案 3 :(得分:0)

你没有引用这个角色吗?那么你应该能够通过hieraki获得剑的参考。

如果没有,您可以创建一个SwordHolder类,将实例的引用保存在静态变量中。像这样:

package MyGame
{
    import flash.display.MovieClip;

    public class SwordHolder extends MovieClip
    {
        private static var _Instance:SwordHolder = null;

        public function SwordHolder()
        {
            if(_Instance == null)
                _Instance = this;
            else
                throw new Error("Only one SwordHolder instance allowed");
        }

        public static function get Instance():SwordHolder
        {
            return _Instance;
        }
    }
}

答案 4 :(得分:-1)

因此,如果我理解正确,您将SwordHolder movieclip的实例放在IDE中,现在您想要更改SwordHolder movieclip实例显示的图像/精灵吗?

您可以执行Singleton操作(其他一些人也建议),然后在SwordHolder动画片段中加载并显示不同的图像/精灵。因此,您需要在SwordHolder类中使用一种方法来更改它显示的图像。