I’m trying to pass a variable from my main swf to another one that’s being loaded in a container in the main swf.I follow this Link,Its Working Fine,My problem is, if i declared the variable within the function i Cannot Access the Variable.AnyBody Help me
(Sorry for Big Coding)
My Coding
My a.swf coding
import flash.display.LoaderInfo;
import flash.display.Sprite;
import flash.text.TextField;
import flash.text.Font;
var nc:NetConnection = null;
var textchat_so:SharedObject = null;
var lastChatId:Number = 0;
var chatSharedObjectName:String = "textchat";//i can access this variable
var chatText:String = "";
var mcCtr:int = 0;
var align:String="gh";
var msg:String;// i cannot access this variable
listChat.visible = false;
var tickerIdx:int = 0
{
nc = new NetConnection();
nc.addEventListener(NetStatusEvent.NET_STATUS, ncOnStatus);
trace("connect: "+ "xxx");
trace("connect: "+ "xxx");
//chatSharedObjectName = connect.soNameStr.text;
nc.connect("xxx");
}
function ncOnStatus(infoObject:NetStatusEvent)
{
trace("nc: "+infoObject.info.code+" ("+infoObject.info.description+")");
if (infoObject.info.code == "NetConnection.Connect.Success")
{
initSharedObject(chatSharedObjectName);
}
}
// format the text chat messages
function formatMessage(chatData:Object)
{
trace("room"+chatData.txtalign);
var number:String = chatData.user;
align=chatData.txtalign;
var myFormat:TextFormat = new TextFormat();
myFormat.size =(chatData.txtsize);
var tf:MarqueeTextField = new MarqueeTextField();
myFormat.font=chatData.txtfont;
tf.maxChars=100;
tf.text =chatData.message ;
tf.textColor = chatData.user; // <----------------------------------
tf.defaultTextFormat=myFormat;
//tf.width = stage.stageWidth / 2;
tf.width = stage.stageWidth;
tf.height = stage.stageHeight
if(chatData.txtalign=="Left")
{
tf.autoSize ="left";
}
if(chatData.txtalign=="Right")
{
tf.autoSize = "right";
}
//tf.x = tf.y = 100;
//trace(stage.stageWidth);
if( listChat.numChildren >= 0 )
{
//listChat.removeChildAt( 0 );
}
listChat.visible=true;
listChat.addChild(tf);
var t:Timer = new Timer(chatData.txtspeed);
t.addEventListener(
TimerEvent.TIMER,
function(ev:TimerEvent): void
{
tf.text =tf.text.substr(1) + tf.text.charAt(0);
}
);
t.start();
if(listChat!=null)
for (var i:int = listChat.numChildren-2; i >= 0; i--) {
listChat.removeChildAt (i);
}
msg=chatData.txtalign;
return msg;
}
function syncEventHandler(ev:SyncEvent)
{
var infoObj:Object = ev.changeList;
// if first time only show last 4 messages in the list
if (lastChatId == 0)
{
lastChatId = Number(textchat_so.data["lastChatId"]) - 1;
if (lastChatId < 0)
lastChatId = 0;
}
// show new messasges
var currChatId = Number(textchat_so.data["lastChatId"]);
// if there are new messages to display
if (currChatId > 0)
{
var i:Number;
for(i=(lastChatId+1);i<=currChatId;i++)
{
if (textchat_so.data["chatData"+i] != undefined)
{
var chatMessage:Object = textchat_so.data["chatData"+i];
formatMessage(chatMessage);
chatText += "<p>" + msg + "</p>";
trace(msg);
//listChat.htmlText = chatText;
}
}
if (listChat.length > 0)
listChat.verticalScrollPosition = listChat.maxVerticalScrollPosition;
lastChatId = currChatId;
}
}
function connectSharedObject(soName:String)
{
textchat_so = SharedObject.getRemote(soName, nc.uri);
// add new message to the chat box as they come in
textchat_so.addEventListener(SyncEvent.SYNC, syncEventHandler);
textchat_so.connect(nc);
}
function connectSharedObjectRes(soName:String)
{
connectSharedObject(soName);
trace(soName);
}
function initSharedObject(soName:String)
{
// initialize the shared object server side
nc.call("initSharedObject", new Responder(connectSharedObjectRes), soName);
}
i Want to access the variable inside the function(formatMessage) from b.as
I can Load the a.swf in b.as here my Coding
b.as
private function addMessage(){
_loader = new Loader();
_loader.x=10;
_loader.y=200;
_loader.load(new URLRequest("a.swf"));
_loader.contentLoaderInfo.addEventListener(Event.COMPLETE, onLoad);
function onLoad(evt:Event):void {
var target:DisplayObject = LoaderInfo(evt.target).content as DisplayObject;
trace(target["msg"]);// here it return null value
}
}
I can’t understand some slice of your code.
So, I don’t know how your application work but I fix your code as follow:
In the loader code if you want access to msg variable your code should work fine.
Tip: You should use classes concat to your swfs and work with public method for access to these variables. If you have problems you could post more of your code to be more accurate.
I hope this will be usefull to you!
UPDATE:
I repeat, I don’t know much about how your application is structured, I’d do as follow:
main.asMessage.as. This class will export an swf call message.swfYour message class should written like this:
In Main.as write loader function as you done and load message.swf (pay attention to file system position).
When load is complete you can call getter method msg directly on loaded swf: