Actionscript 3 AS3静态阵列工作不正常

Actionscript 3 AS3静态阵列工作不正常,actionscript-3,actionscript,Actionscript 3,Actionscript,我有两个类,一个类声明静态数组(总共3个,它们都存储对象),另一个类更改这些数组中对象的值,例如字符的x值或背景对象 问题是,另一个更改这些静态数组对象值的类只处理一个数组,即Main.Level1rray[0],而Main.Okechurray[0]在尝试更改x值时(该值适用于另一个数组,但不适用于此数组。这非常奇怪),生成一个错误,称为TypeError:error#1010:术语未定义且没有属性。 看看代码,你会看到它看起来如何,这样你可以帮助我理解错误 (这很奇怪,因为它适用于1/2的阵

我有两个类,一个类声明静态数组(总共3个,它们都存储对象),另一个类更改这些数组中对象的值,例如字符的x值或背景对象

问题是,另一个更改这些静态数组对象值的类只处理一个数组,即
Main.Level1rray[0]
,而
Main.Okechurray[0]
在尝试更改x值时(该值适用于另一个数组,但不适用于此数组。这非常奇怪),生成一个错误,称为
TypeError:error#1010:术语未定义且没有属性。

看看代码,你会看到它看起来如何,这样你可以帮助我理解错误

(这很奇怪,因为它适用于1/2的阵列)

另外,我将这些数组放入公共静态数组中,以便其他类可以与它们交互

声明
公共静态数组的类

package  {

import flash.display.MovieClip;
import flash.events.Event;


public class Main extends MovieClip {

    public static var Okchurray:Array = new Array();                   //***HERE****
    public static var Banditrray:Array = new Array();                  //***HERE****
    public static var Level1rray:Array = new Array();                  //***HERE****

    public static var outOfBoundsL:Boolean;
    public static var outOfBoundsR:Boolean;

    public function Main() {
        // constructor code
        stage.addEventListener(Event.ENTER_FRAME, loop)
        //parent.addChild(Okchurray[0]);
    MovieClip(root).objtxt.text = "Objective: Get Your Passport.";
    }
    function loop(e:Event){
        //if okechuku is left or right of the screen stop him and let him walk
        LeftRightTest();
        //check to see if bandit and okochuku are touching
        HitTestOknBan();
        trace(Main.Okchurray.length);
        //if ((Arg[0].x > 500) || (Arg[0].x < 100)){outOfBounds=false;}
    }
    function LeftRightTest(){
        //Holler at bob the builder this is broken.
        if ((Main.Okchurray[0].x > 500) && (Okechuku.D)){ MainLevel.rightSide=true; outOfBoundsR=true;} else {MainLevel.rightSide=false; outOfBoundsR=false;}
        if ((Main.Okchurray[0].x < 100) && (Okechuku.A)){ MainLevel.leftSide=true; outOfBoundsL=true;} else {MainLevel.leftSide=false; outOfBoundsL=false;}
                          //***HERE****

    }
    function HitTestOknBan(){
        if((Main.Banditrray[0]).hitTestObject(Main.Okchurray[0])){
            trace("gotcha");
            Main.Okchurray[0].x = 10
        }
    }
package  {

import flash.display.MovieClip;
import flash.events.Event;


public class Bandits extends MovieClip {

    public static var gotPp:Boolean;
    public static var chase:Boolean;

    public function Bandits() {
        // constructor code

        addEventListener(Event.ENTER_FRAME, loopThis)
        MovieClip(parent).Banditrray.push(this);
    }
    function loopThis(e:Event){
        moveFoward();
        beginChase();


    }
    function beginChase(){

        if((gotPp) && (MainLevel.rightSide)){
            chase=true;
            MovieClip(root).objtxt.text = "Objective: Outrun the bandit before he takes your passport!";
        }

        if((chase) && (x < 200)){x+=2}

        if((MainLevel.toofarR) && (chase)){

        removeEventListener(Event.ENTER_FRAME, loopThis);
        MovieClip(parent).removeChild(this)
        Main.Level1rray[0].x=1600.35;                  //***HERE****
        Main.Okchurray[0].x=10;                  //***HERE****
        }


    }
    function moveFoward(){
        if((MainLevel.toofarR) && (chase) || (!Okechuku.Space) && (chase) || (Okechuku.A) && (chase)){
            x+=6;
        }

    }

}

}

关于您的代码有很多话要说!你的数组
Main.Okchurray
很可能是空的,因为你没有向它推送任何东西(至少在你发布的代码中没有),所以
Main.Okchurray[0]
undefined
,而
undefined.x
抛出TypeError:Error\1010。换句话说,你试图使用一个尚未初始化的值

你是否在
Okchurray
某个地方塞了东西?另外,当我试图编辑你的帖子时,我发现了一个潜在的输入错误:你在一个地方说
Okchurray
,在另一个地方说
Okchurray
。LeftRightTest()似乎在向Main.Okchurray添加内容之前执行。我不明白你为什么需要数组。你没有在我看到的数组中循环,所以为什么不使用普通的电影剪辑?@CristinaGeorgescu,因为我不知道如何使用在舞台上、类中已经实例化的地址MovieClips。