從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
相關文章
- 從0開始學遊戲開發-蔡能-極客時間遊戲開發
- 漸凍人馮錦源的“遊戲人生”:從翻譯到開發遊戲,學無止境開發遊戲
- 知物由學|遊戲開發者如何從容應對Unity手遊風險?遊戲開發Unity
- 二次元考究:從開發者角度理解二次元遊戲的定義二次元遊戲
- 遊戲開發入門(一)遊戲開發概述遊戲開發
- 想學習Python不知從哪開始,來看我和同事通過遊戲開發學習PythonPython遊戲開發
- 從零開始:用REACT寫一個格鬥遊戲(二)React遊戲
- NFT遊戲系統開發/遊戲開發技術遊戲開發
- 使用Xamarin開發移動應用示例——數獨遊戲(二)建立遊戲介面遊戲
- 新手開發者如何著手遊戲設計? 從解剖桌遊開始!遊戲設計
- 從0開始用python寫一個命令列小遊戲(二)Python命令列遊戲
- 手遊開發者談能從投幣街機遊戲的設計中學到什麼遊戲
- 遊戲開發流程遊戲開發
- Supercell開發分享:從創意到最佳遊戲設計遊戲設計
- 從做遊戲到開發VR,FPS之父的“彪悍”人生遊戲VR
- 不懂物理的前端不是好的遊戲開發者(二)—— 物理引擎的學習之路前端遊戲開發
- 什麼才是二次元遊戲?二次元遊戲立項與開發淺談二次元遊戲
- 格鬥遊戲修羅場:鬼人和他的遊戲開發哲學遊戲開發
- 從零開始學React:二檔 React生命週期以及元件開發React元件
- Python遊戲開發工程師的起步,幾款遊戲開發案例Python遊戲開發工程師
- 基於c++的排雷小遊戲二次開發C++遊戲
- HTML5遊戲開發(二):使用TypeScript編寫程式碼HTML遊戲開發TypeScript
- 貧窮的原罪 從蘇芬戰爭學到的獨立遊戲開發經驗遊戲開發
- 從逃離到成為遊戲開發,40歲了我才學會程式設計遊戲開發程式設計
- 中國大學生遊戲開發聯盟成立,首屆中國大學生遊戲開發創作大賽報名開始遊戲開發
- 遊戲開發經驗談(二):對戰類全球服遊戲的設計與實現遊戲開發
- pygame開發小遊戲GAM遊戲
- 【IDL】開發遊戲"2048"開發遊戲
- 遊戲開發者依然能從這7款經典街機遊戲中汲取經驗遊戲開發
- 悠遊世界/遊戲/系統技術開發/悠遊世界養成遊戲開發解析遊戲開發
- 國外從業者分享:獨立開發者怎樣宣發遊戲?遊戲
- 遊戲開發原理——手遊開發團隊與成本遊戲開發
- 從零開始學Electron筆記(二)筆記
- Unity遊戲示例來了,用Unity開源遊戲資源做遊戲,遊戲開發不再難!Unity遊戲開發
- 從VR遊戲開發到綜合遊戲研發商,「Ifgames」將持續擴充內容產品線VR遊戲開發GAM
- java飛機大戰小遊戲作業二次開發Java遊戲
- go語言遊戲服務端開發(二)——網路通訊Go遊戲服務端
- “休閒小遊戲” 和 “二次元遊戲”,誰是開發者的心動款?遊戲二次元
- 2020:從遊戲產業的開春回暖看未來發展遊戲產業