解决AS3中的错误#1007

时间:2014-02-24 18:18:50

标签: actionscript-3 flash

我正在研究AS3,我得到了一个错误1007 ......好吧,真的不知道。这是有问题的代码(一些函数和变量是西班牙语,对不起)

public class Prueba extends Escena 
{

    public function Prueba() 
    {
        super();
        //HERE IS WHERE IT EXPLODES
        AgregarLinea(
            "Prueba 1",
            new Nerea());
        AgregarLinea(
            "Prueba 2",
            Actor.ARIEL);
        AgregarLinea(
            "Prueba 3",
            Actor.ARIEL);
    }

}

当我尝试调用函数“AgregarLinea”时,错误会跳进去。我尝试了几种方式实例化,但我没有运气。以下是相关代码的其余部分:

public class Escena
{

    public var lineaActual:int;
    public var listaLineas:Vector.<Linea>;
    public var fondoEscena:Sprite;

    public function Escena() 
    {
        lineaActual = 0;
        listaLineas = new Vector.<Linea>();
    }

    //PRE:
    //POS: Se devuelve la lista correspondiente al momento actual
    public function ObtenerLinea():Linea {
        var ret:Linea=null;

        if (lineaActual < listaLineas.length) {
            ret = listaLineas[lineaActual];
            lineaActual++;
        }

        return ret;
    }

    public function AgregarLinea(dialogo:String, actor:Actor = null, posActor:Point = null, gesto:String = "normal") {
        trace("Entro a AgregarLinea");
        listaLineas.push(new Linea(dialogo, actor, posActor, gesto));
        trace("Salgo de AgregarLinea");
    }


}

那里没有太多的谜。 “Prueba”的父类。其他类是这两个:

public class Actor extends MovieClip
{
    public var nombre:String;
    public var colorTexto:int = 0x000000;
    public var formatoTexto:TextFormat;

    public function Actor() {
        super();
    }

    //PRE: "gesto" es el nombre de etiqueta de alguno de los fotogramas del objeto
    //POS: Se cambia de fotograma al especificado
    public function CambiarGesto(gesto:String) {
        this.gotoAndStop(gesto);
    }

    //LISTA DE ACTORES DISPONIBLES
    public static var ARIEL:Actor = new Ariel();
    public static var NEREA:Actor = new Nerea();

}

public class Nerea extends Actor 
{

    public function Nerea() 
    {
        super();
        nombre = "Nerea";
    }

}

我不知道到底是什么问题。这是一个非常简单直接的代码,但它说它无法实例化。由于错误从那里激增,因此类Actor存在一些问题:

at Actores::Actor$cinit()
at global$init()
at global$init()

1 个答案:

答案 0 :(得分:0)

很明确问题是静态变量以及它是如何实例化的。 试试这个。

public class Actor extends MovieClip
{
    public var nombre:String;
    public var colorTexto:int = 0x000000;
    public var formatoTexto:TextFormat;

    public function Actor() {
        super();
    }

    //PRE: "gesto" es el nombre de etiqueta de alguno de los fotogramas del objeto
    //POS: Se cambia de fotograma al especificado
    public function CambiarGesto(gesto:String) {
        this.gotoAndStop(gesto);
    }

    //LISTA DE ACTORES DISPONIBLES
    private static var _ARIEL:Actor;
    private static var _NEREA:Actor;


    public static function get ARIEL():Actor{
        if(!_ARIEL){
            _ARIEL = new Ariel();
        }
        return _ARIEL;
    }
    public static function get NEREA():Actor{
        if(!_NEREA){
            _NEREA= new Nerea();
        }
        return _NEREA;
    }
}