所以我已经到了一个我必须提出问题的地步,我已经花了3个小时谷歌了几个小时。我希望你们能帮助我。
我很确定我已经定义了var UsedSlot,但它说错误1120。 我已经尝试过将它放在不同的线路上,比如定时器之前和之后。我只是一个新手,我需要这个用于我的学期项目。
以下是错误
场景1,图层'播放器',第1帧,第55行1120:访问未定义属性UsedSlot
场景1,图层'播放器',第1帧,第62行1120:访问未定义属性UsedSlot
场景1,图层'播放器',第1帧,第90行1120:访问未定义属性UsedSlot
场景1,层'播放器',帧1,线91 1120:访问未定义属性UsedSlot。
stop();
import flash.display.MovieClip;
import flash.events.Event;
import fl.motion.MotionEvent;
import flash.utils.Timer;
import flash.events.TimerEvent;
//initialize objects
var PlayerItems:Array = [new Items_Player_Cheese(),
new Items_Player_Cheese(),
new Items_Player_Cheese(),
new Items_Player_Cheese(),
new Items_Player_Cheese(),];
//hard code test ***working***
/*PlayerItems[0].x = Guide_Test_Start.x;
PlayerItems[0].y = Guide_Test_Start.y;
stage.addChild(PlayerItems[0]);*/
///////////////////
var j:int;
var SlotUsed:Array = new Array(PlayerItems.length);
for(j = 0 ; j < SlotUsed.length; j++)
{
SlotUsed[j] = -1
trace(SlotUsed[j]);
}
for(j = 0; j < PlayerItems.length; j++)
{
PlayerItems[j].x = Guide_Test_Start.x;
PlayerItems[j].y = Guide_Test_Start.y;
}
var PlaceOccupied:Array = [false,false,false,false,false];
//check if a place is unoccupied
var myTimer:Timer = new Timer(3000);
myTimer.addEventListener(TimerEvent.TIMER, CheckVacancy);
myTimer.start();
//choose a starting location
var CVSync:int;
function CheckVacancy(e:TimerEvent)
{
for(CVSync = 0 ; CVSync < 5; CVSync++)
{
if(PlaceOccupied[CVSync] == false)
{
// Put an object
var ItemIndex = randomRange(0,PlayerItems.length - 1);
while(UsedSlot[ItemIndex] > -1)
ItemIndex = randomRange(0,PlayerItems.length - 1);
trace("Item["+ItemIndex+"] placed on ["+CVSync+"]");
PlayerItems[ItemIndex].x = StartGuide[CVSync].x;
PlayerItems[ItemIndex].y = StartGuide[CVSync].y;
UsedSlot[j] = ItemIndex;
PlaceOccupied[CVSync] = true;
trace("Vacant Slot Filled" + getTimer() + " ms");
break;
}
}
}
//Instantiate the objects
for(j = 0; j < PlayerItems.length; j++)
{
trace("Adding Player Items");
stage.addChild(PlayerItems[j]);
}
//Add Listener To determine A hit
for(j = 0; j < PlayerItems.length; j++)
{
PlayerItems[j].addEventListener(MouseEvent.MOUSE_UP, MUp);
}
function MUp(e:MouseEvent):void
{
for(j = 0; j < PlayerItems.length; j++)
{
if(PlayerItems[j].hitTestObject(MyItem[0]))
{
CVSync[UsedSlot[j]] = false;
UsedSlot[j] = -1;
PlayerItems[j].x = -100;
trace("Point by: " + MyItem[0].name.toString());
break;
}
}
}
/*cheese.addEventListener(MouseEvent.MOUSE_UP, MUp);
function MUp(e:MouseEvent):void{
if(cheese.hitTestObject(MyItem[0]))
{
trace("Cheese Eaten by: " + MyItem[0].name.toString());
cheese.x = Guide_Test_Start.x;
cheese.y = Guide_Test_Start.y;
}
}*/
function randomRange(minNum:Number, maxNum:Number):Number
{
return (Math.floor(Math.random() * (maxNum - minNum + 1)) + minNum);
}
答案 0 :(得分:1)
我很确定我已经定义了var UsedSlot
不,你没有,这就是问题所在。
名称UsedSlot
在您发布的代码段中出现4次,这是导致4次错误的行。
他们都没有定义变量。
但您确实定义了另一个变量:
var SlotUsed:Array
代码。
如果不清楚:这是两个不同的变量。仅仅因为您在代码中的某处定义变量SlotUsed
并不意味着您可以通过其他名称来访问它,例如UsedSlot
。
这是区分大小写的,这意味着SlotUsed
和slotUsed
不会被视为相同。
作为一个建议,“非常肯定”在找到这样的问题时通常毫无价值。相反,通过查找声明来证明它。如果你找不到它,它可能不存在。毕竟,编译器找不到它。
使用小写字母启动变量名称是一种常见的约定,这有助于将它们与类(或接口...)的名称区分开来。 虽然您可以选择自己想要的代码,但如果您坚持使用常规约定,那么其他人就可以更轻松地阅读您的代码,从而简化了帮助您解决问题的任务。 =)