Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/actionscript-3/7.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 - Fatal编程技术网

Actionscript 3 类文件中的动画?

Actionscript 3 类文件中的动画?,actionscript-3,Actionscript 3,我发现自己需要在我的课程中参考一些未知帧中的某些动画。最好的方法是什么?我是否应该创建一个custum名称并指定该类的所有实例都应该将某个动画标记为相同的东西。例如: public class CanBeHurt{ public CanBeHurt() extends MovieClip{ // constructor code here } public function hurt():void{ gotoAndPlay("hurt"

我发现自己需要在我的课程中参考一些未知帧中的某些动画。最好的方法是什么?我是否应该创建一个custum名称并指定该类的所有实例都应该将某个动画标记为相同的东西。例如:

public class CanBeHurt{

    public CanBeHurt() extends MovieClip{
        // constructor code here
    }

    public function hurt():void{
        gotoAndPlay("hurt");
    }
}
该类的任何实例都将被强制将伤害动画的开始标记为“伤害”。或者,我可以在构造函数中引入指定帧的字符串,如下所示:

public class CanBeHurt{
    private var hurtAnimationLabel: String;

    public CanBeHurt(hurtAnimationLabel: String) extends MovieClip{
        this.hurtAnimationLabel = hurtAnimationLabel;
    }

    public function hurt():void{
        gotoAndPlay(hurtAnimationLabel);
    }
}
但不幸的是,对于更复杂的对象,我已经有了一堆其他的构造函数输入参数,而且有这么多的动画,我真的不想再添加了。最后,我想到的最后一个选择是:

public class CanBeHurt{
    private var hurtAnimationLabel: String;

    public CanBeHurt() extends MovieClip{
        this.hurtAnimationLabel = this.currentLabels[0];
    }

    public function hurt():void{
        gotoAndPlay(hurtAnimationLabel);
    }
}

不幸的是,对于多个动画,现在我不得不按一定的顺序设置动画标签,以便能够正确地引用它们。在这三种方法中,我发现第一种是最令人满意的,但是有更好的方法吗?

您不需要存储标签名称,只要您想要有效的方法

例如:

public class CanBeHurt{
    private var label: String;

    public CanBeHurt() extends MovieClip{
        label= "hurtLabel";
    }

    public function hurt():void{
        currentFrameLabel != "hurtLabel" ? gotoAndPlay("hurtLabel") : null;
    }
}
public class Example{
   private var label:String = "someLabel1";

   public Example() extends MovieClip{
      //constructor code here
   }
   private function handleAnimation(){
      if(condition){
         label = "someLabel1";
      }
      if(condition2){
         label = "someLabel2";
      }
      gotoAndPlay(label);
   }
}
您应该检查当前帧的标签,然后播放动画以避免帧阻塞。(动画始终位于第一帧)

对于游戏,大多数开发者使用一个函数来控制动画,这就是handleAnimation函数

例如:

public class CanBeHurt{
    private var label: String;

    public CanBeHurt() extends MovieClip{
        label= "hurtLabel";
    }

    public function hurt():void{
        currentFrameLabel != "hurtLabel" ? gotoAndPlay("hurtLabel") : null;
    }
}
public class Example{
   private var label:String = "someLabel1";

   public Example() extends MovieClip{
      //constructor code here
   }
   private function handleAnimation(){
      if(condition){
         label = "someLabel1";
      }
      if(condition2){
         label = "someLabel2";
      }
      gotoAndPlay(label);
   }
}

我通常不会为我的代码扩展movieclip。我创建了一个类,它在构造函数中接受一个MovieClip,并存储对它的引用,然后在函数调用中对它进行操作

当涉及到标签名称时,我通常将它们作为静态变量放在适当的类中


这几年来一直对我很有效:)

以某种方式存储标签名称是否更有效?为什么我会卡在第一帧上,除非我反复调用hert函数?如果我反复调用它,检查当前标签不会有任何作用,因为动画中的后续帧没有命名为“hurtLabel”。为什么我需要一个handleAnimation函数,而我可以告诉它在需要的时候播放我需要的任何动画?还有一个handleAnimation函数将我所有的动画限制在一个类中。你可以为标签添加+1层。假设您从enter\u frame事件函数调用了hert函数,然后可以重复调用它。为了使程序更清晰、更高效,最好将显示和类的核心分开处理。如果我使用ENTER_FRAME事件,我会在动画的第一到第二帧上卡住,因为它会在第二帧上留下帧标签。我看不出如果我单独做而不是一次全部做会更有效率。随着你的动画架构变得越来越复杂,你通常会建立一个跟踪动画逻辑的模型。有些动画是可中断的,有些是不可中断的,有时在开始动画时需要触发回调,有时在完成动画时需要触发回调,有时根本不需要。有些动画循环,有些则不循环。所有这些逻辑最好封装到一个专用类中,该类被合成到您的
MovieClip