商讯信箱
用户名:
@
vip.it168.com
free.it168.com
udc.it168.com
staff.it168.com
it168.com
密 码:
注册
|
忘记密码
登录
个人用户
经销商
用户名:
密 码:
注册
|
忘记密码
验证码:
看不清?
用户名:
密 码:
注册
|
忘记密码
首页
个人
企业
报价行情
经销商
笔记本
手机
数码影像
MP3
DIY硬件
投影机
家用电脑
商用电脑
办公
驱动
网刊
论坛
资讯
评测
下载
技术开发
信息化
服务器
存储
网络
通信
安全
GPS导航
无线电
数字家电
家庭组网
打印
扫描
学院
软件
登陆
|
注册
信箱
E杂志
您的位置:
首页
>
技术频道
> 正文
从J2ME学Symbian游戏开发(二)
[
收藏此页
] [
打印
]
作者:
佚名
2008-02-22
内容导航:
从J2ME学Symbian游戏开发(二)
第1页:
从J2ME学Symbian游戏开发(二)
【IT168 技术文档】
上一节我们讲到了“按键事件”在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 <eikon.rh>
#include <avkon.rh>
#include <avkon.rsg>
#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:
anic (_L("Graphics"), EGraphicsBasicUi);
break;
}
}
现在你也学了和J2ME里的高级UI响应相对应的Symbian里的处理方法,现在和用户交互应该没问题了。无论是按键事件的OfferKeyEventL()方法、还是菜单命令的HandleCommandL()方法。
1
1
【内容导航】
第1页:
从J2ME学Symbian游戏开发(二)
©版权所有。未经许可,不得转载。
[责任编辑:
李宁
]
进入论坛>>
相关论坛贴
批输入凭证
交货单抬头屏幕字段如何更改为可输入!
批量reverse发票和批量修改
电信行业SOA架构遭遇冷遇
SOA practice is easy or difficult?
发票中付款日期问题
专题推荐
·
拥抱多核计算,提升软件性能
·
移动操作系统之世上最强:Symbian
·
AJAX技术学习专题
·
SQL Server 2005/2008技术专题
·
项目管理的艺术
·
Tomcat技术学习专题
·
Google+开源=??
·
SOA企业应用新专题
热点文章排行
微软企图跨越开源的鸿沟?
决战RIA 谷歌微软谁得Adobe相助?
走向标准 微软欲借IE 8取悦Web开发者?
从开发者角度分析微软Vista SP1的变化
改变形象 微软欲变身敏捷开发典范?
专访潘海东:WIKI模式协作产生价值
化干戈为玉帛 微软与Sun携手互通
耿增强:三驾马车 驱动红旗Linux
从玩具到游戏 看另类项目激励机制
一个糟糕的SOA应用不如不用?
关于皓辰
|
关于IT168
|
合作伙伴
|
广告服务
|
使用条款
|
投稿指南
|
诚聘精英
|
联系我们
|
法律顾问
|
网站地图
|
繁体版
CopyRight 1999-2006 www.it168.com All Right Reserved. 北京皓辰网域网络信息技术有限公司. 版权所有 京ICP证:060528号