May 12, 2013

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



之前有網友在 台灣可樂娜跨平台基地 - Corona SDK 上詢問 Corona SDK 中 table listener 與 function listener 差別。

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

local rect1 = display.newRect( 20, 20, 50, 50 )
rect1.name = "Rect1"

local rect2 = display.newRect( 100, 20, 50, 50 )
rect2.name = "Rect2"

local function onTouch1(self, event)
print(self.name)
end

local function onTouch2(event)
local self = event.target
print(self.name)
end

rect1.touch = onTouch1
rect1:addEventListener("touch", rect1 )

rect2:addEventListener("touch", onTouch2 )


以上沒有限定一定要如何宣告,端看你需要函式幫你做什麼而定。

同理下面兩個函式宣告是同等的:

function rect1:touch(event)
print(self.name)
end

rect1.touch = function(self, event)
print(self.name)
end
rect1:addEventListener("touch", rect1 )


可以看出「.」與「:」的差別了嗎?

最後一個範例:


local object = {name='Corona'}

-- 這是一般 table function 宣告方法
function object:sayHaha()
print(self.name..":Haha...")
end

object:sayHaha()
-- output: Corona:Haha...

object.sayHelo = function(self)
print(self.name..":Hello.")
end

object:sayHelo()
-- output: Corona:Hello.

-- 而不是
object.sayHelo()
-- output error self is nil

object.say = function(string)
print(string)
end

object.say("Lua is fun.")
-- output: Lua is fun.

-- 而不是
object:say("Lua is fun.")
-- 因為:的關係第一個屬性會被帶入 object 所以 output: table: 0x10d01c490

Read More...

May 9, 2013

[Mac app] 開啟 Mac OSX 中自帶的 Color Picker 並加上 HexColorPicker 功能

參考出處:Mac — Adding Hex Color Picker to Color Picker

Mac app store 上有很多 Color Picker app,差不多 98% 都是需要付費,而這個小工具恰恰是開發中不可缺少一個東西。其實 Mac OSX 中就有自帶一個 ColorPicker,秉持著 DIY 的精神,用幾個小步驟就可以組合出顯示 Hex 色碼的 ColorPicker.app。

Mac 系統需求:10.4 and up

開啟  應用程式 / 工具程式 / AppleScript 編寫程式.app

編輯視窗中寫入:
choose color


接著儲存為 「ColorPicker.app」檔案格式選擇「應用程式」。



執行剛剛完成的 ColorPicker.app ,基本的 Mac 自帶顏色選擇器小工具就完成了。

接下來為了讓它更符合開發所需,必須要能顯示十六進位的網頁用色碼,所以要加裝一個小工具:Hex Color Picker (請抱持著感恩的心,感謝作者的分享)

下載你所需要的版本後解壓會看到 HexColorPicker.colorPicker
接著打開 Finder 的下拉式功能表 / 前往 / 前往檔案夾
鍵入文字:

~/Library

Finder 會開啟 使用者 / your name / 資源庫 檔案夾,將 HexColorPicker.colorPicker 拖曳到 ColorPickers 檔案夾中(無此檔案夾的話請自行建立)。再執行剛剛做好的 ColorPicker.app,就可以看到 hex color code 已經內建完成。


最後,因為 AppleScript 製作出的 app icon 實在太一般,怎麼樣也要多花個三分鐘將它改頭換面一番。


先求救 Google 大神,請它賜給你一個漂亮的 icon 圖片(這段請隨意)
挑一個順眼的圖片後,到免費的 image to icon 格式轉檔網站:


上傳你挑選好的圖片點選 convert ,完成後下載 Mac OSX icon .icns

最後一個步驟,打開 Finder ,找到你剛剛做好的 ColorPicker.app 點選滑鼠右鍵 / 簡介
將圖片拖曳到如下圖紅色箭頭所標小圖上,置換 icon 就是這麼簡單。

完成!



Read More...

Apr 29, 2013

[AIR] JoSi FXGtoLayout

JoSi FXGtoLayout

v0.3.0, Adobe AIR 3 runtime

這個又是一個 "就是" 系列懶人小工具,主要是針對 Adobe fxg 格式做分析轉成 Mobile 開發用的視圖程式碼,加速畫面配置使用。

為什麼會製作這個工具,原因主要是本人在使用的 Corona SDK 與 Titanium SDK 都沒有好用的視覺化編輯工具。一般設計師產出 layout 檔會使用 PhotoShop 來製作,在不多花錢的原則下,畫面對齊的基準就是其輸出的 fxg 資料做對應,如果要一筆一筆將資料鍵入,做久也是會膩的,所以花了點時間將這個工具做出來...

不過目前版本僅支援 Corona SDK 格式輸出。



目前版本 0.3.0 feature:
  1. 拖曳並放置 fxg 檔案後,轉換的文字會直接貼到剪貼簿。
  2. 產生之物件名稱以 d:userLabel 為主(即 PhotoShop 圖層名稱),所以請注意命名。
  3. 僅支援 Corona SDK 格式輸出。
  4. 僅支援 fxg <<BitmapImage /> 標籤,PhotoShop and Flash 輸出皆可使用,差別是 Flash 會採用 newImage。
  5. 先這樣囉!

輸出之程式碼範例:(輸出 by Photoshop) 

----------------------------------------------------------------------
-- JoSiFXGtoLayout
-- Author:Erin Lin
-- erinylin.blogspot.com
-- Copyright (c) 2013 Erin Lin( Yu-Shan Lin )
-- File Name:file:///---/menu.fxg
----------------------------------------------------------------------
local function moveTo(target, x, y)
target:setReferencePoint(display.TopLeftReferencePoint);
target.x=x; target.y=y
end

local _imgPath='menu.assets/images/'

local bg_ = display.newImageRect( _imgPath..'bg1_0.png', 640, 960 )
moveTo( bg_, 0, 0 )
group:insert( bg_ )

local bg_ = display.newImageRect( _imgPath..'bg2_1.png', 640, 960 )
moveTo( bg_, 0, 0 )
group:insert( bg_ )

local logo = display.newImageRect( _imgPath..'logo_2.png', 586, 925 )
moveTo( logo, 17, 0 )
group:insert( logo )

local btn_stage = display.newImageRect( _imgPath..'btn_stage_4.png', 184, 184 )
moveTo( btn_stage, 199, 578 )
group:insert( btn_stage )

local btn_option = display.newImageRect( _imgPath..'btn_option_6.png', 134, 134 )
moveTo( btn_option, 372, 720 )
group:insert( btn_option )

local btn_ta = display.newImageRect( _imgPath..'btn_ta_8.png', 161, 160 )
moveTo( btn_ta, 26, 682 )
group:insert( btn_ta )

local btn_score = display.newImageRect( _imgPath..'btn_score_10.png', 162, 162 )
moveTo( btn_score, 491, 612 )
group:insert( btn_score )

將產生的程式碼直接 ctrl-p or command-p 到 Corona SDK 的 storyboard template 之 scene:createScene function 內即可,當然前提是 fxg 輸出時的 assets 檔案夾記得 copy 到工作環境下。
Read More...

Jan 13, 2013

[AIR] JoSiResize - Mobile 開發小工具 0.7.0



目前版本 0.7.0 feature:
  1. 修正批次輸出檔名錯置的 bug
下載位置相同,完畢!
Read More...

Aug 11, 2012

[Tip] 在 MBP-Retina 中完美顯示 Flash Builder and Titanium Studio

前天不小心入手了一台 Macbook pro retina(真的是不小心),畫面的確是美得不像話,但是...在常用的 Titanium Studio 與 Flash Builder 都是一片糊糊的世界(好朦朧啊...)

忍受了半天一度後悔買了它,不過...還好天無絕人之路!!!

由於 Titanium Studio 與 Flash Builder 都是以 eclipse 為 base,終於在 eclipse 官網的 bug 清單中找到了完美解答!!

出處:https://bugs.eclipse.org/bugs/show_bug.cgi?id=382972

  1. 找到 Application 中 Flash Builder or TitaniumStudio .app 檔後按滑鼠右鍵點選「顯示套件內容」。
  2. 利用文字編輯 Contents / info.plist。
  3. 在 info.plist 文件最下面的這兩段上方
    </dict>
    </plist>
    加上:
    
    <key>NSHighResolutionCapable</key>
    <true/>
    
    
  4. 最後將 TitaniumStudio.app(or Flash Builder.app) 直接複製一份 ~ copy.app 將原先的 .app 整包刪掉,再把 ~ copy.app 改回 .app 即可。
  5. 重新開啓 .app
恭喜你...脫離了朦朧的世界了...

Edit 0813:
經朋友測試 Flash CS6 的界面部分也適用(並不是全部支援)
Read More...

Aug 9, 2012

[Flex] Optilink雲端報價系統

這個報價系統雖然是兩三年前的作品,一年前應客戶要求更新並改版到 v2.5,目前線上說明書也趨近完備,所以在這邊分享一下。


Optilink雲端報價系統線上說明書:
http://optiland.asia/help/index.html

相關文章:
[作品]Flex 3.4 + PureMVC 的企業級 RIA 應用 Read More...

Aug 1, 2012

[AIR] JoSiResize - Mobile 開發小工具

JoSiResize

v0.6.0,Adobe AIR 3 runtime

之前開發 tool app 的時候並沒有很深刻的體認到圖片素材的 resize 是一個很麻煩的事情...畢竟圖片使用量並不大,等到開發遊戲類的 app 才發現光處理不同螢幕尺寸的圖片素材是一個相當折磨人的工作。

因此 JoSiResize app 誕生了~~~原理是採用最小 scale 長寬比例不變的方式進行放大縮小。使用方法非常簡單,設定好變更的尺寸,接下來,將需要處理的圖片檔案全選直接拖曳到視窗內,畫面即會跳出預備儲存的檔案夾選擇畫面,確認後即開始轉檔。


目前版本 0.6.0 feature:
  1. 提供 iPhone retina, iPhone & iPod non-retina, iPad non-retina, iPad retina, Droid, Nexus One, HTC Sensation, Galaxy Tab 7, Galaxy Tab 10.1, Kindle fire and Nook color 相關手持裝置尺寸選擇。
  2. 可輸入輸出之檔名後綴文字,如 iPhone Retina 圖片素材檔名需加上 @2x。
  3. 拖曳檔案格式僅支援 png, jpg。
  4. 先這樣囉!

如果喜歡這個 tool 的朋友,請麻煩點一下本網站的廣告支持一下喔~~^^ [ Download it! ]
安裝前請先下載安裝  Adobe AIR Runtime
Read More...

Jul 19, 2012

[android]舊瓶老酒 Star Joker plus



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


玩法請看:[iPhone] Star Joker plus-Video Poker game Read More...

Apr 13, 2012

[Titanium Mobile] Ti.Meow 即時預覽模組



今天是十三號星期五怎麼樣也要來貼一篇...

本專案原理參考自 dbankier/TiShadow 。目前版本功能僅提供瀏覽器鍵入程式片段傳送至包含 Ti.Meow Module 的 Titanium Mobile app 之 Android 或 iOS 手持裝置做即時預覽。操作影片拍攝不易,就請麻煩看一下照片想像一下吧...XD

dbankier 的 TiShadow 相當完整,所以有興趣的朋友可以自行去參考。會製作這個專案僅僅為學習使用 Node.js,在不採用其他 open source 的外掛模組下,也撇除因 Android 瀏覽器版本不支援 HTML5 WebSocket,就是以最簡單的連接方式做即時更新。


系統需求:Node.js (測試版本為 v0.7.7-pre)
使用說明與原始碼請連結至 erinlin.github
Read More...

Feb 16, 2012

[Titanium Mobile] Webview canGoBack returning false

剛好 Titanium Mobile Forum 上有人詢問了有關 webview goBack的問題

問題是當 WebView 第一頁為 local web page or html 時點選網頁上的超連結到下個頁面,這時用 button click 去判定 WebView 的 canGoBack 來處理 WebView.goBack() or win.close() 如下:

if(webview.canGoBack()){
webview.goBack();
}
else{
win.close();
}

這時候會收到回傳 false 造成 win.close() 而無法利用 WebView.goBack() 回到原始的頁面...

解法很間單,只需要在 WebView 初始時設定轉址至初始的 local web page 即可解決。

var webview = Ti.UI.createWebView({
html: 'html><head><meta http-equiv="refresh" content="0;url=index.html" /></head><body></body></html>'
});

Read More...