这是我的课程
Main - 创建预加载器 预加载器 - 创建网站 网站 - 创建MainMenu
单击主菜单中的按钮时,会创建一个对象。当单击另一个时,需要删除该对象。移除部分有点乱。
package src
{
import com.greensock.TweenLite;
import flash.display.MovieClip;
import flash.events.MouseEvent;
import flash.geom.Point;
/**
$(CBI)* ...
$(CBI)* @author servet
$(CBI)*/
public class MainMenu extends MovieClip
{
public var filmlerButton:MovieClip;
public var filmleralt:FilmAltButtonlar;
private var ANASAYFA_ORIGINAL_Y:Number;
private var HAKKIMIZDA_ORIGINAL_Y:Number;
private var FILMLER_ORIGINAL_Y:Number;
private var DAGITIM_ORIGINAL_Y:Number;
private var state:String;
public function MainMenu()
{
init();
}
private function init():void
{
repos();
assignOriginalHeights();
state = " ";
filmlerButton.filmlerhitarea.alpha = 0;
anasayfaButton.addEventListener(MouseEvent.CLICK, onAnasayfaClick);
hakkimizdaButton.addEventListener(MouseEvent.CLICK, onhakkimizdaClick);
filmlerButton.filmlerhitarea.addEventListener(MouseEvent.CLICK, onfilmlerClick);
dagitimButton.addEventListener(MouseEvent.CLICK, ondagitimClick);
}
private function assignOriginalHeights():void
{
ANASAYFA_ORIGINAL_Y = anasayfaButton.y;
HAKKIMIZDA_ORIGINAL_Y = hakkimizdaButton.y;
FILMLER_ORIGINAL_Y = filmlerButton.y;
DAGITIM_ORIGINAL_Y = dagitimButton.y;
//trace(ANASAYFA_ORIGINAL_Y, HAKKIMIZDA_ORIGINAL_Y, FILMLER_ORIGINAL_Y, DAGITIM_ORIGINAL_Y);
}
private function ondagitimClick(e:MouseEvent):void
{
if (state != "anasayfa"&&state!="hakkimizda"&&state!="filmler"&&state!="dagitim") {
state = "dagitim";
traceState();
dagitimButton.gotoAndStop(2);
}else {
state = " ";
traceState();
closeAllMenus();
}
}
private function onfilmlerClick(e:MouseEvent):void
{
if (state != "anasayfa"&&state!="hakkimizda"&&state!="filmler"&&state!="dagitim") {
closeAllMenus();
state = "filmler";
traceState();
filmlerButton.gotoAndStop(2);
filmleralt = new FilmAltButtonlar();
addChild(filmleralt);
filmleralt.name = "trouble";
//OBJECT ADDED HERE
TweenLite.to(dagitimButton, 1, {y:DAGITIM_ORIGINAL_Y+400 } );
}else {
state = " ";
traceState();
closeAllMenus();
}
}
private function onhakkimizdaClick(e:MouseEvent):void
{
if (state != "anasayfa"&&state!="hakkimizda"&&state!="filmler"&&state!="dagitim") {
closeAllMenus();
state = "hakkimizda";
traceState();
hakkimizdaButton.gotoAndStop(2);
TweenLite.to(filmlerButton, 1, {y:FILMLER_ORIGINAL_Y+200 } );
TweenLite.to(dagitimButton, 1, {y:DAGITIM_ORIGINAL_Y+200 } );
}else {
state = " ";
traceState();
closeAllMenus();
}
}
private function onAnasayfaClick(e:MouseEvent):void //&& girecek
{
if (state != "anasayfa"&&state!="hakkimizda"&&state!="filmler"&&state!="dagitim") {
closeAllMenus();
state = "anasayfa";
traceState();
anasayfaButton.gotoAndStop(2);
TweenLite.to(hakkimizdaButton, 1, {y:hakkimizdaButton.y+200 } );
TweenLite.to(filmlerButton, 1, {y:filmlerButton.y+200 } );
TweenLite.to(dagitimButton, 1, {y:dagitimButton.y+200 } );
}else {
state = " ";
traceState();
closeAllMenus();
}
}
private function closeAllMenus() {
TweenLite.to(hakkimizdaButton, 1, {y:HAKKIMIZDA_ORIGINAL_Y } );
TweenLite.to(filmlerButton, 1, {y:FILMLER_ORIGINAL_Y } );
TweenLite.to(dagitimButton, 1, { y:DAGITIM_ORIGINAL_Y } );
anasayfaButton.gotoAndStop(1);
hakkimizdaButton.gotoAndStop(1);
filmlerButton.gotoAndStop(1);
dagitimButton.gotoAndStop(1);
//NEED TO REMOVE OBJECT HERE
//BUT THIS FUNCTION GETS CALLED A LOT
//SO I NEED TO CHECK IF THE OBJECT EXISTS
//BEFORE TRYING TO REMOVE TO AVOID AN NULL
//OBJECT REFERENCE SO I DO:
if (getChildByName(filmleralt.name) != null) {
removeFilmleralt();
}
}
private function removeFilmleralt() {
Main.instance.narfilm.mainmenu.removeChild(filmleralt);
}
private function traceState() {
trace("current state is: "+state);
}
public function repos():void //call on stage resize so it aligns to left babs
{
x = Main.instance.canvaswidth;
}
}
}
重要部分:
//NEED TO REMOVE OBJECT HERE
//BUT THIS FUNCTION GETS CALLED A LOT
//SO I NEED TO CHECK IF THE OBJECT EXISTS
//BEFORE TRYING TO REMOVE TO AVOID AN NULL
//OBJECT REFERENCE SO I DO:
if (getChildByName(filmleralt.name) != null) {
removeFilmleralt();
}
这是我得到空对象引用错误的部分。
我错过了什么?
答案 0 :(得分:0)
我猜测函数removeFilmleralt()中发生了实际错误。并且您尝试删除初始化的实例(并且具有filmleralt的范围),如同上面提到的函数,您不需要:
Main.instance.narfilm.mainmenu.removeChild(filmleralt);
但只需removeChild(filmleralt);
即可完成任务。我猜测“Main”对象实际上导致了错误,该错误未在任何地方初始化,并且没有范围。
尝试在设置中使用“permit debugging”,这样您就可以确切地知道发生了哪个行错误。但是,在发布时不要忘记禁用此选项,因为垃圾收集。