2011-03-24 23 views
0

我是Flash開發人員的初學者,最近我剛剛被指派在我的工作中修復舊的Flash項目。本質上,該應用程序是一個視頻展臺,用戶可以通過網絡攝像頭錄製長達60秒的視頻,然後通過電子郵件,Twitter或Facebook分享。在Flash中使用按鈕訪問一個框架中的變量

當應用程序啓動時,會生成一個視頻ID,並在流式傳輸並保存到服務器時用作視頻的文件名。我相信有一個更好的方法可以做到這一點,但我想出的方法是獲取該視頻ID並將其作爲URL變量傳遞到「共享」頁面,然後使用它來訪問和共享視頻服務器。

問題是,我不知道如何從發送用戶到「共享」頁面的按鈕訪問視頻ID。

下面是代碼:

var nc:NetConnection = new NetConnection(); 
var ns:NetStream; 
var cam:Camera; 
var mic:Microphone; 
var vidId:String = configName(); 

function tracer(p_s) { 
trace(p_s); 
} 
nc.onStatus = function(p_o:Object):Void { 
//tracer(p_o.code); 
if (p_o.code == "NetConnection.Connect.Success") { 
    setupApp(); 
} 
}; 
function configName():String { 
var charStr:String = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; 
var s1:String = charStr.charAt(random(charStr.length)); 
var s2:String = charStr.charAt(random(charStr.length)); 
var oDate:Date = new Date(); 
var vidDate = oDate.getMonth()+1+""+oDate.getDate()+""+oDate.getFullYear()+""+oDate.getHours()+""+oDate.getMinutes()+""+oDate.getMilliseconds(); 
var vidName:String = s1+vidDate+s2; 
return vidName; 
} 
function setupApp() { 
tracer("setupApp"+vidId); 
ns = new NetStream(nc); 
ns.onPlayStatus = function(p_o):Void { 
    tracer(p_o.code); 
    var o:Object = new Object(); 
    o.target = replay; 
    onStop(o); 
}; 
cam = Camera.get(); 
mic = Microphone.get(); 
cam.setMode(640,480,15); 
cam.setQuality(100000,0); 
attachAV(); 
recordNow.addEventListener("click", onRecord); 
replay.addEventListener("click", onPlay); 
} 
function attachAV():Void { 
tracer("attachAV"); 
nowLive_video.attachVideo(cam); 
nowLive_video.attachAudio(mic); 
} 
function onRecord():Void { 
tracer("onRecord"); 
ns.attachVideo(cam); 
ns.attachAudio(mic); 
ns.publish("pending/"+vidId, "record"); 
recordNow.removeEventListener("click",onRecord); 
recordNow.addEventListener("click",onStop); 
//recordNow.setLabel("Stop"); 
pbar.play(); 
btnSkin.gotoAndStop("recordStop"); 
replay.enabled = false; 
tellTarget ("_root.get_ready") { 
    play(); 
} 
unpause(); 
} 
function onPlay():Void { 
tracer("onPlay "+vidId); 
nowRecord_video.attachVideo(ns); 
nowRecord_video.attachAudio(ns); 
ns.play("pending/"+vidId); 
replay.removeEventListener("click", onPlay); 
replay.addEventListener("click", onStop); 
replay.setLabel("Stop"); 
recordNow.enabled = false; 
} 
function onStop(p_o:Object):Void { 
tracer("onStop"); 
if (p_o.target == recordNow) { 
    tracer(p_o.target); 
    ns.publish(false); 
    recordNow.removeEventListener("click", onStop); 
    recordNow.addEventListener("click", onRecord); 
    //recordNow.setLabel("Record"); 
    pbar.stop(); 
    cutScreen.play(); 
    btnSkin.gotoAndStop("recordNorm"); 
    replay.enabled = true; 
    restartTimer(); 
    //onPlay(); 
    accept.play(); 
} else if (p_o.target == replay) { 
    tracer(p_o.target); 
    ns.play(false); 
    nowRecord_video.clear(); 
    replay.removeEventListener("click", onStop); 
    replay.addEventListener("click", onPlay); 
    replay.setLabel("Replay"); 
    recordNow.enabled = true; 
} 
} 

nc.connect("my_server_url"); 

這是該按鈕將用戶重定向到正確的頁面代碼:

on (press) { 

     var vidId:String = (what do I put here?); 
     getURL("share/?id="+vidId, "_self"); 
} 

我道歉,如果任何的,這是目前還不清楚 - 我是Flash的總noob,並希望任何人都可以提供幫助。

謝謝。

回答

0

如果使用VAR vidId你不應該需要從按功能

on (press) { 
    getURL("share/?id="+vidId, "_self"); 
} 

內取消申報VAR vidID:字符串=您的按鈕函數中,它是一個局部變量該功能。如果您從全局角度來聲明它,則它可用於時間軸上的任何函數。只需從主時間線上獲取變體,你應該很好走。

+0

我試過這個,但是當我這樣做的時候,這個url出現了:www.domain.com/share?id=,這表明當這段代碼運行時,vidId沒有值。 – 2011-03-24 21:24:18

+0

我假設你使用_root使用AS2?如果是這樣的話,一個簡單的方法就是使它像全局一樣:_global.vidId = vidId在你完成configName()之後 - 那麼它應該在swf的任何位置可用(嵌套或不可嵌套) – jpea 2011-03-24 21:27:05

+0

輝煌!這完全按照預期工作。謝謝你的幫助,jpea。 :) – 2011-03-24 21:41:48