• 沒有找到結果。

移植CYC遊戲平台客戶端的圖形使用者介面

第四章 實例探討

4.2 移植CYC遊戲平台客戶端的圖形使用者介面

這節中先討論 CYC 遊戲平台客戶端的圖形使用者介面使用

GuiWrapper 的可移植性,並且分析使用 GuiWrapper 的效率。最後探 討 CYC 遊戲平台移植到.NET Framework 平台的其他問題。

4.2.1 使用 GuiWraper 移植圖形使用者介面的可行性

在第三章提到中使用 GuiWrapper 的可移植性,因此使用

GuiWrapper 移植 CYC 遊戲平台客戶端的圖形使用者介面,一共分成 五項來探討:

‹ Component hierarchy:

CYC 遊戲平台客戶端的圖形使用者介面使用的所有 AWT 控制項,

GuiWrapper 都有支援,因此都可以透過 GuiWrapper 完整移植到 Windows Forms。故 CYC 遊戲平台客戶端的圖形使用者介面在 Component hierarchy 方面可以順利移植。

‹ Layout manager:

CYC 遊戲平台客戶端的圖形使用者介面有使用到 AWT 所提供的 Layout manager,因此圖形使用者介面使用 GuiWrapper 後,畫 面上控制項的配置,和原本 AWT 時有些不同,但是實際上的差異 不大。圖 4-1 是移植後的圖形使用者介面,跟移植前的圖形使用 者介面(圖 1-1)的差異,只有左下角下拉式方塊的底色(顏色較 深),以及右下角的按鍵大小(尺寸較小,略擠),其餘畫面皆相 同。故 CYC 遊戲平台客戶端的圖形使用者介面在 Layout manager 方面可以順利移植。

圖 4-1、使用 GUIWRAPPER移植後的圖形使用者介面(橋牌)

‹ Graphics:

CYC 遊戲平台客戶端的使用者介面所使用的繪圖與影像處理功 能,GuiWrapper 都有支援。故 CYC 遊戲平台客戶端的圖形使用者 介面在 Graphics 方面可以順利移植。

‹ 通用 Event 模式:

CYC 遊戲平台客戶端的使用者介面所使用的事件(除了 Paint 事件 之外),GuiWrapper 都有支援,並且處理流程和 AWT 時完全一樣。

故 CYC 遊戲平台客戶端的圖形使用者介面在通用 Event 模式方面 可以順利移植。

‹ Painting 模式:

CYC 遊戲平台客戶端的使用者介面遵循 GuiWrapper 的指導方針,

在處理 Paint 事件上,雖然覆寫了 update(),但是 update()的 功能只有呼叫 paint(),因此 Paint 事件處理流程跟 AWT 時一樣。

上一節中提到,使用 GuiWrapper,可以順利將 CYC 遊戲平台從 AWT 移植到 Windows Forms。本節中要來探討,使用 GuiWrapper 移植 所花費的時間,比直接修改程式碼來移植,可以快多少。

CYC 遊戲平台客戶端的圖形使用者介面,以橋牌遊戲為例,跟畫 面有關的物件類別,總共使用到 204 個 Java 檔案,79738 行的程式 碼。這些程式碼,就是當移植到 Windows Forms 時,所需要修改的程 式碼。

如果是採用直接修改程式碼來移植到 Windows Forms,至少需要 把所有使用到 AWT 的物件類別,轉換成使用 Windows Forms。從程式 碼分析,最少需要修改 14544 行。如果是採用 GuiWrapper 來移植到 Windows Forms,原本物件類別所 import 的套件,要從 AWT 改成 GuiWrapper。從程式碼分析,一共需要修改 308 行。

因此,使用 GuiWrapper 移植的效率比直接修改程式碼,還要快 上 47.2 倍(14544/308)。

4.2.3 移植 CYC 遊戲平台的其他問題

在第二章中有介紹 J#非常適合用來將 Java 開發的程式,移植 到.NET Framework 上。所以,CYC 遊戲平台客戶端使用 J#來作移植 的工作。但是 J#中不支援一些原本 Java 可以使用的 API,使得 CYC 遊戲平台客戶端在移植到.NET Framework 平台遇到三個問題:

JNI(Java Native Interface)、Resource 和 Javascript。在下面的 小節中,我們將分別介紹如何處理這三個問題。

4.2.3.1 JNI

CYC 遊戲平台客戶端原本使用 JNI 技術,呼叫 Windows 作業系統 提供的 Win32 API 來播放音效。移轉到.NET Framework 後,根據第 二章的介紹,需要改用 P/Invoke 技術取代 JNI 技術。

因為 P/Invoke 可以直接呼叫 Win32 API,不必像 JNI 一樣得自己 撰寫 C 語言的 DLL 後再呼叫 Win32 API,因此改用 P/Invoke 比使用 JNI 還方便呼叫 Windows 作業系統提供的功能。

圖 4-2、使用 JNI 技術和 P/INVOKE技術的比較

4.2.3.2 Resource

CYC 遊戲平台客戶端原本使用不同語言的資源檔,讓圖形使用者 介面可以根據使用者習慣的語言,選擇顯示該語言的畫面。移轉 到.NET Framework 後,資源檔的格式和 Java 使用的不一樣,需要作 轉換。.NET Framework 本身就提供了轉換資源檔格式的程式碼,只 要照著用就可以了。

4.2.3.3 Javascript

CYC 遊戲平台客戶端原本使用 Java applet 執行,因此可以使用 Javascript 和瀏覽器溝通。CYC 遊戲平台客戶端利用這項優點,開發 了一些功能,像是使用 Javascript 另外開啟一個瀏覽器視窗,顯示 使用者的聊天歷史。

移植到.NET Framework 後,CYC 遊戲平台客戶端是以應用程式的 方式執行,無法使用 Javascript。CYC 遊戲平台客戶端的解決方法則 是在圖形使用者介面中,內嵌了一個瀏覽器,Javascript 就交由內 嵌的瀏覽去執行。此內嵌的瀏覽器,也讓 CYC 遊戲平台客戶端可以應 用的功能更加豐富。

根據 4.1 和 4.2 節的探討,發現在 GuiWrapper 的幫助下,CYC 遊 戲平台客戶端可以順利地從 Java AWT 移植到.NET Windows Forms。

而且不需要修改太多的程式碼,便可以享受到移轉到.NET 平台後的 好處。

相關文件