舞台上的对象在跳转到它们的框架时不会被读取
Posted
技术标签:
【中文标题】舞台上的对象在跳转到它们的框架时不会被读取【英文标题】:Objects on the stage are not read when jumping to their frame 【发布时间】:2016-12-20 05:24:22 【问题描述】:我正在开发一个 Air 桌面应用程序。在某些时候,当用户按下按钮时,它会跳转到特定的帧,问题是在转到该帧后,在该帧的舞台上的一些 Movieclip 虽然从一开始就被读取,但并没有被读取。
出现以下错误。
错误 #1009:无法访问空对象的属性或方法 参考。
我不知道他为什么看不懂已经在舞台上的东西,我猜是与层数的排列有关。我注意到有时虽然我觉得它不合逻辑,但它应该读取所有在同一帧中的内容,只要它停止就可以了,对吧?
项目如下:
1) 一开始播放介绍,然后进入课程的第一帧。
2) 在第一帧,用户选择 5 个按钮中的一个来单击,根据每个按钮转到不同的帧。
3)当用户在任何帧时,如果他点击后退按钮,它应该返回到主帧,这个按钮命令是gotoAndStop(1)
和一些有条件的removeChild()
,用于根据帧从代码生成的任何对象中清除舞台该函数是从那里调用的。
4) 当单击此后退按钮时出现问题,前 5 个按钮中的一个或多个突然消失,并生成错误 - 由于某种未知原因 - 程序无法读取任何此外,它无法读取任何事件并产生上述错误。
我的代码如下:
var myLettersLoader:URLLoader= new URLLoader();
mainMenu.addEventListener(MouseEvent.CLICK,gotomainMenu);
letters.addEventListener(MouseEvent.CLICK,showLetters);
lessons.addEventListener(MouseEvent.CLICK,showLessons);
revision.addEventListener(MouseEvent.CLICK,showRevision);
myLettersLoader.load(new URLRequest("data/letters/letters.xml"));
myLettersLoader.addEventListener(Event.COMPLETE,loadXML);
function showLetters(e:MouseEvent)
//gotoAndStop(2)
//aaaaa.alpha=1;
//aaaaa.visible=true;
Tweener.addTween(e.currentTarget, width:originalWidth,height:originalHeight, time:0.25, transition:"linear");
myPlace.visible = true;
myPlace2.visible = false;
myPlace3.visible = false;
jewels.visible = false;
mainContainer.visible=false;
close.visible=false;
studentBook.visible = false;
mainButton = e.currentTarget.name;
Tweener.addTween(myPlace, alpha:1, transition:"linear");
lettersContainer.visible=true;
Tweener.addTween(letterContainerText, alpha:1, transition:"linear");
for (var i=1; i<29; i++)
var letter = "L" + i;
myPlace[letter].id = i;
myPlace[letter].alpha = 1;
myPlace[letter].addEventListener(MouseEvent.CLICK,gotoLetterFrame);
myPlace[letter].buttonMode = true;
function showLessons(e:MouseEvent)
Tweener.addTween(e.currentTarget, width:originalWidth,height:originalHeight, time:0.25, transition:"linear");
myPlace.visible= false;
myPlace2.visible = true;
myPlace3.visible = false;
jewels.visible = false;
mainContainer.visible=false;
close.visible=false;
studentBook.visible = false;
lettersContainer.visible=true;
mainButton = e.currentTarget.name;
Tweener.addTween(myPlace2, alpha:1, transition:"linear");
studentBook.alpha = 0;
for (var i=0; i<5; i++)
var lesson = "Lesson" + i;
myPlace2[lesson].id = i;
myPlace2[lesson].alpha = 1;
myPlace2[lesson].addEventListener(MouseEvent.CLICK,gotolessonFrame);
myPlace2[lesson].buttonMode = true;
//=======================Revision functions==================================
function showRevision(e:MouseEvent)
Tweener.addTween(e.currentTarget, width:originalWidth,height:originalHeight, time:0.25, transition:"linear");
myPlace.visible= false;
myPlace2.visible = false;
myPlace3.visible = true;
jewels.visible = false;
mainContainer.visible=false;
close.visible=false;
studentBook.visible = false;
lettersContainer.visible=true;
mainButton = e.currentTarget.name;
Tweener.addTween(myPlace3, alpha:1, transition:"linear");
studentBook.alpha = 0;
for (var i=0; i<7; i++)
var revision = "Revision" + i;
myPlace3[revision].id = i;
myPlace3[revision].alpha = 1;
myPlace3[revision].addEventListener(MouseEvent.CLICK,gotoRevisionFrame);
myPlace3[revision].buttonMode = true;
//========================================================
function gotoLetterFrame(e:MouseEvent)
reloadButton.visible=true;
mainMenu.visible=true;
myClose.visible=true;
reloadButton.visible=true;
myNext.visible=true;
currentTarget=(e.currentTarget.id-1);
currentName = arrOfLetters[currentTarget];
xmlListOfClass=new XMLList(myxml.letter.(@id==currentName).children());
gotoAndStop(xmlListOfClass[counter].localName());
abc.visible=abcd.visible=true;
mainMenu.buttonMode=true;
function gotolessonFrame(e:MouseEvent)
reloadButton.visible=true;
mainMenu.visible=true;
myClose.visible=true;
reloadButton.visible=true;
myNext.visible=true;
currentTarget=(e.currentTarget.id);
xmlListOfClass = new XMLList(lessonsArr[currentTarget].lesson.children());
gotoAndStop(xmlListOfClass[counter].localName());
abc.visible=abcd.visible=true;
mainMenu.buttonMode=true;
function gotoRevisionFrame(e:MouseEvent)
reloadButton.visible=true;
mainMenu.visible=true;
myClose.visible=true;
reloadButton.visible=true;
myNext.visible=true;
currentTarget=(e.currentTarget.id);
myRevisionLoader.load(new URLRequest("data/revisions/"+currentTarget+"/revision.xml"));
myRevisionLoader.addEventListener(Event.COMPLETE,loadRevisionXML);
//=====================================
function loadLessonXML(e:Event)
lessonsArr[xx] = new XML(e.target.data);
xx++;
//==============================For revision==================================
function loadRevisionXML(e:Event)
revisionArr = new XML(e.target.data);
xmlListOfClass = new XMLList(revisionArr.revision.children());
gotoAndStop(xmlListOfClass[counter].localName());
abc.visible=abcd.visible=true;
mainMenu.buttonMode=true;
function loadXML(e:Event)
myxml = new XML(e.target.data);
//====================================
function gotomainMenu(e:MouseEvent)
gotoAndPlay(1);
这段代码在第一帧,第二帧是按钮mainButton
是负责返回第一帧的按钮
lessons
,letters
,revision
按钮在返回到第 1 帧时会消失,或者其中一个按钮有时会在没有逻辑原因的情况下消失
【问题讨论】:
提供更多细节。您希望在没有按预期工作的每一帧上读取的代码是什么?不要在评论中回答;使用此信息编辑您的问题。 @NealDavis 我修改了我的问题更清楚 @null 我用我的代码修改了问题 【参考方案1】:我解决了。这完全是关于层的排列。 我所做的只是将包含 5 个按钮的图层放在其他图层下方。这出人意料地解决了这个问题。直到现在我才知道原因,但我所知道的是,由于某种原因,某个事件的调用者必须在包含其他对象的其他层下,或者至少在同一层。
【讨论】:
以上是关于舞台上的对象在跳转到它们的框架时不会被读取的主要内容,如果未能解决你的问题,请参考以下文章