介紹好用的robotlegs套件
心得筆記 2011/05/31 03:29Trackback Address :: http://diary.tw/allenliao/trackback/945
Trackback Address :: http://diary.tw/allenliao/trackback/945
Trackback Address :: http://diary.tw/allenliao/trackback/821
1.XMLListCollection提供元件 dataprovider的dynamically updates,但是XMLList和XML不行。
2.var loader:Loader = event.currentTarget.loader;
event.target 得到是info
event.currentTarget.loader;//拿到真正的東西
3.XML當MENU元件(tree也可以)的資料提供結構,轉成XMLListCollection的好處是你再RNTIME時期改XML裡的元素,參考你當資料的元件架構也會同步修正
var httpService:HTTPService=new HTTPService();
httpService.url="data/menu.xml";
httpService.resultFormat="e4x";
httpService.addEventListener(ResultEvent.RESULT, onResultHttpService);
httpService.send();
private function onResultHttpService(e:ResultEvent):void
{
var viewXMLList:XMLList=XMLList(e.result);
menuXMLLC=new XMLListCollection(viewXMLList);
menu.labelField="@label"
menu.dataProvider=menuXMLLC;
menu.showRoot=false
}
4.<mx:showDataEffect>要有效果的前提是dataProvider的DATA(expensesAC)要有變化,所以一開始expensesAC先設為空的在ADD INIT時再填值就可以看到效果了
<mx:BubbleChart id="barChart"
height="100%"
width="50%"
paddingRight="5"
paddingLeft="5"
showDataTips="true"
maxRadius="20"
dataProvider="{expensesAC}"
>
<mx:series>
<mx:BubbleSeries displayName="Month"
xField="Profit"
yField="bet"
radiusField="result"
fill="{sc1}"
stroke="{stroke1}">
<mx:showDataEffect>
<mx:SeriesInterpolate duration="1000"/>
</mx:showDataEffect>
</mx:BubbleSeries>
</mx:series>
</mx:BubbleChart>
5.像AS2 FOR IN可以把OBJECT 裡所有的屬性TRACE出來
import mx.utils.ObjectUtil;
trace(ObjectUtil.toString(e))
//這樣就全印出來了
Trackback Address :: http://diary.tw/allenliao/trackback/786
今天早上遇到一個AS無法成功執行JS的問題,
我想做的功能是,使用者瀏覽SWF然後點擊SWF裡的BTN之後,跳出詢問是否將某個網址設為該瀏覽器的首頁的對話框,實做的流程就是由AS的GETURL或EXTERNALINTERFACE去呼叫頁面上的JS,該JS在去實作將某個網址設為該瀏覽器的首頁的功能
再AS的語法如下
import flash.external.*;
yahoo.onRelease = function() {
ExternalInterface.call("hi","me");
//getURL("javascript:hi('hi')", "me");
//getURL("javascript:var newdiv=document.createElement('div');newdiv.id='divblock';document.body.appendChild(newdiv);newdiv.style.behavior='url(#default#homepage)';newdiv.setHomePage('twimtv.im.tv');");
};
在嵌入該SWF的HTML(main.html)語法如下
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5" />
<title>test</title>
<script language="javascript">
function hi(srt){
alert(srt);
var newdiv=document.createElement('div');
newdiv.id='divblock';
document.body.appendChild(newdiv);
newdiv.style.behavior='url(#default#homepage)';
newdiv.setHomePage('http://twimtv.im.tv');
}
</script>
</head>
<body>
<a href="javascript:"></a>
<input type="button" name="dd" onClick="javascript:hi('55')" value="bbfff"/>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="550" height="400" id="IFCall" align="middle">
<param name="allowScriptAccess" value="always" />
<param name="movie" value="IFCall.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="IFCall.swf" quality="high" bgcolor="#ffffff" width="550" height="400" name="IFCall" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
</body>
</html>
用IE瀏覽main.html發現
點擊頁面上的bbfff這個按鈕(非SWF上的按鈕)是可成功執行的(代表這段JS在IE上是正確的)
點擊SWF上的YAHOO這個按鈕,ALERT有成功跳出(代表AS呼叫JS成功),可是卻沒有跑將某個網址設為該瀏覽器的首頁的功能...
上網GOOGLE了一下,看起來像是安全性的限制,看來非要使用者點擊了IE上的按鈕才會觸發這個功能,於是我將這個問題貼上AUG(前MMUG)的M群,經TICORE大的建議將 wmode 設為 opaque~~
對話內容如下:
{id: "Ticore"}; // 說:
或許可以試試看,將 wmode 設為 opaque~~
x:Allenliao...3.0...想學FMS的人密我~噹噹人 說:
我試試~^^
{id: "Ticore"}; // 說:
因為 wmode=window 模式, plugin 上的滑鼠事件與瀏覽器分開的
將 wmode 設為 opaque~
可能可以讓瀏覽器能抓到使用者點擊的事件
x:Allenliao...3.0...想學FMS的人密我~噹噹人 說:
成功了
將 wmode 設為 opaque~~
{id: "Ticore"}; // 說:
:D
於是乎~HTML改成:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=big5" />
<title>test</title>
<script language="javascript">
function hi(srt){
alert(srt);
var newdiv=document.createElement('div');
newdiv.id='divblock';
document.body.appendChild(newdiv);
newdiv.style.behavior='url(#default#homepage)';
newdiv.setHomePage('http://twimtv.im.tv');
}
</script>
</head>
<body>
<a href="javascript:"></a>
<input type="button" name="dd" onClick="javascript:hi('55')" value="bbfff"/>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="550" height="400" id="IFCall" align="middle">
<param name="allowScriptAccess" value="always" />
<param name="wmode" value="opaque" />
<param name="movie" value="IFCall.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="IFCall.swf" quality="high" wmode="opaque" bgcolor="#ffffff" width="550" height="400" name="IFCall" align="middle" allowScriptAccess="always" type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
</body>
</html>
就成功了!
讓我們來測看看FF...幹...失敗了
(待續)
實測發現,FF擋更兇,他管你是不是從頁面上點擊觸發的,一率都擋,所以已經和FLASH沒關係了
GOOGLE找到範例
HTML改成:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>test</title>
<script language="javascript">
function hi(srt){
alert(srt);
setHomepage('http://www.im.tv')
}
function setHomepage(pageURL)
{
if (document.all)
{
document.body.style.behavior='url(#default#homepage)';
document.body.setHomePage(pageURL);
}
else if (window.sidebar)
{
if(window.netscape)
{
try
{
netscape.security.PrivilegeManager.enablePrivilege("UniversalXPConnect");
}
catch (e)
{
alert( "瀏覽器拒絕此操作,請在地址欄內輸入 about:config 然後將 signed.applets.codebase_principal_support 設為true" );
}
}
var prefs = Components.classes['@mozilla.org/preferences-service;1'].getService(Components. interfaces.nsIPrefBranch);
prefs.setCharPref('browser.startup.homepage',pageURL);
}
}
</script>
</head>
<body>
<a href="javascript:"></a>
<input type="button" name="dd" onClick="javascript:hi('55')" value="bbfff"/>
<object classid="clsid:d27cdb6e-ae6d-11cf-96b8-444553540000" codebase="http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=8,0,0,0" width="550"
height="400" id="IFCall" align="middle">
<param name="allowScriptAccess" value="always" />
<param name="wmode" value="opaque" />
<param name="movie" value="IFCall.swf" />
<param name="quality" value="high" />
<param name="bgcolor" value="#ffffff" />
<embed src="IFCall.swf" quality="high" wmode="opaque" bgcolor="#ffffff" width="550" height="400" name="IFCall" align="middle" allowScriptAccess="always" type="application/x-
shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" />
</object>
</body>
</html>
若偵測出被瀏覽器擋住這項操作,會ALERT出一個訊息教你調整FF
Trackback Address :: http://diary.tw/allenliao/trackback/706
有沒有發現
用flash預設的FLV套件(FLVPLAYBACK) 播放影片,裡頭seekBar的功能,再拖曳seekBar的時候,影片畫面會改變為該拖曳到的秒數應撥放的畫面,可是拖曳起來,那個影片飛梭的速度都沒有YOUTUBE那麼快!
以前有人問我過我這個問題,今天忽然心血來潮,加上又有朋友問我飛梭的功能如何實作,我就又試了一下,答案是:不要用FLVPLACKBACK!
NetStream+Video+自己實作seekBar~SEEK就可以這麼快
in flashCS3 as3
AS2應該也是一樣,因為NetStream+Video是8以前的方案
Trackback Address :: http://diary.tw/allenliao/trackback/593
Trackback Address :: http://diary.tw/allenliao/trackback/537
Trackback Address :: http://diary.tw/allenliao/trackback/499

Trackback Address :: http://diary.tw/allenliao/trackback/305
Camera.setMotionLevel() 的設計目的是偵測移動而不會影響頻寬的用法。即使視訊串流未偵測到移動,它還是會傳送視訊。
Microphone.setSilenceLevel() 的設計是要讓頻寬最佳化。當音效串流被視為靜音時,就不會傳送音效資料。會改送單一訊息,表示已開始靜音。 上面這2條是從HELP上剪下來的,這裡先說一下Camera.setMotionLevel()這個方法的相關方法運作過程:
1.當(WEBcam.activityLevel>WEBcam.MotionLevel)會造成my_cam.onActivity = function(isActive:Boolean) 裡頭的isActive=true(畫面有動)反之isActive=false(畫面沒有動)
而isActive從false變成true須讓(WEBcam.activityLevel>WEBcam.MotionLevel)這個狀況持續motionTimeOut這屬性設的時間Microphone.setSilenceLevel() 的原理依樣差別在於當音效串流被視為靜音時,就不會傳送音效資料。會改送單一訊息,表示已開始靜音。
所以聲音的部份要節省頻寬要靠Microphone.setSilenceLevel() 這個方法來實作
影像的部份要節省頻寬要靠setQuality這個方法來實作而非setMotionLevel
Trackback Address :: http://diary.tw/allenliao/trackback/279