2011-11-02 117 views
1

我想從我的主要swf傳遞一個變量到另一個被加載到一個容器中的主swf.I遵循這個Link,它的工作很好,我的問題是,如果我聲明瞭函數內的變量我無法訪問Variable.AnyBody幫我 (對不起,大編碼) 我的編碼 我A.swf中編碼將變量從一個swf傳遞到另一個動作文件?

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); 

} 

我想從b.as

訪問功能(FORMATMESSAGE)裏面的變量

我可以加載在這裏b.as的A.swf中我的編碼 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 
} 
} 

回答

1

我無法理解你的代碼的一些片段。

  • 參數的消息函數不是一個變量,它的調用像函數名稱。
  • 您變量味精應該是公開的
  • 你的函數消息沒有特定的返回值
  • 消息(消息);這沒有意義!

所以,我不知道您的應用程序的工作,但我怎麼收拾你的代碼如下:

public var msg:String = ""; 
function Message(msg:String):void 
{ 
    this.msg = msg;// Here you assign directly the message 
    trace(this.msg); 
} 

在加載程序代碼,如果你想獲得味精變量您的代碼應該可以正常工作。

提示:您應該使用類concat到您的swfs並使用公共方法訪問這些變量。如果你有問題,你可以發佈更多的代碼來更準確。

我希望這對你有用!

UPDATE: 我再說一遍,我不知道很多關於你的應用程序是如何構成的,我會如下操作:

  1. 在具體的Adobe Flash文檔類爲您的FLA項目,例如main.as
  2. 使用擴展MovieClip的文檔類創建另一個Adobe Flash項目:例如Message.as。此類將導出一個瑞士法郎電話message.swf
  3. 把你的加載函數在Main.as.
  4. 您的留言信息類應該這樣寫:

    public class Message 
    { 
        private var _msg:String = ""; 
    
        //Constructor 
        public function Message(msg:String) 
        { 
         _msg = msg; 
        } 
    
        //Getter method 
        public function get msg():String 
        { 
         return _msg; 
        } 
    } 
    
  5. 在Main.as寫裝載機的功能你做和加載message.swf(注意文件系統中的位置)。

  6. 當加載完成後,你可以直接在加載的SWF文件調用getter方法味精:

    function onLoad(evt:Event):void 
        { 
        var loadedM:MovieClip = LoaderInfo(evt.target).content as MovieClip; 
        trace(loadedM.msg); 
        } 
    
+0

我改變了我的編碼爵士,不過如果能不明白請告訴我如何訪問變量msg in a.swf.Or在我的代碼中解釋我的問題? – Mercy

+0

我想調用b.as – Mercy

+0

的變量msg先生我的Swf工作正常,我有問題雖然檢索變量。我想更改我的完整代碼,好心地通過它先生 – Mercy

1

你的問題不是很清楚,但在任何情況下,下面一行將永遠不會爲工作是:

var target:DisplayObject = LoaderInfo(evt.target).content as DisplayObject; 
trace(target["msg"]);// here it return null value 

因爲DisplayObject沒有msg屬性,您需要使用Object或MovieClip。

var target:DisplayObject = event.currentTarget.content as MovieClip; 
trace(target.msg);// may work better 

//and whilst you're there, you may as well remove the event listener... 

...差點忘了,在A.swf中確保您的變量是公共

public var msg:String = "whatever" 
+0

我更新了我的編碼Sir.Please糾正我的問題 – Mercy

+0

你明白我的問題先生嗎? – Mercy

+0

你明白我的答案嗎? ... – PatrickS

相關問題