我有一个外部ActionScript类,名为Menu.as,尝试使用以下代码访问舞台上的对象:
MovieClip(parent).fullmenu_mc.x = 80;
虽然程序编译,但我得到错误#1009:无法访问空对象引用的属性或方法
我不知道这是怎么可能的,因为对象已经在舞台上而且只需要访问。我是否以某种方式错误地访问了该对象?
我还在Menu.as中尝试了以下代码:
import EngineClass;
var engine : EngineClass = new EngineClass();
engine.fullmenu_mc.x = 80;
,它给出了相同的运行时错误。欢迎任何想法!
答案 0 :(得分:0)
简短版本:
基本上,您首先需要设置一个变量,该变量将作为舞台动画片段的引用名称。如果您希望导入的其他类文件也可以从它们自己的类代码控制此变量(以及影片剪辑),则可以将其设为public static
变量。
所以定义一个public static var menuMC : MovieClip = new MovieClip();
然后当Stage +阶段项可用时(因为Flash首先处理代码然后生成一个Stage +项),我们更新定义以了解舞台上的实例名称它代表的对象是:menuMC = DisplayObjectContainer(getChildByName("fullmenu_mc")) as MovieClip;
现在,您可以使用以下行来通过任何导入的外部类进行更新:Main.menuMC.x = 200;
(其中 Main 是Class的名称,其中包含 menuMC 手段)。
长版:
假设你有这样的设置。
fullmenu_mc
=舞台上对象的实例名称注意:如果您的代码位于时间轴上而不是(Main.as)文档类,请让我知道更新(如果可能),但上面的类设置会更容易...
在 Main.as ..(定义变量并运行外部类中的函数)
package
{
import flash.display.MovieClip;
import flash.display.*;
import flash.events.*;
import External;
public class Main extends MovieClip
{
public var ExtClass : External = new External; //init the external class
public static var menuMC : MovieClip = new MovieClip(); //reference to on-stage MC
public function Main ()
{
if (stage != null) { Init(); } //do Init function if SWF loaded ok...
else { addEventListener (Event.ADDED_TO_STAGE, Init); } //or do the function when ready..
}
//If stage is available then we can now do this
public function Init (event:Event = null) :void
{
//update menuMC to know it means some item "X" on stage. "X" is instance name
menuMC = DisplayObjectContainer(getChildByName("fullmenu_mc")) as MovieClip;
trace("menuMC is type : " + menuMC); //if ok then traces [object MovieClip]
menuMC.x = 10; //just for testing
ExtClass.accessTest(); //run some function in External class
}
}
}
现在在 External.as 中,我们可以像这样控制fullmenu_mc
(现在称为 menuMC )..
public function accessTest () :void
{
//access stage item using Static Variable from Main Class
Main.menuMC.x += 500;
trace("Full_menu... new x-pos is : " + Main.menuMC.x);
}