資深開發者:談手游跨平臺移植的簡易技巧

jopen 9年前發布 | 7K 次閱讀

隨著免費工具的日益增多,游戲移植已經變得越來越容易,尤其是手游平臺。不過,想要把 Java 時代的早期手游移植到 Android 和 iOS 平臺,如果使用這些工具可能沒有那么方便,如果依賴于某個工具,那么你就有可能面臨版本大改而重寫大量代碼的風險,或者有新的平臺出現,你就必須等待該工具推出對應版本,這很容易導致錯過機會。最近,筆者找到了一個從事手游研發十多年的資深開發者的博客,他在文中講述了如何用最簡單的方式在 Java、Android 和 iOS 以及 HTML5 之間進行游戲移植,以下是完整的博文內容:

資深開發者:談手游跨平臺移植的簡易技巧

我上一款游戲《Chrono&Cash》也成功地移植到了 HTML 5 平臺,而且做出來的效果還非常不錯,已經可以上架銷售了。和往常一樣,有很多人問我做移植的時候使用了什么庫、框架或者工具,所以我覺得是時候說說我的游戲移植經驗了,這樣下一次再有人問的時候,我就可以直接讓他們來看這篇博客。

首先需要說明的是,為什么我不實用跨平臺庫或者工具呢?因為我有強迫癥,我希望知道我的代碼都有什么作用,而且要知道它們什么時候、為什么被用到。其實市面上有非常不錯的跨平臺解決方案,但我總是害怕需要在游戲代碼方面有所妥協。如果這些工具背后的制作人或者公司突然停止支持了怎么辦?如果他們突然改變了工具,我就必須改變自己的游戲代碼或者做游戲的方式,這時候又怎么辦?

我從來不覺得使用其他人的標準代碼有什么靈活性,而且用起來總是感覺很笨重,也滿足不了我的要求。我還發現運行自己的代碼可以讓我快速地進行游戲更新或者為新設備或者特別的東西(比如 Joypad 和 iCade)進行代碼適配,這樣可以帶來非常不錯的業務機會,如果我要用別人的框架,可能就必須等待他們為特定的設備推出特定版本的工具,這是很不方便的。

說了這么多,我要指出的是,的確有非常優秀的工具可以使用,但本文并不是講述如何使用它們的。

我過去經常做 Android 游戲研發,近些年來也做了一系列的框架,可以處理一款 Android 應用的所有需求,而且這些代碼還具備運行主線程(main threads,比如 gameloop,logic loop,rendering 等等)所有的條件,還可以處理各種手柄的輸入問題,我處理所有的事情都只用了少數 class 而已,在我所有的新項目中,我基本是都會復制和粘帖三四個 class。

除了這些 class 之外,我當然還有一些做游戲移植的小技巧,所以我經常從之前的游戲中復制和粘帖一大堆的 class 來處理游戲中的敵人、子彈、特殊效果、玩家代碼等等。這是一個非常不錯的快速做創意代碼非常不錯的方式。你唯一需要擔心的事情就是,舊的函數或者變量肯呢個最終不會使用,但仍然會在初始化的時候被調用,而且沒有簡單的方式可以解決。

一旦我的游戲運行并且在 Android 平臺完成之后,在我覺得它可以上架銷售的時候,我會開啟 xCode,在 Object-C 編寫的 iOS 框架中創建一個新項目。

iOS 框架基本上和 Android 框架的功能相同,但很明顯有根本的差異,因為它們是不同的系統。雖然 iOS 框架也要處理輸入、線程和 iOS 應用的所有階段,但 iOS 框架沒有一行代碼是和 Android 版本完全相同的。

我大多數的時間都是調整這些框架,有時候可能需要做完好幾個游戲才能把一個框架調試到對的狀態。在 Android 平臺我是基于近些年的很多次框架進行了調整,只是簡單地適應了 Android 系統的變化。而在 iOS 平臺,我一直在提高框架處理不同設備參數的能力,因為一開始移植游戲的時候,我甚至不知道該怎么辦,比如旋轉、靜音按鈕和其他類似的東西。

一旦在 iOS 平臺創建了新項目之后,‘有趣的’部分就開始了。針對每一個 Android class 文件夾(玩家、怪獸、fx、子彈),我都會創建一個同名的 iOS Class 文件夾,然后把 Android 代碼復制粘帖到這些 class 文件夾里。

然后我檢查每一行代碼并且進行必要的修改,這似乎是顯而易見的,或許是非常大的工作量。但實際上,大多數不同語言的代碼其實并沒有那么大的差異,比如下圖,是我的游戲《Chrono&Cash Monster》的 Java(Android)和 Object-C 版本的初始化 class 對比:

資深開發者:談手游跨平臺移植的簡易技巧

你可以看出的是,它們之間的差別很小,再看下面這張圖,是把一些真實的游戲 logic 從 Java 轉化到 Object-C 的部分代碼:

資深開發者:談手游跨平臺移植的簡易技巧

所以,最后一張圖是實際的游戲 logic,基本上占據一款游戲 80%-90% 的代碼,而這兩者幾乎是使用了同樣的代碼。

現在做一款新游戲的時候,我還需要牢記一些事情,當我做 Android 游戲的時候,我還會思考特定的代碼或者解決方案是否在 iOS 平臺可行,這樣在版本移植的時候可以省去很多的問題。

把我的 Android Java 代碼移植到 JavaScript 基本上是非常容易的,因為這兩個語言的相似性太高了。HTML5 框架功能也很簡單,只是處理瀏覽器的輸入、渲染和線程,基本是可以解決大多數的問題。

我還在游戲中為所有的文本都使用預渲染圖片,在移植到新平臺的時候,這也可以節約時間和避免很多問題。只要你能夠在一個平臺上渲染圖片,那么這些文本的渲染就不會有任何問題。

還有些比較小的事情可能一時之間沒有想起來,但上面說的這些事情在你首次移植一款游戲的時候都會遇到,你的第一款移植游戲可能是耗時最長的,因為你還在學習編程技巧和語言,不過一旦有了自己的框架并且知道如何編譯特定代碼的時候,就會變成小菜一碟。

來自: 游戲大觀

 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!