Skip to main content

Posts

Showing posts with the label Corona SDK

[App] 國道計程收費速算器 2.0

之前的版本跟目前 國道計程官網 所列資料誤差很大,這支 App 也一直有人在使用,所以為了答謝愛用者只好做了一次大更新,因為對 CoronaSDK scrollView widget 有點怨言,所以 iOS 版本採用 Swift3 重寫了一遍,不過 Android 版本還是維持著 CoronaSDK 版本: V2.0 更新: 更新地圖資料與國道計程收費官網同步,新增多個服務區、樹林與南雲出入口。 修正快速道路與無計費國道串接點選方式,改採用連續點法,如 苗栗到清水服務區點選順序為:苗栗 ->台中系統 -> 中港系統 -> 清水服務區 更新連假模式價錢基數與修正計程車模式價錢顯示。。 地圖可縮放。=D Universal Version includes iOS and Android

[CoronaSDK] TweenTrain, the transition helper class

上週新上架了一個 CoronaSDK transition API helper plugin,主要的目的是為了可以用 string 設定控制所有的動作巨集,方便動作資料預設。 一般來說,如果要使用 transition 達成物件跳躍後往右邊移動,一般語法如下: transition.to( target, {y = target.y-100, transition=easing.outSine, time = 400} ) transition.to( target, {y = target.y+100, transition=easing.inSine, time = 300, delay=400} ) transition.to( target, {x = target.x+300, transition=easing.inSine, time = 600, delay=700} ) 如果改用 tweentrain 就可以寫成: tweentrain.set( target, { "transition:to", {y="-100", transition="outSine", time=400} }, { "transition:to", {y="100", transition="inSine", time=300} }, { "transition:to", {x="300", transition="inSine", time=600} } ) tweentrain.start( target ) 是不是就簡單很多了呢? View the Document on Github Get it from Corona Plugin Store now. =D

[CoronaSDK] 多國語系支援

CoronaSDK 中取得 Android 與 iOS 語系方法並不相同,繁體與簡體取得名稱也不一樣,為了簡化兩系統的繁體與簡體語系支持,所以特別打包了一支函式來控制多國語設定,之前一直忘了分享出來也剛好很久沒更新 Blog 了...=D 使用方法很簡單: 將語系字串放在 locale/ 並以 strings.i18n(預設)與 strings_[ISO_639-1].i18n 繁體共用命名:zh_hant 簡體共用命名:zh_hans 語系字串資料採用 JSON 格式: locale/strings.i18n { "hello" : "Hello", "welcome" : "Welcome" } locale/strings_zh_hant.i18n { "welcome" : "歡迎" } 執行:Global function L( str: String ) -> String Usage: local i18n = require( "i18n" ) -- set device language -> locale/strings_[device setting].i18n i18n.setLocale() -- 假使目前語系為 i18n.language = "zh_hant" print( L("hello"), L("welcome"), L("no data")) -- Hello 歡迎 no data -- 動態更改支援語系到預設值 i18n.setLocale("") print( L("hello"), L("welcome"), L("no data")) -- Hello Welcome no data 備註:僅測試於 Android 與 iOS 系統,如其他裝置需要做修正的話,請自行 DIY。

[Lua] 簡易模擬 C# Delegate Type 行為

因為工作需求,準備開始學習 C#,這兩天研究一些公開的 Unity 原始碼發現 C# 有個 Delegate Type 很有意思,它可以利用 + 與 - 將需要搭配執行的 function 指派到委任者然後一起執行。如: //C#, d1 and d2 are functions allMethodsDelegate += d1; allMethodsDelegate += d2; allMethodsDelegate(); // d1(), d2() allMethodsDelegate -= d2; allMethodsDelegate(); // d1() 參考資料: 使用委派 (C# 程式設計手冊) Edit: 03, 08, 2015, 感謝 fb@shanyungyang 的提醒可以使用 Lua 的 metamethod 實作,為了達到屬性能往下傳,本來是打算採用 * / 但是又怕太混亂,最後就是由另外一個 meta2 來達到效果囉! ^^

[TexturePacker] Batch converting images to rgba4444

因為需要大量將圖片轉檔成較省空間的 rgba4444 格式,研究了一下 TexturePacker command line tool , 只能說,TexturePacker 真的太好用了啊!!!! 轉檔邏輯為將指定檔案夾下所有的 .png 原圖命名加後綴 @2x 順便輸出 0.5 scale 的小圖,所以不需要兩種輸出的可以將最後兩段倍數輸出設定刪除。 --variant 1:@2x \ --variant 0.5:

[CoronaSDK] FLSprite: Flash Sprite Sheet Parser

由於手上有個案子會使用到大量的動畫,之前與客戶配合時為了方便客戶製作,素材都是採用 Flash 或 PhotoShop 輸出 TexturePacker 可打包格式做 sprite sheet 使用。不過為了打包需要輸出大量的 swf,雖然可以使用 Flash 製作 app 用動畫已經簡化的很多步驟,但是某程度上還是有點不便,於是簡單研究了一下 Flash CS6+ 的內建輸出 Sprite Sheet 功能,並分析其輸出的 JSON-Array 格式給 CoronaSDK 使用。 不過嚴格說起來, Flash 打包 Sprite Sheet 的算法並沒有很好,尤其是有些時候,判定整個 MovieClip 範圍的長寬會有錯誤,這時候就是調整一下 MovieClip 後重新打包,也許就會正確,但是其判定規則因為沒有多加研究,所以目前不明,請有發現的朋友們告知一下,謝謝。

[App] 1Sec. 一秒反應王 v1.1.0 (v1.1.1)

反正就是為了降低失智症發生機率所產生的遊戲...XD 認識我的朋友都知道,我的腦記憶體 80% 都是用在工作上,所以日常生活常常呈現一種失智的狀態,為了避免朋友們的擔心,所以花了些時間製作了一個 App 來幫助其他人與自己多活動腦部細胞,來吧!大家一起來運動...腦細胞!! 魔方網製作的影片介紹:(大感恩啦!!!!) 遊戲速播:(大感恩啦!!!!) 佛心評測: *重灌狂人: 超刺激!「1Sec.-一秒反應王」在一秒間腦力瞬間爆發(iPhone, Android) *app01: 只有1秒鐘!超刺激「1Sec.-一秒反應王」活化你的大腦! *魔方網: 《1Sec. 一秒反應王》考驗你的反應跟耐心 專訪: *魔方網: 絕不要變痴呆!《1Sec. 一秒反應王》專訪 Universal Version includes iOS and Android

[Corona SDK] 多螢幕支援定位函式

為方便 Universal version 的製作,在畫面配置上,我都是採用對應螢幕四方界線方式做定位如 top, left, right, bottom, centerX, centerY,這樣在多螢幕顯示時,物件的位置才能一致,以下是定位函式分享,提供給有需要的朋友使用。

[App] 國道計程收費速算器 v1.1.1

視覺化快選國道里程費用計算。 跟上個壽司比起來,這個App真的幸福太多了...短短不到一週含上架就完成了,如果您操作上發現問題的話,請不吝於告知,我會儘快處理的,謝謝。 佛心評測: * PunPop : 【國道計程收費速算器】算好錢才不會弄錯錢。 * 硬式要學 : 計程收費怎算?「國道計程收費速算器 」3 秒算給妳 Universal Version includes iOS and Android

[App] SushiMaster-壽司達人

這個大概是我做過最悲情的遊戲了吧.... Universal Version includes iOS and Android 佛心評測: * punapp.com : 【Sushi Master-壽司達人】可惡,想吃。 * Free4u FB粉絲團: 【APP推介】看著肚子都要餓了哦~~~!

[CoronaSDK] Coroutine 狀態機

最近手上的案子是個麻煩的遊戲,對於遊戲開發來說狀態機(state machine)是很重要的流程控制器,認真研究了一下 Lua 才發現原來它有 Coroutine(協同程序)這個有趣的功能(AS 系列是沒有這種東西的,請原諒我的無知),有興趣搞懂 Coroutine 的朋友可以參考: electronic_blue 的使用 Coroutine 改寫狀態機 ,它恰恰是以 CoronaSDK 為範本作教學,簡單參考了它的範例程式,打包成了 statemachine.lua 供 CoronaSDK 開發使用。

[Lua] 一分鐘搞懂 Corona SDK 中 「.」與「:」執行函式時的差別

之前有網友在 台灣可樂娜跨平台基地 - Corona SDK 上詢問 Corona SDK 中 table listener 與 function listener 差別。 其實 :addEventListener 時並沒有強制一定需要使用 table listener,因為它在執行 listener 函式時,對於 table 物件會使用 tableObj:listenerFunc ,而單純的 function 是正常執行 listenerFunc() ,差別是 function listener 不會因為「:」語法糖而將 table 本身帶入。 其實只要看下面範例就可以馬上清楚知道其中的差別:

[AIR] JoSi FXGtoLayout

JoSi FXGtoLayout v0.3.0, Adobe AIR 3 runtime 這個又是一個 "就是" 系列懶人小工具,主要是針對 Adobe fxg 格式做分析轉成 Mobile 開發用的視圖程式碼,加速畫面配置使用。 為什麼會製作這個工具,原因主要是本人在使用的 Corona SDK 與 Titanium SDK 都沒有好用的視覺化編輯工具。一般設計師產出 layout 檔會使用 PhotoShop 來製作,在不多花錢的原則下,畫面對齊的基準就是其輸出的 fxg 資料做對應,如果要一筆一筆將資料鍵入,做久也是會膩的,所以花了點時間將這個工具做出來...

[android]舊瓶老酒 Star Joker plus

趁著案子結束時,壽司達人的音效還有待商榷的同時,花了一點時間修改兩年前所做的遊戲,畢竟當時用的 sdk 版本跟現在相差了 N 個版本,果然不少地地方都需要修改啊~~至少一掃當初忘了上架到 google play 的遺憾! 玩法請看: [iPhone] Star Joker plus-Video Poker game

[iPhone] Star Joker plus-Video Poker game

其實這個 app 早在三月的時候就已經寫好了,只是剛好本人的廢人病發作就一直拖到今天才送審上架...XD 先前的 Star Joker 版本是用 Flash CS5 寫的,而這個版本是使用 Corona SDK 開發。 玩法跟 Star Joker 一樣,只是多加了一個 Bounce Stage。 一開始先選擇你的 Bet 數目,然後點選 Deal & Draw。 發牌後,選擇你要保留的牌,然後再次點選 Deal & Draw 會將沒保留的牌重新換一次, 如果有贏牌的話,可以選擇 Collect 將錢收下來又或者是進入到 Bounce stage 去翻倍。

[Corona] Landscape 比照 Flash 座標系的設定

目前看起來,由 action script 轉到 Object-C 的難度遠遠超過 Corona SDK for iPhone 用的 Lua , 想當然爾選擇 Corona SDK 來寫 iPhone app 對 ASer 來說是第一首選。趁著難得的空檔,花了些時間研究一下,沒想到一開始就被它的座標系搞到眼花...只要 landscape 外加 rotation 的時候整個座標系就會很難控制...(因為跟它不熟啦...XD ) 為了堅持在 Corona 中使用 Flash 的座標系(左上到右下),當 landscape 時修改當場景的 group 屬性就可以擔保裡面所有物件都不需要再移動... main.lua : -- -- landscape 使用熟悉的 Flash 座標系 in corona -- local bg = display.newRect( 0, 0, 320, 480 ) bg:setFillColor(100,120,120) local rect = display.newRect( 0, 0, 50, 50 ) rect:setFillColor(255,255,255) --直接指定 rect 在場景中的 x, y rect.x = 100 rect.y = 100 --利用 group 實現場景 local group = display.newGroup() group.rotation = 90 group.yReference = 160 group.xReference = 160 --將 rect 加到場景中 group:insert( rect ) local function onOrientationChange( event ) local tp = event.type if (tp == "landscapeLeft") then group.rotation = 90 group.yReference = 160 group.xReference = 160 elseif ( tp == "landscapeRight" ) then group.rotation = -90 group.yReference = 240 group.xR...