Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/perl/9.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_Flash Cs5 - Fatal编程技术网

Actionscript 3 导入外部类

Actionscript 3 导入外部类,actionscript-3,flash-cs5,Actionscript 3,Flash Cs5,我目前正在开发一款Flash平台游戏,我试图让每个关卡都有自己的类,定义一个hitTest函数(每个类都链接到关卡的MovieClip),这将允许角色在关卡上行走。每当我尝试将子类导入文档类时,就会出现错误,这让我抓狂(错误1120:访问未定义的属性) 任何形式的帮助都将不胜感激 文档类(类_Main.as): 以下是可能给您带来问题的几件事: Level2不应创建类_Main的实例。文档类的实例不应该超过一个,并且在启动swf时会自动实例化 在Level2构造函数中,对stage的引用将为n

我目前正在开发一款Flash平台游戏,我试图让每个关卡都有自己的类,定义一个hitTest函数(每个类都链接到关卡的MovieClip),这将允许角色在关卡上行走。每当我尝试将子类导入文档类时,就会出现错误,这让我抓狂(错误1120:访问未定义的属性)

任何形式的帮助都将不胜感激

文档类(类_Main.as):


以下是可能给您带来问题的几件事:

  • 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
    }