AS3 статический массив работает неправильно

У меня есть два класса, один класс объявляет статические массивы (всего 3 из них и все они хранят объекты), а другой изменяет значение объектов в этих массивах, таких как значение x символа или фоновых объектов.

Проблема состоит в том, что другой класс, который изменяет значение этих объектов статического массива, управляет только с Main.Level1rray[0] только массивом, который является Main.Level1rray[0] то время как Main.Okechurray[0] создает ошибку, Main.Okechurray[0] TypeError: Error #1010: A term is undefined and has no properties. когда я пытаюсь изменить значение x (которое работает с другим массивом, но не с этим, что очень странно).

Посмотрите на код, и вы увидите, как он выглядит, чтобы вы могли помочь мне понять ошибку

(ЭТО ВИДЕО, ПОТОМУ ЧТО ЭТО РАБОТАЕТ НА 1/2 СТРЕЛЫ)

PS Я помещал эти массивы в общедоступные статические массивы, чтобы другие классы могли взаимодействовать с ними.

Класс, который объявляет Public Static Arrays:

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

}}

Класс, который изменяет значение x этих Public Static Arrays:

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

 }

}

}

1 ответ

было бы много сказать о вашем коде! Ваш Array Main.Okchurray скорее всего пуст, потому что вы ничего не Main.Okchurray на него (по крайней мере, не в том коде, который вы опубликовали), поэтому Main.Okchurray[0] не undefined, а undefined.x выдает TypeError: Error # 1010. Другими словами, вы пытаетесь использовать значение, которое вы не инициализировали

licensed under cc by-sa 3.0 with attribution.