在 Corona 中驗證 Android In-app Purchase

上一篇提到了 RSA 簽章驗證的原理,這邊就來實際示範一次。本文將會介紹如何使用 Corona SDK 在 Android 上實作 In-app Purchase,並且加入簽章驗證的功能。

繼續閱讀

分享到 評論

筆記:RSA 簽章驗證

RSA 是廣為使用的非對稱加密演算法,原本我以為已經很熟悉它了,想不到最近試圖用 Python 實作簽章驗證的時候,才發現有很多小細節是以前沒注意到的地方。

繼續閱讀

分享到 評論

使用 RGBA4444 與 Dithering 減少記憶體用量

在 2D 遊戲中,圖片一向在消耗的記憶體中占用最大的比例。尤其在記憶體資源寶貴的行動裝置上,為了減少記憶體使用量,縮減圖片的大小常常是最有效的方法。

大部份的遊戲會使用材質壓縮 (texture compression) 來縮小圖片的記憶體用量,而在這篇文章中,我會介紹另一種方法:使用 RGBA4444 的材質格式,並配合 dithering 維持圖片品質。

繼續閱讀

分享到 評論

在 Linux 上設定 DLNA 分享服務

DLNA 是 Digital Living Network Alliance 的縮寫,它是由 Sony 為首的多家廠商所組成的聯盟,並且制定出一套適用於數位媒體分享的協議。最近的家用數位產品,比如說手機、平板電腦、數位電視及遊樂器等幾乎都標榜它們是符合 DLNA 認證的多媒體裝置。

只要家中的數位裝置連接到同一個區域網路,使用 DLNA 就可以很方便地把數位媒體分享給不同的播放裝置。比如說把手機中的影片直接送到電視上播放,或是把照片送進印表機中列印等等。由於可以透過無線網路進行資料傳輸,不需要接上傳輸線也不需要額外的設定動作,相當方便。

這篇文章會簡單介紹如何在 Linux 上架設 DLNA server 來分享媒體,同時使用 ebtables 來限制使用裝置。

繼續閱讀

分享到 評論

使用 Easing Function 製作動畫

在製作遊戲的時候,動畫是不可或缺的一部份,即使是與遊戲核心無關的 GUI 部份,若少了動畫就顯得粗製濫造。然而大多數的 GUI 效果:像是視窗飛進畫面中央、按下按鈕時放大效果之類的動畫等等,其內容都有很高的相似性,也就是「在某段時間內,把物件的某些狀態轉移到另一個狀態」。若要使用 3D Max 之類的軟體一一製作,將顯得麻煩而沒有效率。

在這篇文章中,我會以 Unity 作為範例,介紹如何實作一個簡單的 easing function 元件。

繼續閱讀

分享到 評論

Unity+ex2D V.S. Corona SDK

Unity 是最近相當受歡迎的遊戲引擎,具備了易於非技術人員使用的編輯器、以及完整的跨平台支援。Corona SDK 則是專注於手機平台上的 2D 遊戲引擎,由於架構簡單學習容易,也是手機平台上的熱門開發工具。

僅管這兩套引擎的規模不同,不適合拿來比較,但若是以「開發手機平台的 2D 遊戲」作為前提,我倒是可以從個人經驗中做出一些分析。Unity 本身是 3D 引擎,我會以 Unity 加上 ex2D 這套功能強大的 2D plugin 來進行比較。

繼續閱讀

分享到 評論

在 Linux 上設置無線橋接器

在外租房子時,寬頻網路可說是基本的設施,許多房東也提供了 IP 分享器。然而並非所有的房東都提供無線網路基地台(AP),對於手機或平版電腦來說相當不便。

若這時候有一台同時俱備線網路與無線網路的電腦,就可以籍由橋接器的方式,架設一個連接有線網路的 AP。這篇文章將介紹如何在 Linux 下設定這樣的 wireless 橋接器。

繼續閱讀

分享到 評論

使用 Coroutine 改寫狀態機-續

這是 coroutine 系列的最後一篇。相較於狀態機,coroutine 的優勢除了程式碼比較容易理解外,還有可重覆利用的特性。

在這篇文章中,我們會以對話框作為範例,探討如何讓這個遊戲中的常見功能變得容易使用。

繼續閱讀

分享到 評論

使用 Coroutine 改寫狀態機

終於要進入正題了。之所以花了許多篇幅介紹 Lua 以及 coroutine,關鍵就在於 Lua 是遊戲程式中常見的腳本語言(scripting language),而 coroutine 對遊戲程式來說則是相當便利的語言功能。本文將會介紹如何利用 coroutine 改寫遊戲程式中常見的狀態機(state machine)結構,讓程式邏輯清楚而容易維護。

繼續閱讀

分享到 評論

使用 Coroutine 實作 Iterator

若想在不同的資料結構中套用相同的演算法操作資料,往往會使用 iterator pattern。Iterator 的原理很簡單:不同的容器都要實作出具有相同介面的 iterator,把巡訪資料的過程封裝在 iterator 之中,使用者只需要知道如何使用這個共通的 iterator 介面,就可以操作各式各樣結構不同的容器。

傳統的 iterator 實作方法,往往是把巡訪容器時的狀態儲存在某個變數當中。比如說巡訪陣列時,會在 iterator 中儲存陣列的 index;而在巡訪 linked list 時則是儲存其中一個 node。在更複雜的場合--比如說樹狀結構的 iterator 可能要儲存 stack,實作起來就沒那麼簡單了。然而帶有 call stack 的 coroutine 卻可以很漂亮地實做出這種複雜結構的 iterator。

繼續閱讀

分享到 評論