Flash 如何在对象类中从时间轴上的帧引用变量

Flash 如何在对象类中从时间轴上的帧引用变量,flash,actionscript-3,variables,object,movieclip,Flash,Actionscript 3,Variables,Object,Movieclip,我使用的是Flash Professional cs5/AS3 我会尽力描述这一点。我不熟悉ActionScript 所以,在我的时间线中,我在一个代表“生命”的框架上有一个var,我在时间线中有一些代码,根据某些事件记录生命的数量,这一切都很好 所以,现在我想创建一个构造函数类,我可以重用它来处理一堆电影剪辑对象,我只希望这些对象能够在lives变量大于某个数字时移动。现在,为这些对象构建我的构造函数类,我只想放一个if语句,看看生命是否大于某个数字,如果它大于某个数字,那么应该让这些对象做我

我使用的是Flash Professional cs5/AS3

我会尽力描述这一点。我不熟悉ActionScript

所以,在我的时间线中,我在一个代表“生命”的框架上有一个var,我在时间线中有一些代码,根据某些事件记录生命的数量,这一切都很好

所以,现在我想创建一个构造函数类,我可以重用它来处理一堆电影剪辑对象,我只希望这些对象能够在lives变量大于某个数字时移动。现在,为这些对象构建我的构造函数类,我只想放一个if语句,看看生命是否大于某个数字,如果它大于某个数字,那么应该让这些对象做我想做的…但是,当我运行项目时,我得到了“1120:未定义属性生命的访问权”。生命是我所做的变量,很明显,就像我所说的,当我为这些对象创建一个新的.as文件时,它可以很好地引用其他人,然后尝试引用它。当我尝试在主项目类中建立“生命”时,我也会遇到同样的错误。我不确定应该把这个变量放在哪里,也不知道如何才能从对象类引用它

我真的不知道如何用词或描述我的问题,这使得我很难搜索教程。任何建议我都相信这是一项简单的任务。

您可以在类文件中将“生命”变成一个静态变量。您应该知道,对于静态变量是否是一件好事存在一些争议,但是如果您的项目不是太大,并且它适合您,那么您可以使用它。这当然很容易

如果在类中将某个对象声明为静态对象,则该对象将成为全局对象(=可用于所有代码)

基本上,您可以在类(.as)文件中编写:

现在,在您的时间线代码中,您必须用这个替换您正在使用的var。您可以通过键入类名后跟一个点和静态变量名来访问静态变量。例如:您的类名为“MyClass”。然后通过键入MyClass.lives来访问var

您确实需要导入类文件,但我假设您知道如何工作,并且使用CS5 auto complete(ctrl+spacebar),我认为它可以为您实现这一点。大概是这样的:

import myclassdirectory.MyClass;

将时间线用于图形资产和代码的外部类被认为是最佳实践,这将为您提供更大的灵活性,并且您提到的问题应该不会太难解决

考虑文档类中的一些参数

 public class MyDocumentClass
 {
      //An Object to store various parameters,
      //you could also use separate vars depending on
      //your MCs requirements
      private var params:Object ;

      public function MyDocumentClass
      {
          params = {};
          params.lives = 99;

          //Create a new MovieClip instance
          var myObject:MyObject = new MyObject( params );

          //fron now on you can access the lives property in your object
          addChild( myObject );

      }
  }

其他答案肯定是很好的解决方案,非常有用,第一个可能更好。但我决定在我的情况下使用的只是在主框架上创建一个函数,其中包含减少生命的代码。然后我通过这样做从另一个fram运行函数

//created a var in my movieclip that "contained" the main timeline
var main:MovieClip = MovieClip(this.parent.parent);

//then simply ran the function from the movieclip
main.decreaseLife();
//created a var in my movieclip that "contained" the main timeline
var main:MovieClip = MovieClip(this.parent.parent);

//then simply ran the function from the movieclip
main.decreaseLife();