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

【Gamelook專稿,轉載請註明出處】

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

Gamedeveloper

我上一款遊戲《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對比:

6

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

8

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

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

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

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

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

Comments are closed.