SWF and FLV File Format Specification (Version 9)發佈囉~
AVM2全新的bytecode現在完全交由DoABC tag來定義了~ 如果想瞭解這些bytecode的話,請參考ActionScript Virtual Machine 2 (AVM2) Overview。
BTW, the ABC means ActionScript Byte Code.
blog.Ring.idv.tw
In Flash
SWF and FLV File Format Specification (Version 9)發佈囉~
AVM2全新的bytecode現在完全交由DoABC tag來定義了~ 如果想瞭解這些bytecode的話,請參考ActionScript Virtual Machine 2 (AVM2) Overview。
BTW, the ABC means ActionScript Byte Code.
2007-07-27 14:50:02 | Add Comment
In General, ActionScript 3.0, My Books
上個月底在Amazon一次給它買下幾本書,這本是其中的一本~終於在今天親自從郵差的手中接下它,但其實早就應該拿到手了,只因為和郵差經常碰不上~唉~
本來想說靠著網路上及官方的資料學AS3好了,事後想想還是乾脆買下這一本,畢竟Essential ActionScript 2.0也在我的書架中~
而天瓏書局目前也有貨了~ 不過如果你要買二本以上書籍的話,其實去Amazon買還是便宜一點~總而言之,接下來的日子有得忙囉~
2007-07-27 14:39:00 | Add Comment
In Flash, Open Source
Gnash是一個採用GPL授權的Flash Movie Player,主要的開發者為Rob Savoye,目前最新釋出的版本為0.8.0 (June 9,2007),且大多支援Flash v7的功能與特色,如果你是Linux的使用者,我想對它應該不會過於陌生,而且在Ubuntu 7.10就將被列為預設安裝的項目之一。
當然如果你想在Win32平臺上測試的話,可以來此下載:
Gnash原始碼:
Gnash執行方式(Win32)
先將底下的一些DLL、Gnash.exe檔複製到「C:\Windows\System32」底下,並在命令列下輸入:
gnash C:\test\xxx.swf
相關介紹:
2007-07-27 10:34:51 | Add Comment
In Flash, ActionScript
在一個Flash動畫上點選右鍵時,它通常會出現如下圖所示的選單:
然而,倘若我們想要自訂一個屬於自己的選單列,那該如何達成呢?幸好在Flash Player 7之後,它為我們提供了一個「ContextMenu」,得以讓我們自訂屬於自己的右鍵選單,而這一切均需仰賴著「ContextMenu」來幫助我們達成這樣的效果。
隱藏內建的選單列
假設你只想要隱藏內建的選單列,只要透過呼叫「hideBuiltInItems()」即可隱藏內建的選單列,不過最後記得將「_leve0」這個「MovieClip」的屬性值「menu」指向我們所建立的「ContextMenu」即可:
程式一
var my_cm = new ContextMenu(); my_cm.hideBuiltInItems(); _root.menu = my_cm;
結果:
自訂一個屬於自己的選單列
程式二
var my_cm = new ContextMenu();
my_cm.hideBuiltInItems();
my_cm.customItems.push(new ContextMenuItem("sayHello",hello));
function hello(obj, menuItem)
{
trace(obj);
trace(menuItem.caption);
hello_txt.text = "Hello!";
}
_root.menu = my_cm;
結果:
_level0 sayHello
不僅只有「MovieClip」可以有自訂的「ContextMenu」,包含「Button」和「TextField」都可以有自己的「ContextMenu」,例如你可以自訂一個「TextField」包含「copy」的選單項目,而經由執行這個選單項目會幫你複製「TextField」裡頭的字串等等,諸如此類的應用就自由發揮囉!
2007-07-22 19:01:17 | Add Comment
In Flash, ActionScript
在這篇「loadVariables」vs.「LoadVars」(一)我們曾提及「loadVariables」vs.「LoadVars」資料傳送的差異,那我們該如何得知資料已載入完成了呢?是否有相對應的事件可以來協助我們呢?
「LoadVars」事件處理
利用「LoadVars」要得知資料是否已載入完成,其實是相當容易且直覺的,它提供了一個「onLoad」事件處理器來協助我們來達成實現,然而此事件是隸屬於系統事件(System Event),也就是它無法透過使用者來加以觸發的事件,而是仰賴Flash Player來觸發的,相反地,若是「onClick」等等之類的事件,則稱之為使用者事件(User Event),底下我們先來看此事件的描述:
onLoad Event Handler
public onLoad = function(success:Boolean) {}
此事件會在呼叫「LoadVars.load()」或「LoadVars.sendAndLoad()」結束時,才會由系統來加以觸發的事件,而系統會傳遞一個success參數作為判斷載入成功或失敗的變數。
範例如下:(data.txt是一個約1.8mb的文字資料,裡頭包含了「var0 ~ var99999」的變數資料,以及一個ok變數)
程式一
var data_lv:LoadVars = new LoadVars();
data_lv.onLoad = function(success)
{
if(success)
{
trace("Loaded!");
trace(this.ok);
}else{
trace("Failed!");
}
}
data_lv.load("data.txt");
結果:
Loaded! 1
此「onLoad」事件的確只會在「LoadVars.load()」或「LoadVars.sendAndLoad()」結束時才會觸發的事件。
「loadVariables」事件處理
相較於「LoadVars」來說,要判斷「loadVariables」是否已完成載入資料,便顯得較為煩瑣些,雖然使用「loadVariables」會觸發「MovieClip.onData」事件,但值得注意的是並不是只有「loadVariables」才會觸發此事件,「loadMovie」也會觸發此一事件,而且還必須作些手腳來達成判斷資料是否已「完全」載入,我們先看下述這個範例:
程式二
this.loadVariables("data.txt");
this.onData = function()
{
if(this.ok == undefined)
{
trace("Loading...");
}else{
trace("Loaded!");
trace(this.ok);
}
}
結果:
Loading... Loaded! 1
從執行的結果上來觀察,我們可以知道「onData」這個事件至少被系統呼叫了「兩」次,這也就是為何筆者需要加上一個「ok」變數資料在「data.txt」文件上,那是否還有額外的方式可以處理呢?其實我們也可以利用「MovieClip.onEnterFrame」來做個輪詢的方式來偵測資料是否已載入完成,或是利用「setInterval」來協助我們達成,底下是個別的作法:
setInterval
this.loadVariables("data.txt");
function checkParamsLoaded()
{
if(_root.ok == undefined)
{
trace("Loading...");
}else{
trace("Loaded!");
trace(_root.ok);
clearInterval(param_interval);
}
}
var param_interval = setInterval(checkParamsLoaded, 100);
結果:
Loading... Loaded! 1
MovieClip.onEnterFrame
this.loadVariables("data.txt");
this.onEnterFrame = function()
{
if(this.ok == undefined)
{
trace("Loading...");
}else{
trace("Loaded!");
trace(this.ok);
delete this.onEnterFrame;
}
}
結果:(根據你的FPS而定,筆者環境FPS=30)
Loading... Loading... Loaded! 1
本文若有任何謬誤,希望請不吝地賜教,若能指正不勝感激。
2007-07-18 22:32:23 | Add Comment