this is the order>
document> add screenHandler>add introScreen>add buttonToMenuScreen
buttonToMenuScreen dispatches “menuString” document hears “menuScreen”
calls screenHandler switchTo() switchTo() calls switchScreens() switchScreens calls removeOldScreen() and calls makeNewScreen()
removeOldScreen() tries to get and remove child at 0 problem is there is NO child at 0!!! where the H is introScreen living? i was lookin right at it a second ago!
here's my error
RangeError: Error #2006: The supplied index is out of bounds.
at flash.display::DisplayObjectContainer/getChildAt()
at ScreenHandler/removeOldScreen()
at ScreenHandler/switchScreens()
at ScreenHandler/switchTo()
at Document/handleToMenuScreen()
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at Button1/handleClick()
here’s my code
document
package
{
import flash.display.MovieClip;
import flash.events.Event;
import flash.events.ProgressEvent;
import traceDL;
public class Document extends MovieClip
{
public var loadingProgress:LoadingProgress;
public static var screens:ScreenHandler = new ScreenHandler();
public function Document():void
{
loadingProgress = new LoadingProgress();
loadingProgress.x = this.parent.width/2;
loadingProgress.y = this.parent.height/2;
addChild( loadingProgress );
loaderInfo.addEventListener( Event.COMPLETE, onCompletelyDownloaded );
loaderInfo.addEventListener( ProgressEvent.PROGRESS, onProgressMade );
//this.addChild(screens);
//Application.screens.switchTo("SelectedScreen");
//Application.screens.switchTo("SelectedScreen", false);
}
public function onProgressMade( progressEvent:ProgressEvent ):void
{
loadingProgress.setValue( Math.floor( 100 * loaderInfo.bytesLoaded / loaderInfo.bytesTotal ) );
}
public function onCompletelyDownloaded( event:Event ):void
{
gotoAndStop(3);
playGame();
}
public function playGame():void
{
var introScreen:IntroScreen=new IntroScreen;
screens.x=0;
screens.y=0;
this.addChild(screens);
screens.addChild(introScreen);
introScreen.buttonToMenuScreen.addEventListener("menuScreen",handleToMenuScreen)
trace("switched");
removeChild(loadingProgress);
loaderInfo.removeEventListener( Event.COMPLETE, onCompletelyDownloaded );
loaderInfo.removeEventListener( Event.COMPLETE, onProgressMade );
//traceDL(stage);
}
public function handleToMenuScreen(screenChoice:String):void
{
trace("handleToMenuScreen"+ screenChoice);
screens.switchTo(screenChoice);
}
}
}
screenHandler
package {
import flash.display.Sprite;
import flash.display.MovieClip;
import flash.events.Event;
public class ScreenHandler extends Sprite{
private var menuScreen:MenuScreen;
private var playScreen:PlayScreen;
private var mBase:MBase;
private var asBase:AsBase;
private var introScreen:IntroScreen;
private var newScreenName:String = "";
private var screenLayer:Sprite = new Sprite();
public function ScreenHandler()
{
trace("screenHandler");
this.addChild(screenLayer);
}
public function switchTo(screenName:String):void
{ trace("switchTo()"+ screenName);
newScreenName = screenName;
switchScreens();
}
private function switchScreens():void
{
trace("switchScreens()");
trace("screenLayer children" + screenLayer.numChildren);
removeOldScreen();
makeNewScreen();
}
private function removeOldScreen():void
{
trace("removeOldScreen"+ screenLayer.getChildAt(0))
var oldScreen:MovieClip;
oldScreen = screenLayer.getChildAt(0) as MovieClip;
screenLayer.removeChild(oldScreen);
}
private function makeNewScreen():void
{
trace("makeNewScreen");
switch(newScreenName)
{
case "introScreen":
introScreen = new IntroScreen();
//introScreen.x=0;
//introScreen.y=0;
trace("adding IntroScreen");
screenLayer.addChild(introScreen);
break;
case "menuScreen":
menuScreen = new MenuScreen();
screenLayer.addChild(menuScreen);
break;
case "playScreen":
playScreen = new PlayScreen();
screenLayer.addChild(playScreen);
break;
case "asBase":
asBase = new AsBase();
screenLayer.addChild(asBase);
break;
case "mBase":
mBase = new MBase();
screenLayer.addChild(mBase);
break;
default:
trace("adding IntroScreen default");
introScreen = new IntroScreen();
screenLayer.addChild(introScreen);
break;
}
newScreenName = "";
}
}
}