2012年3月27日 星期二

Lua Module

Wow居然半年沒有新文章~我真是太混了。這段時間去參加App比賽了,辛苦獲得最佳文創獎,但是卻忽略了這邊的文章,真是不好意思阿。

今天來講講Lua很好用的Module吧。

Module(模組)主要是允許和其他Group分享你自己開發的code,並且不需要任何複雜的語言去引入Module,只需要透過”require”載入,就能夠索引Module裡的table參數、function等。且Lua的Module可以視為程式人員與美工、企劃人員之間的溝通橋樑,美工、企劃人員可以將遊戲設定輸入至一Module裡面,程式人員只需要針對這些Module的加載,就可以取得整體美工與UI空間規劃。當然,如果美工、企劃人員要修東修西的,程式人員也不用隨侍在側,一直跟著修改。Module使用如以下範例:
require “bankModule”
bankModule.open()
bankModule.rest()

bank = require “bankModule”
bank.open()
bank.rest()
此範例為一個銀行模組,透過require導入,即可使用內部的function。
使用Module的時候,透過require即會自動加載Module內容,但是不會運行Module,只有當你呼叫Module的內含程式才會運行,且若你已經加載過某Module,你要再次require他,是不會再次加載的,因此不用擔心加載的Module被改寫。
Module最基本的就是寫一個Table,把你所需要用到的參數、位置設定、遊戲角色參數等資料,放入Table裡面,夠過Module的加載,即可在你主程式內使用這些參數。寫法如下:
Game_Language.lua
module(..., package.seeall)
    local Game_Fig = {}
    Game_Fig.Menu = {}

    Game_Fig.Menu.Game_button_default = "Game.png"
    Game_Fig.Menu.Game_button_press = "Game_press.png"
    Game_Fig.Menu.About_default = "About.png"
    Game_Fig.Menu.About_press = "About_press.png"
    Game_Fig.Menu.HighScore = "highscore.png"

return Game_Fig
此範例主要設定圖片檔案的名稱,透過載入此Game_Language的Module,就可以知道圖片的檔名為何。使用時如以下寫法即可:
local FigName = require "Game_Language"
FigName.Menu.HighScore
除了Table以外,當然更可以把會用到的function一起寫入。最常用的,就是物件的產生,包含物件的圖片、參數設定、funciton等一起寫入一個Table,最後return回去即可。如以下範例:
AEnemy.lua
module(..., package.seeall)
function newEnemy()
 local enemySet = sprite.newSpriteSet(_G.enemySheet,1,3)
 sprite.add(enemySet,"move",1,3,400,-2)
 
 local enemy = sprite.newSprite(enemySet)
 enemy:prepare("move")
 enemy:play()
 enemy.HP = 2
 enemy.speed = 60.0
 enemy.physicShape = {   31.9494552612305, 22.6137180328369  ,  -43.1407942771912, 11.4223823547363  ,  -40.6137180328369, -4.75090408325195  ,  8.05054092407227, -23.1624565124512  ,  40.9747314453125, -4.82310485839844  }
 return enemy
end
以上此範例,即為建立一個敵人物件之Module,其包含圖片物件、其相關參數設定、速度設定等等。最後把這個物件return即可。使用上也是如同上面所述,只要require進來即可,例如:
A = require "AEnemy"
local enemyA = A.newEnemy()
以上即為很好用的Module寫法。

5 則留言:

  1. 請問一下 我想要學 Corona SDK
    你是從那裡學起的呢?
    有參考書還是去上課呢?

    回覆刪除
    回覆
    1. 我學習Corona SDK是自己學習的,藉由看Lua語言加上Corona網頁以及範例,自行學習的。
      當時並沒有任何好的參考書,目前比較好的一本應該是Corona自己出的原文書,但是我建議可以直接用Corona網站的資源學習即可。

      其實學Corona SDK可以自己學習也可以找位老師以家教性質學習是比較快的方式。
      不知道您過去是否有任何程式的底子嗎?
      如果您有程式的底子,那麼Lua語言我想您可以自行修習就可以上手了,再搭配Corona網頁的Library,跟著範例做其實可以學習到入門了。
      若沒有程式的底子,那我建議您可以找位家教老師學習,這樣其實最快。
      外面彷間就我知道的補習班(我指大班教學的),就我所知,一般學習比較淺層,主要是讓你可以熟悉,不害怕程式以及Corona介面。
      但是要學到真正的"眉角",我是建議找位家教老師,而且,最好是你心中有想做的"題目",這樣學習最快。
      例如你已經有構想想做遊戲、或是其他app,跟老師討論後,分析由程式入門到針對您的目標去學習,這樣是最快,又學的扎實的。

      希望這些對您有幫助。
      謝謝您

      刪除
  2. 哈囉哈囉,請問要如何與您聯絡呢?目前有在使用corona SDK,但沒有非常深入,使用上也找不到人詢問,想請問大大可否請教您這方面的問題呢?

    回覆刪除
  3. Hello:當然可以跟我聯絡,在關於我裡面有"傳送電子郵件"可以寄Email。歡迎一起討論喔!!

    回覆刪除
  4. 他還沒有藍芽功能嗎
    一直找不到

    回覆刪除