關於Alchemy的使用-備忘

今天無意間發現了一篇文章說到了使用Alchemy來讓flash的as代碼調用C代碼的功能接口的方法,目的是爲了能在flash環境下使用C的東西,另外一個角度來說可以更好的發揮C語言的強大能力和效率了;

 

 我學習Alchemy是被客戶逼的,客戶的AIR項目中涉及到大量的數值計算,以至於用AS3寫出來後沒法運行:長時間不響應。後來將這段計算量大的代碼用VB寫了,用swf調exe纔算結束。但設置有些不便,客戶吹毛求疵。不得不尋找新的解決方法。感謝QQ羣裏的一些達人,我開始關注並瞭解 Alchemy,最後解決了這個棘手的問題。對於Alchemy我知道也不多,大概瞭解他可以將C/C++的編碼給AS3調用,提高AS3的效率,具體的解釋可以參考官方的定義。下面我以一個簡單的例子,講述Alchemy的簡單用法。不一定很精彩,有些地方是我個人不明真相的理解,或許壓根就不對,但如果你想了解Alchemy,建議你讀下去,總會有些收穫的。同時,一併希望有人能指點一二。如果我前幾天能看到這篇教程,就不會走許多彎路了。基本上,該遇到的麻煩,我都遇到了。


目的:用Alchemy和Actionscript3計算從1累加到N的值。(N越大,越能比較出速度的快慢)

工具:Alchemy,Cygwin,FlexSDK,Java(JRE),FlashCS4. (可能用到:Dev-C++,AirSDK1.5)

步驟:
1、下載
下載之前,說一下這幾個軟件的關係,便於理解。看圖,就是我的理解。

Alchemy下載頁面(點此直接下載文件): http://labs.adobe.com/downloads/alchemy.html
Java(JRE)下載頁面:http://java.sun.com/javase/downloads/index.jsp
FlexSDK下載地址(點此直接下載文件):http://opensource.adobe.com/wiki/display/flexsdk/Download+Flex+3
Cygwin下載頁面(點此直接下載文件):http://www.cygwin.cn/site/install/

注:
a、FlexSDK要求是3.2或以上版本。如果安裝了Flex,可以在安裝文件夾裏面找,不用下載。
b、到java下載頁面試了一晚上,發現沒法下載,不知道是不是我的網絡問題……備用地址:http://down.tech.sina.com.cn/page/13444.html
c、Cygwin下載的文件只是一個下載器,可以根據下載頁面給的提示進行下載。具體請看下一步:安裝。

2、安裝
      爲便於測試方便,把這些軟件都安裝到了C盤根目錄下。
      a、Alchemy,下載解壓縮後,放在C:/alchemy 路徑下。
      b、Java,這個直接點擊,一路next安裝就可以了。
      c、FlexSDK,下載解壓縮後重命名,放在C:/FlexSDK路徑下。
      d、Cygwin,一路默認next,到“Select Package”那個界面時,會有一個列表,需要選擇如下三個包:
         Archive -> zip
         Devel   -> gcc-g++
         Perl
        再然後,一路默認next。最後桌面上會有一個“Cygwin”的快捷方式。
       (如果網速很慢,中間會跳出一些安裝不成功的窗口。重新裝即可。如果安裝少文件,在Cygwin命令行輸入命令時會出錯,比如:"perl" not available,"zip" not available)


     注:因爲得要Cygwin知道FleSDK和Alchemy的路徑,所以還要設置一點東西:
     將C:/cygwin/etc 文件夾下的文件"profile"中
                 PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:$PATH.
                改成:
                source /cygdrive/c/alchemy/alchemy-setup
                PATH=/usr/local/bin:/usr/bin:/bin:/usr/X11R6/bin:/cygdrive/c/alchemy/achacks:/cygdrive/c/FlexSDK/bin:$PATH
               然後保存文件(注意裏面的路徑……c/alchemy/……)。

3、轉換
   再然後的步驟,就可以將*.c轉換成*.swc了。以Alchemy自帶的例子舉例:C:/alchemy/samples/stringecho
  
a、點擊桌面上的“Cygwin”快捷方式,開啓Cygwin命令窗口。
b、進入alchemy目錄,開啓alchemy,根據提示命令如下:
       cd C:/alchemy
      ./config
      source /cygdrive/c/alchemy/alchemy-setup
      alc-on

c、進入stringecho,並編譯c到swc,命令如下:
      cd samples/stringecho
     gcc stringecho.c -O3 -Wall -swc -o stringecho.swc

一會,就會在相同目錄下多出一個swc文件了。


4、應用
   接下來,就是用FlashCS4來應用這個編譯好的stringecho.swc了。

   a、新建一個Flashcs4文件,把stringecho.swc添加到庫路徑中:

     並在發佈設置裏面的發佈成swc裏打勾(必須,否則出錯,原因未知):

     第一幀加代碼:
Import cmodule.stringecho.CLibInit
var test:CLibInit = new cmodule.stringecho.CLibInit;
var lib:Object = test.init();
trace(lib.echo("foo"));   


ctrl+enter測試,如果trace出foo,說明測試成功。

注:如果要發佈成air,則需要air的版本是1.5版。否則出錯。(比如提示:"1046:Type was not found or was not a compile-time constant:Vector.")

5、例子
上面基本上把整個流程過了一遍,現在開始累加1到N的例子了。C我不大懂,直接根據“stringecho”這個例子的代碼照葫蘆畫瓢整的(源碼中的文件:sum.c)。
   在編輯sum.c這個文件的時候,需要編譯運行該文件,以便測試效果,所以還可能需要用C編譯器。我用的軟件是:Dev-C++(這裏是下載地址)。但是最後的sum.c用到了as的庫(#include "AS3.h"),所以不能完全用Dev-C++來測試。好在用Cygwin編譯c到swc的時候,如果編譯出錯,會有提示。
    c和fla裏面的代碼就不再囉嗦了,源文件附上。如果還是鬧不清,可以多想一下那個廚師做糖醋里脊的例子,對比一下各個軟件的關係。




6、感謝
      多謝閃無憂QQ羣裏的星光,汪汪和牛牛豬。如果不是他們在羣裏談論Alchemy和發截圖,我是不會想到要用這個方法來解決項目中的問題的。當然,還要感謝那個吹毛求疵的客戶。
    本文主要參考瞭如下兩篇文章,表示感謝:
    http://www.insideria.com/2009/04/setting-up-adobe-alchemy.html
    http://bbs.actionscript3.cn/thread-20233-1-1.html

 

參考:

http://insideria.com/2009/04/setting-up-adobe-alchemy.html

http://labs.adobe.com/technologies/alchemy/

發佈了24 篇原創文章 · 獲贊 2 · 訪問量 14萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章