Solved

Back/Forward Buttons in Actionscript 3.0 (Saving state of application)

Posted on 2008-10-27
2
1,120 Views
Last Modified: 2013-11-11
Hi All,

I have researched everywhere and I coudn't find a solution for my problem. Our project is 90% completed and all it needs now is creating a Back/Forward functionality like any browser/Photoshop etc.. has.

If someone could help me I would appreciate it very much indeed.

My Problem:
-------------------
1 - I am using Actionscript 3.0.
2 - I am using classes, so all actionscript code is within files etc.
3 - There is only 1 frame, so I cannot go back and forward within frames.

My application is sctructured as follow:

1- I have a background image on the left, which is the are where things will show.
2 - A menu on the right hand side with 8 buttons
      2.1 - Each button has it's own event listeners that change what happens on the left hand side.

e.g.
Button 1 will make the background image change, and display a 24x24 grid.
Each grid square is clickable, and if clicked it will show a screen with some information about a company.

Button 2 will make the background image change, and display a 6x6 grid.
Each grid square when clicked will show another grid with different pictures.

etc..etc..

What I would like:
-------------------------------
I have a back/forward button, and I need to be able to navigate back/forward thru everything that happens within the application.

So using my example above.

If I clicked Button1,
then Button 2,  
then the Back Button,
The action from Button1 will be activated and so it would "make the background image change, and display a 24x24 grid.
Each grid square is clickable, and if clicked it will show a screen with some information about a company."

The same would work if I clicked in the forward button, so


If I clicked Button1,
then Button 2,  
then the Back Button,
The action from Button1 will be activated and so it would "make the background image change, and display a 24x24 grid.
Each grid square is clickable, and if clicked it will show a screen with some information about a company."
Then clicked in the Forward, then it will "will make the background image change, and display a 6x6 grid.
Each grid square when clicked will show another grid with different pictures." (same as button2).

---------------
I don't know if I explained very well, but any help would be much appreciated.

P.s.

The application I am creating is exported as an Air File, so its not using a Browser.

Regards,
Dan

0
Comment
Question by:vibrazy
2 Comments
 
LVL 39

Accepted Solution

by:
blue-genie earned 500 total points
Comment Utility
hello.
thinking out loud here
if each time you click a button pop it into an array. so the last action will be array[0] - so write a case statement
and based on which item is in the array trigger that code linked to the that btns listeners?
0
 
LVL 5

Author Comment

by:vibrazy
Comment Utility
Hi blue-genie,

Yeah that is what I had to do. I wish you commented earlier :) Will give you the points tho.

Thanks for your help.

var historyStateCountBack:int = 0;

var historyStateCountNext:int = 0;

var historyFunctions:Array = new Array();
 
 

function init()

{

	//start application

	//1 - set default function to home

	//2 - disable buttons back/next

	historyFunctions[0] = home;

	bk.enabled = false;

	nextbtn.enabled = false;

	//set up program as usual adding listners to buttons etc

	

}

init();
 
 
 

ac1.addEventListener(MouseEvent.CLICK, action1);

ac2.addEventListener(MouseEvent.CLICK, action2);

ac3.addEventListener(MouseEvent.CLICK, action3);

ac4.addEventListener(MouseEvent.CLICK, action4);

ac5.addEventListener(MouseEvent.CLICK, action6("dan",36));

ac6.addEventListener(MouseEvent.CLICK, action6("dan",25));
 

function home(event:MouseEvent)

{

	

	result.text = "Donkey";

	historyStateCountBack = 0;

	historyFunctions[0] = home;

	resetBack();

	addHistory(arguments.callee,event.target.name);

}
 
 

function action1 (event:MouseEvent)

{

	var current_time = new Date(); 

	result.text = "Action1 " + current_time.getHours() + ":" +  current_time.getMinutes() + ":" + current_time.getSeconds();

	

	resetBack();

		

	addHistory(arguments.callee,event.target.name);
 

	

}

function action2 (event:MouseEvent)

{

	var current_time = new Date(); 

	result.text = "Action2 " + current_time.getHours() + ":" +  current_time.getMinutes() + ":" + current_time.getSeconds();
 

	resetBack();

		

	addHistory(arguments.callee,event.target.name);
 

}

function action3 (event:MouseEvent)

{

	var current_time = new Date(); 

	result.text = "Action3 " + current_time.getHours() + ":" +  current_time.getMinutes() + ":" + current_time.getSeconds();

	resetBack();

	

	addHistory(arguments.callee,event.target.name);
 

}

function action4 (event:MouseEvent)

{

	var current_time = new Date(); 

	result.text = "Action4 " + current_time.getHours() + ":" +  current_time.getMinutes() + ":" + current_time.getSeconds();

	

	resetBack();

addHistory(arguments.callee,event.target.name);

	

}

function action5 (event:MouseEvent)

{

	var current_time = new Date(); 

	result.text = "Action5 " + current_time.getHours() + ":" +  current_time.getMinutes() + ":" + current_time.getSeconds();

	

	resetBack();
 

	addHistory(arguments.callee,event.target.name);

	

}

function action6 (s:String,n:int):Function

{

	return function(event:MouseEvent):void

	{

		

		result.text = "Multi " + s + ":" +  n;

		

		resetBack();

	

		addHistory(arguments.callee,event.target.name);

	}

	

}
 
 

function resetBack():void

{

		for(var i:uint = 0; i < historyFunctions.length; i++)

		{

				bk.removeEventListener(MouseEvent.CLICK,historyFunctions[i]);

				nextbtn.removeEventListener(MouseEvent.CLICK,historyFunctions[i]);

		}

}

function addHistory(funcName:*,target:*):void

{

		

			if(target == "bk" || target == "nextbtn")

			{

				if(funcName != home)

				{

					bk.enabled = true;

					nextbtn.enabled = true;

					

					if(target == "bk")

					{

						historyStateCountBack--;

					}

					else

					{

						historyStateCountBack++;

					}

			

					bk.addEventListener(MouseEvent.CLICK,historyFunctions[historyStateCountBack-1]);

					

					if(historyFunctions[historyStateCountBack+1])

					{

						nextbtn.addEventListener(MouseEvent.CLICK,historyFunctions[historyStateCountBack+1]);

					}

				}

				else

				{

					//came from parent

					resetBack();

					nextbtn.addEventListener(MouseEvent.CLICK,historyFunctions[historyStateCountBack+1]);

					

				}

			}

			else

			{

				historyStateCountBack++;

				historyFunctions[historyStateCountBack] = funcName;

		

				bk.enabled = true;

				bk.addEventListener(MouseEvent.CLICK,historyFunctions[historyStateCountBack-1]);

			}

		
 

}

Open in new window

0

Featured Post

Do You Know the 4 Main Threat Actor Types?

Do you know the main threat actor types? Most attackers fall into one of four categories, each with their own favored tactics, techniques, and procedures.

Join & Write a Comment

Here are some practices and techniques that can be adopted into your Flash/Flex application development process. Note: Not all "performance tips" provide an immediately-recognizable benefit.   This article does not include timing validation data,…
This article describes a solution to a problem of subloading one movie into another when they have different SWF versions. Sometime back, I was working on an ActionScript project while I came across an interesting fact which I would like to share…
In this tutorial viewers will learn how to create a basic motion tween animation in Flash Open a new document in Flash: Draw/import an image: Press CTRL + F8 to convert it into a graphic symbol: Select a frame (how long you want the tween to last): …
The goal of the tutorial is to teach the user how to how to record live broadcast.

771 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

16 Experts available now in Live!

Get 1:1 Help Now