Haxe學習筆記(一) Haxe:一次編碼全平台編譯的神話

來源:互聯網
上載者:User

Haxe學習筆記(一) Haxe:一次編碼全平台編譯的神話

一 Haxe是什麼?

Haxe是開源的,它作為一門語言,基礎文法和ActionScript3基本一致。所以任何做過Flash開發的人都可以很快的上手。Haxe最獨特的地方在於他的編譯器,Haxe的編譯器能自動將Haxe代碼編譯成任何支援的目標語言,並自動輸出最終結果。這個過程非常方便,僅需一行參數不多的命令列。

Haxe這個支援列表非常豐富,C++,JavaScript,Falsh,PHP,C#,Java。加上NME模組的支援的話,還支援iOS,Android,WindowsMobile,WebOS。編譯到不同的平台上統統都只需要一句命令列,非常方便。

我的重點不在介紹,需要瞭解更多的按順序閱讀以下文章:

haxe:號稱比java還跨平台的語言

haxe 行動裝置跨平台開發

上帝的玩偶:haXe語言

如果以上文章不能滿足你,請看官網:http://haxe.org

二 缺點

Haxe真要用到開發中,我接觸的不多沒有經驗,可以看下wyyayy兄的文章:

haxe,想說愛你不容易

三 環境搭建

Haxe的環境搭建非常簡單,僅需一步就可以搭建好Haxe的環境。

1 下載安裝程式

http://haxe.org/download (官網)

PS:在Linux下可以直接apt-get安裝

2 選擇代碼編輯工具

官方強烈推薦FlashDevlop,這個IDE也是和Haxe結合的最好的,原生支援Haxe,但是只有Window版本。所以我選了一個自己喜歡的文字編輯器。

參考:http://haxe.org/com/ide(官網)

3 測試

開啟命令列/終端,打入haxe測試一下。

到這裡為止,Haxe就原生支援的這些目標語言了。

四 使用下Haxe

官網上有非常多的入門指引,我這裡只拿C++,Flash,Java做測試。文字也會更簡單一些,需要詳細的介紹可以點下面的串連去看官網教程(英文):

C++ | Flash | Java

0 測試代碼

我照著官網的例子製作了一個HelloWorld,並儲存做了Test.hx。(注意檔案名稱需要和類名相同)

class Test {    static function main() {        trace("Hello World !");    }}

1 C++

編譯C++需要用到一個叫做hxcpp的模組,如何安裝模組呢?非常方便的有haxelib這個指令,在命令列下執行:

haxelib install hxcpp

haxelib命令會自動去haxe的倉庫中將hxcpp下載到原生haxe模組的倉庫內,非常方便。

PS:某些平台上(比如mac),在安裝模組之前需要先設定haxe模組的倉庫路徑:

haxelib setup

安裝好hxcpp後就可以編譯成C++的程式了

haxe -cpp cpp -debug -mian Test

解釋一下:

-cpp cpp 指定輸出類型為C++,輸出到一個叫做cpp的目錄下

-debug 可以讓我們看到trace的輸出

-main Test 指定程式的入口,是類名

執行後可以在cpp目錄下找到Test-debug這個輸出的二進位檔案,執行它:

第一個平台大功告成了,其他的平台編譯過程也是類似的過程。

2 Flash

輸出為swf是haxe最早支援的功能,它不需要任何其他模組。

haxe -swf test.swf -main Test

解釋一下:

-swf test.swf 指定輸出類型為flash,輸出成一個test.swf檔案

-main Test 指定程式的入口

找到test.swf用FlashPlayer或者瀏覽器開啟,當然寫一個html的模板(官網教程中有),再用瀏覽器開啟。下面是效果:

需要說明的是Haxe可以支援輸出成多個Flash的版本,需要在編譯命令中加其他參數。請參考官網教程。

3 Java

Java平台沒啥特別的,和C++差不多,不過你得自己先安裝好JDK。

haxe -java java -main Test

-java java 指定輸出類型為java,輸出到一個叫做java的目錄下

-main Test 指定程式的入口

編譯輸出結果為java目錄下的java.jar,執行指令為:

java -jar java.jar

結果:

看完了3個例子,是不是覺得Haxe非常的方便易用?

四 NME介紹

NME是Haxe在互連網進入移動互連網之後的產物,它本身是Haxe的一個模組。隨著移動互連網興起,它的發展速度很快,已經成為了Haxe的重頭戲。以至於Haxe也給他建立了一個獨立的頁面:http://www.haxenme.org

NME雖然是一個模組,但是它的作用非常之大。NME將Haxe的代碼先編譯為C++代碼,然後將C++代碼編譯成為目標平台的二進位檔案。

NME另外一個偉大之處在於它給Haxe語言中添加了名叫nme的包(Package),這個包內部包含了非常多的Flash中的同名庫。換句話說,熟悉Flash開發的朋友們幾乎可以馬上開始開發工作。到底NME的庫和Flash有多少的相似性?我沒有具體使用過,但是這裡有API手冊(http://www.haxenme.org/api/),真的非常相像。

五 NME安裝

NME模組有獨立的安裝包,可以直接下載安裝;當然你也可以手動在之前安裝的Haxe中安裝NME模組。在這篇文章裡面我將同時介紹兩種方式。另外,windows版本的NME獨立安裝包內包含了Haxe,為保持系統簡潔,可以先把之前的Haxe環境刪除。Mac的版本沒這個問題。

1 安裝NME

A 獨立安裝包(推薦)

獨立的安裝包在這裡:http://www.haxenme.org/download/ (官網)

下載適合自己系統的安裝包,然後運行安裝,過程非常簡單。

B 在之前的Haxe環境下安裝

命令列:

haxelib install nme

因為NME的系統還依賴其他一些haxe包,所以也在這裡安裝以下的包:

haxelib install hxcpphaxelib install actuatehaxelib install swfhaxelib install svg

2 安裝配置目標平台

NME自己並不是全能的編譯器,所以它依靠各個不同開發平台下的C++編譯器,將自動產生的C++代碼編譯為目標平台上的執行檔案。我們只需要告訴NME我們要將代碼編譯到哪裡去,NME就會自動化佈建好一切。

依舊是命令列,編譯成Windows程式:

nme setup window

編譯成Android程式:

nme setup android

編譯成ios程式:

nme setup iOS

等等......

各位感覺到Haxe的強大和方便了吧?

不過還是有一些細節需要注意:如果目標平台為Windows,那麼會自動找到Visual Studio的編譯器。如果你沒有安裝任何的Visual Studio,那麼NME會自動為你下載一個免費的Visual Studio C++ Express。它足夠你用了。如果目標平台是ios或者mac,那麼會跳到XCode的下載頁面(即使你已經安裝了XCode)。你很幸運,你可以跳過到下一步了。如果目標平台是android,這就有點麻煩了,你需要安裝AndroidSDK,AndroidNDK,Ant,JDK,(Mac系統內建Ant和JDK)。運行nme setup android後,會自動開始下載AndroidSDK,下載完成後自動開啟Android SDK Manager工具。這個時候需要手動選擇:平台工具,Android2.2(API 8),Extras。下載完Android SDK後,會自動下載Android NDK。因為我是Mac系統,跳過了Ant和JDK。如果你已經安裝了Android的環境,你可以選擇跳過下載後手工輸入你的Android SDK和NDK的目錄。到這裡為止,所有的安裝和配置都已經完成了。如果要想看其他平台和更多細節,請詳細閱讀這個頁面:http://www.haxenme.org/documentation/setup/ 如果已經完成了安裝,可以瞭解下NME對硬體的支援和各種特性的支援:http://www.haxenme.org/documentation/devices/ 和 http://www.haxenme.org/documentation/features/

六  編譯測試

還是那我們的Test.hx來做編譯測試吧,我們現在需要一個.NMML檔案來配置我們的編譯參數。

<?xml version="1.0" encoding="utf-8"?><project>  <app title="Test App Title" main="Test" package="org.haxenme.tutorial.testapptitle" version="1.0.0" company="NME" />    <window width="640" height="480" fps="30" orientation="portrait" resizable="true" />   <set name="BUILD_DIR" value="Export" />  <classpath name="." />  <haxelib name="nme" />  <!--  <assets path="Assets" rename="assets" include="*" exclude="nme.svg" />  -->  <ndll name="std" />  <ndll name="regexp" />  <ndll name="zlib" />  <ndll name="nme" haxelib="nme" />  <!--  <icon name="Assets/nme.svg" />  --></project>

因為我沒有icon檔案,所以只能先注釋掉相關的兩行,然後就可以編譯了:

iOS模擬器:

nme test sample.nmml ios -simulator

經過了漫長的編譯等待(僅第一次),如果你成功了,你可以看到iOS模擬器自動開啟並運行了輸出的程式。(我看到了白屏,當我退出iOS模擬器的時候看到了熟悉的“Test.hx:3: Hello World !”)

Android:

nme test sample.nmml android

經過了漫長的編譯等待(僅第一次,比iOS要慢很多),如果你成功了,並且你的手機串連到電腦上,你可以看到你的手機自動開啟並運行了輸出的程式。(我看到了白屏,同時在終端中看到了熟悉的“Test.hx:3: Hello World !”)

七 結束語

在我學習Haxe的過程中,一直為開發人員感到驚訝,從頭到尾我只用了不到10個haxe的指令就完成了搭建環境到可以開發的過程。它的引導功能,自動尋找外部工具的功能,都協助學習者大大縮短學習的過程。它的官網簡潔,文字精簡突出重點,指引資料很完整。

這是一個偉大的開來源程式!向Haxe的作者們和社區致敬,

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.