Understanding AS3 shared objects
This is the AS3 version of Managing savegames with Flash shared objects.
In this post I’ll explain the basic of shared objects, then later I’ll add the feature to Designing the structure of a Flash game – AS3 version in order to have a game template more complete.
Let’s start with the result: that’s what we are going to create:
As you will see, the counter increases when you reload the page.
Let’s take a look at the script:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 | package { import flash.display.Sprite; import flash.net.SharedObject; import flash.text.*; public class as3_shared_objects extends Sprite { var shared:SharedObject; public function as3_shared_objects() { shared = SharedObject.getLocal("reloaded"); if (shared.data.visits==undefined) { shared.data.visits = 1; } else { shared.data.visits ++; } show_text(shared.data.visits); shared.close(); } public function show_text(str) { var shared_text:TextField = new TextField(); var format:TextFormat = new TextFormat(); format.font = "Lucida Console"; format.color = 0xffff00; shared_text.width = 300; shared_text.defaultTextFormat = format; shared_text.x = 25; shared_text.y = 15; addChild(shared_text); shared_text.appendText("You visited this page "+str+" times"); } } } |
Line 3: importing the class handling shared objects
Line 6: declaring a SharedObject variable called shared
Line 8: getLocal() returns a reference to a locally persistent shared object (in this case reloaded) that is available only to the current client. If the shared object does not already exist, getLocal() creates one.
Lines 9-11: when looking at the visits value inside the shared ojbect, I set it to 1 if it’s undefined (it’s the first time I am executing the script)
Lines 12-14: if visits is not undefined, it’s not the first time I am executing the script, so I have to increment its value
Line 16: closing the shared object. Some docs say you may experience problems if you don’t close it… I tried and I haven’t any… but I am closing it anyway…
They can be easily customized to meet the unique requirements of your project.















(17 votes, average: 4.82 out of 5)









This post has 16 comments
Orion
So how to make something like ‘this site has been visited total of x times?
Jack Hopkins
you could use javascript, there are many scripts on the ‘net
good tut!
Pixelero
Somehow if I update this by clicking on the headline ‘Understanding AS3 shared objects’ above, the counter increases by 2 ? – on a normal ‘F5′ browser update works correctly, and adds just 1.
real reason
To Orion: that isn’t the real reason he did this, it is there to show how u can have an update finished, for example: instead of updating each time u load it, it is updated each time that a level is finished, and it becomes the level number, not to show how many times u visit the page
Designing the structure of a Flash game - AS3 version - Part 3 : Emanuele Feronato
[...] Moreover, I made some code optimization and now you can only play levels you already completed and the first uncompleted level, thanks to AS3 shared objects. [...]
Danny
Very good, but dude, please change your logo back to the old one.
I know that you paid money for this one, but you have to take the loss on the chin!
Great blog though :)
Tutorial: Sharing shared objects between games/applications « the keg’o'grog blog
[...] youself familiar with Saving and Loading in Flash by reading this tutorial or this tutorial. Thanks to Michael and Emanuele for this. You should also bookmark their blogs, these guys are [...]
Flash for Thought « Interactive Design II
[...] http://www.emanueleferonato.com/2008/12/28/understanding-as3-shared-objects/ [...]
Oct 22 Week 04 Make Up Class « Flash For Artists
[...] http://www.emanueleferonato.com/2008/12/28/understanding-as3-shared-objects/ [...]
Broxter
Thanks a lot! Just what I was looking for.
Complete Flash Sokoban game in less than 2KB - Emanuele Feronato
[...] 10 levels * Tiles of different color and shape * Shared objects to save the games * Eye-candy effects (being only 2KB!!) to show completed levels and current level [...]
Code snippets for the future « Jon Reids FMP
[...] be looking at this post to help me understand shared objects, and handily, adobe have posted up all the chapters of AS3 [...]
Rennan
I´ve made this class based on your post. It´s simple. But, maybe it help someone. If someone have some idea, please, implement it.
package
{
import flash.net.SharedObject;
public class SavePoint
{
private static var shared:SharedObject = SharedObject.getLocal(“save_point”);
public function SavePoint ()
{
}
public static function Save (object:Object):void
{
if (object!=null)
{
shared.data.box = object;
}
else
{
Erase ();
trace (“Error – Argument ‘object’ can not receive null values!”);
}
}
public static function Load ():Object
{
var obj:Object = shared.data.box;
return obj;
}
public static function Erase ():void
{
shared.clear ();
}
public static function Update (object:Object):void
{
// TODO
}
}
}
Simon
Can someone help me please, I’m struggling with this coding, it’s a simple cookie (LSO) detection system but I can’t get it to run with writing the text below no matter what I try.
// Create Flash Cookie (LSO)
var cookie:SharedObject = SharedObject.getLocal(“SiteLog”);
// first visit, i.e, cookie hasn’t been set
if (cookie.data.played == undefined)
{
// set cookie to true
cookie.data.played = true;
cookie.flush(); // write the data
trace(“Data written, first visit”);
}
else
{
// return visit
trace(“Data acknowleged, return trip to site”);
}
// clear the Shared Object for testing
function clearCookie(evt:MouseEvent):void {
cookie.clear();
trace(“Cookie Removed”);
};
clearCookie_btn.addEventListener(MouseEvent.CLICK, clearCookie);
- I want to have this come on screen after it’s loaded for the second time :
var txt:TextField = new TextField();
txt.text = “Republic of Code”;
addChild(txt);
Any help would be great.
Criando a estrutura de um jogo em flash – 3ª parte « Tentativa de Programação
[...] que até onde entendi, funciona +- como cookies de navegação. Tem alguma explicação nesse guia aqui e também tem os meus comentários no código fonte que vou disponibilizar logo abaixo, lá tem [...]
diego nunes
. . I though it would be worth to mention that the “close” method is only appliable to Remote Shared Objects. Since you’re using “getLocal” for a locally stored Shared Object, you really don’t need it.
. . Using “flush”, on the other hand, to explicitly persist the data, would be helpful to avoid any problem if the flash gets force closed.
. Amplexos.