Actionscript 3 导入外部类
我目前正在开发一款Flash平台游戏,我试图让每个关卡都有自己的类,定义一个hitTest函数(每个类都链接到关卡的MovieClip),这将允许角色在关卡上行走。每当我尝试将子类导入文档类时,就会出现错误,这让我抓狂(错误1120:访问未定义的属性) 任何形式的帮助都将不胜感激 文档类(类_Main.as):Actionscript 3 导入外部类,actionscript-3,flash-cs5,Actionscript 3,Flash Cs5,我目前正在开发一款Flash平台游戏,我试图让每个关卡都有自己的类,定义一个hitTest函数(每个类都链接到关卡的MovieClip),这将允许角色在关卡上行走。每当我尝试将子类导入文档类时,就会出现错误,这让我抓狂(错误1120:访问未定义的属性) 任何形式的帮助都将不胜感激 文档类(类_Main.as): 以下是可能给您带来问题的几件事: Level2不应创建类_Main的实例。文档类的实例不应该超过一个,并且在启动swf时会自动实例化 在Level2构造函数中,对stage的引用将为n
以下是可能给您带来问题的几件事:
- Level2不应创建类_Main的实例。文档类的实例不应该超过一个,并且在启动swf时会自动实例化
- 在Level2构造函数中,对stage的引用将为null。在将对象添加到显示列表之前,无法获取对stage的引用,而要在构造函数已经运行之后才能执行此操作
- 我看不到在构造函数中创建的对象(级别1和级别2)添加到stage的任何地方。如果这些项目是您已经在FlashIDE的stage中添加的符号,那么您不需要在构造函数中创建它们的新实例
- 如果对象位于同一个包中,则不需要添加导入语句
我不知道这些东西是否会清除您的错误,但它们至少会让您更接近。您需要将对主类的引用传递到级别类中,而不是尝试创建新实例。最简单的方法是通过level类的构造函数传递引用,因此在实际使用主类构造函数之前,不应实例化level类:
public class Class_Main extends MovieClip
{
public var leftKeyDown:Boolean = false;
public var rightKeyDown:Boolean = false;
public var upKeyDown:Boolean = false;
public var downKeyDown:Boolean = false;
public var onGround:Boolean = true;
public var xSpeed:Number = 0;
public var ySpeed:Number = 0;
public var mainSpeed:Number = 3.75;
public var frictionPower:Number = 0.9;
public var jumpPower:Number = 15;
public var gravityPower:Number = 0.7;
public var terminalVelocity:Number = 75;
public var Level_1:Level1;
public var Level_2:Level2;
public function Class_Main()
{
addEventListener(Event.ADDED_TO_STAGE,init);
Level_1 = new Level1(this);
Level_2 = new Level2(this);
// constructor code
}
然后:
public class Level2 extends MovieClip
{
public var classMain:Class_Main;
public var level2Walls:Level2Walls = new Level2Walls;
public function Level2($ref:Class_Main)
{
classMain = $ref;
stage.addEventListener(Event.ENTER_FRAME,hitTest_2);
// constructor code
}
最后,在hittest函数中,使用classMain
引用文档类,而不是mcMain
另外,关于级别类实例的名称还有一个旁注-实例或属性的第一个字母应该使用小写字母,即
Level_2
,而不是Level_2
。这不会影响您运行程序的能力,但这是AS3约定,因此是一个好习惯。我遇到错误1120:访问子类(Level2.as)中大多数变量的未定义属性。感谢您的回答,但是现在我在重写代码之后,在Level2.as中的hitTest_2函数中的所有变量都出现了多个错误1120。有没有什么方法可以让Level2.as读取Class_Main.as中的所有变量而不出现任何错误?非常感谢!我仍然会遇到一些错误,但它们都是我无法修复的!
public class Class_Main extends MovieClip
{
public var leftKeyDown:Boolean = false;
public var rightKeyDown:Boolean = false;
public var upKeyDown:Boolean = false;
public var downKeyDown:Boolean = false;
public var onGround:Boolean = true;
public var xSpeed:Number = 0;
public var ySpeed:Number = 0;
public var mainSpeed:Number = 3.75;
public var frictionPower:Number = 0.9;
public var jumpPower:Number = 15;
public var gravityPower:Number = 0.7;
public var terminalVelocity:Number = 75;
public var Level_1:Level1;
public var Level_2:Level2;
public function Class_Main()
{
addEventListener(Event.ADDED_TO_STAGE,init);
Level_1 = new Level1(this);
Level_2 = new Level2(this);
// constructor code
}
public class Level2 extends MovieClip
{
public var classMain:Class_Main;
public var level2Walls:Level2Walls = new Level2Walls;
public function Level2($ref:Class_Main)
{
classMain = $ref;
stage.addEventListener(Event.ENTER_FRAME,hitTest_2);
// constructor code
}