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