Game Development Community

1.5 Feature Demo - Change Level question

by Andrea Farid Marsili · in iTorque 2D · 12/06/2011 (7:26 am) · 5 replies

I have take a look to levelSelectButton.cs and I have almost understand how to proper load and unload level. Now I have only a single problem.
I have two t2dSceneWindow, one called sceneWindow2D and one named hudWindow now I do not know how to adapt levelSelectButton to load two level.
Can you help me?
Thank you. Here the code form levelSelectButton.cs

//-----------------------------------------------------------------------------
// Torque
// Copyright GarageGames, LLC 2011
//-----------------------------------------------------------------------------

$levelLoading = false;

function LevelSelectButton::setLevel(%this)
{
   %level = %this.level;
   
   echo("Setting level to " @ %level);
   $SelectedLevel = %level;
   
   if(isObject(previewWindow))
   {
      %image = fileBase(%level);
      
      previewWindow.setImageMap(%image @ "ImageMap");
   }
}

function LevelSelectButton::startLevel(%this)
{
   if(!$levelLoading)
   {
      $levelLoading = true;
      schedule(100, 0, transitionLevel);
   }
}

function LevelSelectButton::backToMenu(%this)
{
   $SelectedLevel = "levelSelect.t2d";
   schedule(100, 0, transitionLevel);
}

function transitionlevel()
{
   sceneWindow2D.endLevel();
   moveMap.pop();
   
   schedule(100, 0, loadLevel);
}

function loadLevel()
{
   // Load the .t2d file for this game
   sceneWindow2D.loadLevel("data/levels/" @ $SelectedLevel);
   $levelLoading = false;
   $SelectedLevel = "multiTouch.t2d";
}

function backToMenu()
{
   GuiButtonBack.Visible = 0;
   $SelectedLevel = "levelSelect.t2d";
   schedule(100, 0, transitionLevel);
}

#1
12/08/2011 (7:52 am)
In transitionLevel, add the following before sceneWindow2D.endLevel():

hudWindow.endLevel();

In loadLevel, add the following after sceneWindow2D.loadLevel():

hudWindow.loadLevel("path to your level");
#2
12/10/2011 (9:48 am)
Here's how I modify your script and it works on my iPad2 but on my iPod4G after a few time that I load levels my device crash, due to memory management problems I suppose. Can you give me some advices?
Thank you Mich

$levelLoading = false;

function setLevel(%level, %gui){
	echo("Setting level to " @ %level);
	
	$currentLevelName = %level;
	$currentGuiName = %gui;
	
    previewWindow.setImageMap(%level @ "ImageMap");
}

function startLevel(){
	if(!$levelLoading){
		$levelLoading = true;
		schedule(100, 0, transitionLevel);
	}
	echo("Called start level");
}

function transitionlevel(){
	hudWindow.endLevel();

	sceneWindow2D.endLevel();
	moveMap.pop();
   
	schedule(100, 0, loadLevel);
}

function loadLevel(){
	// Load the .t2d file for this game
	sceneWindow2D.loadLevel("data/levels/" @ $currentLevelName @ ".t2d");
	
	hudWindow.loadLevel("data/levels/" @ $currentGuiName @ ".t2d"); 
   
	$levelLoading = false;
}
#4
12/23/2011 (3:37 am)
I think you're over-complicating things a little. This is how I do it in my game with 2 scenewindows:

hudWindow2d.schedule(490, endLevel);
hudWindow2d.schedule(491, loadLevel, expandFilename ("data/levels/HUD_levelname.t2d"));
sceneWindow2D.schedule(500, endLevel);
sceneWindow2D.schedule(501, loadLevel, expandFileName ("data/levels/game_levelname.t2d"));

This is what I call in my game-over function if I want to load up another game level. If I want to go back to the menu, I just end the hudWindow2d level and don't load anything for it as my menu just uses one scenewindow.
#5
12/25/2011 (10:01 pm)
Thank you. I'll try your metos