2011年6月25日 星期六

Android程式設計 - 多語系介面

Android支援多語系介面,應用程式只要提供不同語系介面所需的文字字串資源,Android就會自動依裝置所使用的語系,調用對應的資源檔,相當方便。
Android手機介面語系設定
Android手機可參考以下說明設定操作介面之語系:
1. 執行Setting (設定)
2. 選擇Language & keyboard (語言與鍵盤) 項目
3. 點選Select locale (選取語言)
4. 點選所要使用的語系
 res/values-XX子目錄
應用程式預設會使用儲存在res/values目錄下的文字字串資源,當我們需要其它語系介面,只要在res下建立語系所對應的子目錄,並建立該語系的文字字串資源即可。例如:values-zh-rTW子目錄為繁體中文資源
假設應用程式預設之strings.xml內容如為:
<resources>
<string name="hello">Hello World, MainActivity!</string>
<string name="app_name">demo of multi-language UI</string>
<string name="title">Change to Chinese UI</string>
</resources>
我們可在res目錄下建立values-zh-rTW子目錄,並加入以下的strings.xml檔
<resources>
<string name="hello">歡迎使用Android平台</string>
<string name="app_name">多語言介面功能展示</string>
<string name="title">使用英文介面</string>
</resources>
一旦Android裝置設定使用繁體中文語系,應用程式執行時就會自動取用繁體中文之資源檔內容。

動態變換介面語系
程式中可透過Configuration物件來變更Android裝置設定,其中locale屬性值表示所要使用的語系,作法如下:
    Resources res = getResources();
    Configuration conf = res.getConfiguration();
    if (btnUI.getText().equals("使用英文介面"))
        conf.locale = Locale.ENGLISH;
    else
        conf.locale = Locale.TAIWAN;
    res.updateConfiguration(conf, null);
    setContentView(R.layout.main);
有一點要注意,使用setContentView()重設版面後,介面元件的資料會回復為初始值,而且先前為介面元件所註冊的事件監聽器資訊也會被清除,所以必須為介面元件重新註冊事件監聽器,不然你會發現所有介面元件的監聽器似乎都失靈了。

2011年6月12日 星期日

Android程式設計 - 程式偵錯(2)

Delvik Debug Monitor
Delvik debug monitorAndroid SDK提供的一項除錯工具,執行Android SDKtools子目錄下ddms.bat即可啟動它。
DDMS在中可檢視模擬器狀態,包括CPU loadMemory usageProccess狀態、應用程式狀態、Logcat內容等,此外Device子功能表之Screen capture」可截取模擬器畫面;「File Explorer…則可開啟檔案總管,管理模擬器之檔案。
除了個別運行DDMS外,ADT已整合DDMSEclipse,我們可直接由EclipseWindow/Open Perspective子功能表之DDMS命令,切換到DDMS作業面版。

Android程式設計 - 程式偵錯

ADT已將Android SDK所提供的基本的除錯工具 (包括ADB、DDMS及Logcat)整合到Eclipse環境。
在Eclipse整合環境中可使用二種模式來測試程式:一般模式(Run)及除錯模式(Debug)。我們可由Run功能表來選擇應用程式之執行模式。
顯示程式碼行號
1.      點選功能表『Window/Preferences』開啟「Preferences」對話視窗
2.      由「General/Editors/Text Editors」節點的設定項目中勾選「Show line numbers」。
或由編輯區前端訊息區快顯功能表中選擇「Show Line Numbers」。
設定中斷點
「中斷點」顧名思義就是用來暫停程式執行,當程式執行到中斷點之敘述時就會暫停。通常我們會先研判程式可能發生問題的程式區塊,並在該程式區塊前設置中斷點,然後在程式中斷暫停後,以單步執行、查看變數內容等方式來檢視程式的執行狀態,驗證程式碼的每一敘述執行結果是否與我們預期結果相同。
我們可直接在程式敘述行號上或前端灰色區域之快顯功能表命令「Toggle Breakpoint」來新增中斷點或移除先前加入的中斷點,或按Ctrl-Shift-B也可設定/清除目前游標所在敘述之中斷點。
對於已設置的中斷點則可由快顯功能表命令「Disable Breakpoint」暫時停用,對於被暫停使用的中斷點則可由快顯功能表命令「Enable Breakpoint」重新啟用。
追踨(Trace)程式
除錯檢視模式下,可利用追踨程式功能來協助我們檢視程式執行之細部流程,以檢驗流程是否異常。
繼續執行(Resume)由程式中斷處繼續執行程式。F8
暫停執行(Suspend)中斷程式執行。
中止執行(Terminate)中止程式執行。Ctrl-F2
單步執行(Step Into)繼續執行一行敘述,如果是函式呼叫敘述,會進入函式程式碼追踨細部流程。 F5
單程序執行(Step Over)繼續執行一行敘述,如果是函式呼叫敘述,會把整個函式程式碼視為單一敘述,一次執行完畢。F6
執行完目前函式(Step Return)執行完目前函式所有敘述,返回函式呼叫的下一行敘述。F7

2011年6月10日 星期五

Android程式設計 - Context menu

Context menu是跟某個具體的view綁定在一起,當使用者在該view上按幾秒後就會自動顯示。程式中必須使用registerForContextMenu()方法來為view註冊Context menu。
例如希望在一個id為main的佈局版面上提供Context menu,可在Activity之onCreate()方法中使用registerForContextMenu()方法來為該佈局物件註冊Context menu。

public void onCreate(Bundle savedInstanceState) {
...
LinearLayout lv = LinearLayout)findViewById(R.id.main);
registerForContextMenu(lv);
}

接著我們需要為Context menu建構功能表項目內容及實作功能表項目作業程式碼,參照下列程序,為Activity建立onCreateContextMenu()onContextItemSelected ()程式框架:
1. 由Source功能表點選「Override/Implement Methods...」功能表項目。
2. 由對話視窗之「Select methods to override or implements:」清單中勾選「onContextItemSelected()」及「onCreateContextMenu()」項目,按下「OK」按鈕,ADT就會建立所需的程式框架。


Options menu的onCreateOptionsMenu()只需調用乙次,而Context menu則是每次顯示時都會調用onCreateContextMenu()。程式中同樣可使用add()方法將功能表項目加到Context menu中;或使用addSubMenu()方法加入子功能表。
Context menu功能表項目不支援圖示,但允許結合核取方塊或圖形選取鈕介面來呈現功能表項目的狀態,所以同樣可以使用以下方法:
setCheckable(true) 在功能表項目上顯示核取方塊。
setCheckable(false) 功能表項目不顯示核取方塊。
setChecked(true) 設定功能表項目之核取方塊為勾選狀態。
setChecked(false) 設定功能表項目之核取方塊為取消勾選狀態。

final int MENU_QUIT = 100;
final int MENU_ABOUT = 101;
final int MENU_AUTHOR = 102;
...
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo menuInfo) {
    // TODO Auto-generated method stub
    super.onCreateContextMenu(menu, v, menuInfo);
    menu.add(0, MENU_QUIT, 0, "結束");
    Menu abtmenu = menu.addSubMenu(0, MENU_ABOUT, 0, "關於...");
    abtmenu.add(0, MENU_AUTHOR, 0, "作者");
    abtmenu.add(0, MENU_PROG, 0, "Android程式");
}
@Override
public boolean onContextItemSelected(MenuItem item) {
    // TODO Auto-generated method stub
    switch (item.getItemId()){
        case MENU_AUTHOR:
            Toast.makeText (MainActivity.this, R.string.author, Toast.LENGTH_SHORT).show();
            break;
        case MENU_PROG:
            Toast.makeText (MainActivity.this, R.string.prog, Toast.LENGTH_SHORT).show();
            break;
        case MENU_QUIT:
            finish();
    }
    return super.onContextItemSelected(item);
}

真實版Angry bird



有創意、有技術、也很辛苦

2011年6月4日 星期六

電腦遊戲設計組進路分析

Flash AS3.0遊戲開發工程師
1.一年以上Flash Action Script 3.0或Java的使用經驗
2.熟悉Object Oriented Programming

Java/Web遊戲開發工程師
1.良好的編程能力,精通Java語言,使用Java編程兩年以上
2.了解資料庫相關技術,會使用至少一種資料庫管理軟體

遊戲開發程式設計師
1.熟悉C/C++程式撰寫
2.熟悉Object Oriented Programming
3.具備閱讀英文技術文件能力
4.對Flash ActionScript有所了解,有Java使用經驗佳
5.熟悉3D圖形演算法、AI演算法、物理演算法、UI設計者尤佳
6.熟悉TCP/IP網路運作架構者更佳

2D美術設計師
1.要求較好的造型能力,色彩計畫能力,具有設計概念
2.能熟練使用Photoshop/illstrator繪圖工具
3.面對問題能溝通解決,有好的理解能力和團隊合作精神
4.需附上作品集

2D場景美術設計師
歷練2-3年以上美術經驗,熟悉2D繪圖軟體、插畫繪製能力、創作力(美感)、表達與理解能力

遊戲3D角色美術設計師
1.熟悉3ds MAX 3D美術設計,有網路遊戲開發經驗佳;
2.素描基礎佳,能以2D繪製出具立體感的繪圖;
3.對動畫有概念,能製作3D角色動畫;

3D景美術設計師
1.三年以上遊戲3D場景設計與製作相關經驗,使用Unreal3開發過最少一個大型專案
2.具備良好素描基底及色彩,光線概念,良好空間感,製作3D及貼圖能力
3.熟photoshop與3Ds Max軟體操作
4.具備一定英文說聽讀寫能力者為佳

UI美術設計師
1.熟悉flash, photoshop等軟體
2.熱愛遊戲, 熟悉MMOG遊戲的操作介面
3.良好的表達與溝通能力

特效美術設計師
1.具備良好素描基礎及色彩、光線觀念
2.能快速將遊戲企劃的敘述轉換成圖像
3.熟悉Particle System操作能力及作用原理
4.熟悉3ds Max操作 (Maya, XSI可)
5.熟悉Phtoshop, Illusion, After Effects操作
6.具英文聽說讀寫能力者佳

參考資料: 樂陞科技http://www.xpec.com