從J2ME學Symbian遊戲開發(二)
上一節我們講到了“按鍵事件”在J2me和Symbian中的類似處理過程,其實這些東西都是一個遊戲裡必須做的處理,無論是在任何平臺。
那麼在手機遊戲裡,選單也是必不可少的。而在Symbian裡是不分什麼高階UI和低階UI的,只有系統控制元件和自定義控制元件之分。
那麼介面互動部分我們一樣可以和J2ME做個對比:
J2ME裡的高階UI+CommandAction() Symbian裡的系統控制元件+HandleCommandL()
J2ME裡的低階UI+KeyPressed() Symbian裡的自定義控制元件+OfferKeyEventL()
(三)系統選單
和J2ME裡不一樣的是,Symbian裡的系統控制元件是通過在資原始檔中編輯,在原始碼之外獨立地指定應用程式的可見控制元件。在資源中可以定義的系統控制元件包括選單、對話方塊、列表等。
應用程式框架在應用程式啟動時會開啟資原始檔,並根據在.rsg中建立的資源識別符號,根據需要把各個資源載入到C++程式碼中。
這樣的架構有一定的好處就是:資原始檔和C++原始檔之間可以共享資原始檔中定義的資料。
通常在一個字尾名為.hrh的檔案中定義命令選單中使用的識別符號。
如下例項摘自SDK自帶的Graphics例項:
#ifndef __GRAPHICS_HRH__
#define __GRAPHICS_HRH__
// Graphics enumerate command codes
enum TGraphicsIds
{
EGaphicsNoOffScreenDemo = 1,
EGaphicsOffScreenDemo,
EGaphicsStopDemo
};
#endif // __GRAPHICS_HRH__
可見資原始檔的處理使用的是C的前處理器,以避免多重包含。而.hrh檔案也只能包含emnu和預處理語句,其它的C++語法都會導致資源編輯器編輯失敗,這點需要特別注意。
下面是和這個.hrh檔案相對應的.rss檔案的內容:
NAME GRAP
#include
#include
#include
#include "Graphics.hrh"
// ---------------------------------------------------------
//
// Define the resource file signature
// This resource should be empty.
//
// ---------------------------------------------------------
//
RESOURCE RSS_SIGNATURE
{
}
// ---------------------------------------------------------
//
// Default Document Name
//
// ---------------------------------------------------------
//
RESOURCE TBUF
{
buf="";
}
// ---------------------------------------------------------
//
// Define default menu and CBA key.
//
// ---------------------------------------------------------
//
RESOURCE EIK_APP_INFO
{
menubar = r_graphics_menubar;
cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
}
// ---------------------------------------------------------
//
// r_graphics_menubar
// Menubar for Graphics example
//
// ---------------------------------------------------------
//
RESOURCE MENU_BAR r_graphics_menubar
{
titles =
{
MENU_TITLE
{
menu_pane = r_graphics_menu;
}
};
}
// ---------------------------------------------------------
//
// r_graphics_menu
// Menu for "Options"
//
// ---------------------------------------------------------
//
RESOURCE MENU_PANE r_graphics_menu
{
items =
{
MENU_ITEM
{
command = EGaphicsNoOffScreenDemo;
txt = "No off screen bmp";
},
MENU_ITEM
{
command = EGaphicsOffScreenDemo;
txt = "Off screen bmp";
},
MENU_ITEM
{
command = EGaphicsStopDemo;
txt = "Stop Animation";
},
MENU_ITEM
{
command = EAknSoftkeyExit;
txt = "Exit";
}
};
}
下面對這個檔案的內容做一些說明:
RESOURCE RSS_SIGNATURE
{
}
RESOURCE TBUF
{
buf="";
}
這兩個一般情況下是不允許做改動的,前者是資源的簽名,後者是預設文件名。
===================================================================================
RESOURCE EIK_APP_INFO
{
menubar = r_graphics_menubar;
cba = R_AVKON_SOFTKEYS_OPTIONS_EXIT;
}
用來標識選單和快捷鍵的ID,就是給選單和相應的快捷鍵起個名字而已,以便於程式後面的使用。
===================================================================================
RESOURCE MENU_PANE r_graphics_menu
{
items =
{
MENU_ITEM
{
command = EGaphicsNoOffScreenDemo;
txt = "No off screen bmp";
},
MENU_ITEM
{
command = EGaphicsOffScreenDemo;
txt = "Off screen bmp";
},
MENU_ITEM
{
command = EGaphicsStopDemo;
txt = "Stop Animation";
},
MENU_ITEM
{
command = EAknSoftkeyExit;
txt = "Exit";
}
};
}
這個才是實際定義的選單的真正內容,也就是我們能在介面上看得到的Menu_Item的標識和內容。
===================================================================================
OK了,資源定義已經完成,下面只需要在Ui類的HandleCommandL()方法中針對相應的Command做相應的處理即可。
void CGraphicsAppUi::HandleCommandL(TInt aCommand)
{
switch(aCommand)
{
case EEikCmdExit:
case EAknSoftkeyExit:
Exit();
break;
case EGaphicsNoOffScreenDemo:
iAppView->StartNoOffScreenDemo();
break;
case EGaphicsOffScreenDemo:
iAppView->StartOffScreenDemo();
break;
case EGaphicsStopDemo:
iAppView->StopDemo();
break;
default:
User::Panic (_L("Graphics"), EGraphicsBasicUi);
break;
}
}
現在你也學了和J2ME裡的高階UI響應相對應的Symbian裡的處理方法,現在和使用者互動應該沒問題了。無論是按鍵事件的OfferKeyEventL()方法、還是選單命令的HandleCommandL()方法。
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=818930
相關文章
- 從J2ME學Symbian遊戲開發(一)遊戲開發
- J2ME遊戲開發例項講解遊戲開發
- j2me遊戲開發例項講解 (轉)遊戲開發
- J2ME遊戲開發例項講解(上)(轉)遊戲開發
- J2ME遊戲開發例項講解(下)(轉)遊戲開發
- 基於J2ME的遊戲開發總結和感想薦遊戲開發
- 從學生到遊戲開發者: 我學到的五件事遊戲開發
- [轉帖]J2ME學習札記1
- [轉帖]J2ME學習札記2
- [轉帖]J2ME學習札記3
- 初學J2ME的一點經驗
- Symbian作業系統作業系統
- Symbian 資原始檔解析
- 從0開始學遊戲開發-蔡能-極客時間遊戲開發
- 知物由學|遊戲開發者如何從容應對Unity手遊風險?遊戲開發Unity
- Symbian 學習日誌(四. NewL 和 NewLC) (轉的總結)
- Symbian中操作ini檔案
- 從零開始學Electron筆記(二)筆記
- 從零單排學Redis【鉑金二】Redis
- 不懂物理的前端不是好的遊戲開發者(二)—— 物理引擎的學習之路前端遊戲開發
- 從零學腳手架(二)---初識webpackWeb
- 從學生到程式設計師(二) (轉)程式設計師
- Symbian中ini檔案的使用
- 貧窮的原罪 從蘇芬戰爭學到的獨立遊戲開發經驗遊戲開發
- Vue原始碼學習(二)——從巨集觀看VueVue原始碼
- 我從Typoro中學到的Clipboard妙用(二).md
- Programming Java 2 Micro Edition for Symbian OSJava
- 《BREW進階與精通——3G移動增值業務的運營、定製與開發》連載之8—Symbian,WindowsMobile,Palm,Linux,J2ME,BREWWindowsLinux
- 筆記:《遊戲開發物理學》筆記遊戲開發
- 動手學深度學習(二)——多層感知機(從零開始)深度學習
- 想學習Python不知從哪開始,來看我和同事通過遊戲開發學習PythonPython遊戲開發
- python Scrapy 從零開始學習筆記(二)Python筆記
- ?從零開始學習webpack系列二(配置檔案)Web
- PHP從零開始系列二(學習筆記):序言PHP筆記
- 從零開始的Unity個人學習日記(二)Unity
- 從逃離到成為遊戲開發,40歲了我才學會程式設計遊戲開發程式設計
- 從實踐中學習Oracle DBA-學習筆記 第二期(第二版)Oracle筆記
- 遊戲開發完整學習路線遊戲開發