上一节我们讲到了“按键事件”在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::Panic (_L("Graphics"), EGraphicsBasicUi);
break;
}
}
现在你也学了和J2ME里的高级UI响应相对应的Symbian里的处理方法,现在和用户交互应该没问题了。无论是按键事件的OfferKeyEventL()方法、还是菜单命令的HandleCommandL()方法。
分享到:
相关推荐
在2000年代初,J2ME是手机游戏开发的主要平台,尤其在非智能手机(如诺基亚的Symbian系统手机)上广泛应用。本篇将深入探讨如何使用J2ME进行手机游戏开发。 ### 1. J2ME架构与配置 J2ME由两部分构成:K Virtual ...
通过对这些源码的学习,开发者不仅可以提升J2ME编程技能,还可以了解到手机游戏开发的基本流程和技巧,为未来的项目积累宝贵经验。同时,对于想要进入移动游戏开发领域的新人来说,这是一个极好的实践案例。
在2000年代中期,J2ME是手机游戏开发的主流技术之一,尤其在诺基亚Symbian系统和其他非智能平台上广泛使用。本篇将深入探讨J2ME手机游戏的开发过程和关键知识点。 1. **J2ME架构** J2ME由配置(Configurations)和...
5. **游戏开发**:由于J2ME的广泛适用性,很多手机游戏都是用它来开发的。游戏开发涉及动画处理、碰撞检测、音效集成等技术。例如,使用LWUIT( Lightweight UI Toolkit)库可以创建更丰富的用户界面和游戏元素。 6...
《J2ME版超级玛丽:移动游戏开发的里程碑》 J2ME,全称为Java Micro Edition,是Java平台的一个子集,主要用于嵌入式设备和移动设备上的应用程序开发,包括智能手机和平板电脑。在2000年代初期,随着诺基亚等品牌的...
通过深入研究"J2ME 合金弹头S60源代码",开发者不仅可以掌握移动游戏开发的基本技能,还能了解到如何在资源受限的环境中实现高性能的游戏体验。这不仅是一次技术的探索,也是对经典游戏致敬的方式。
总的来说,Java手机游戏开发涉及到的技术点包括Java语言基础、JVM原理、跨平台特性、手机操作系统平台的理解以及J2ME框架的使用。学习Java手机游戏开发不仅需要掌握编程技术,还需要了解整个游戏开发的流程和各环节...
Canvas类是进行游戏开发的基础,可以绘制图形和处理用户输入。 **网络通信** J2ME通过 Connected Device Configuration (CDC) 和 Foundation Profile 提供网络功能。MIDP 2.0 引入了JSR 118,增强了网络连接能力,...
### Java 2 Micro Edition (J2ME) for Symbian OS 开发指南 #### 标题解析 本书《John Wiley and Sons Programming Java 2 Micro Edition for Symbian OS》主要聚焦于如何使用 Java 2 Micro Edition (J2ME) 在 ...
通过对这两个版本的源代码进行学习和比较,我们可以了解到不同平台下J2ME应用程序的适配策略,同时也能深入理解Java游戏开发的基本原理和技巧。这对于提升Java编程技能,尤其是移动开发方向的能力,是非常有价值的。
如Eclipse集成开发环境(IDE)搭配EclipseME插件,用于J2ME(Java 2 Micro Edition)开发,或者SUN WTK(Sun Wireless Toolkit)和Symbian SDK,这些都是针对移动设备的游戏开发工具包。 实验室功能需求主要涉及...
【JAVA手机游戏开发】\n\nJAVA手机游戏开发主要涵盖了从策划、美工、程序到测试的全过程。作为IT技术讲座的重点,程序开发是讲解的核心,尤其是针对Java这门广泛应用于手机游戏开发的语言。Java因其跨平台性、面向...
【gameloft(智乐)面试题】是一个与游戏开发公司Gameloft相关的面试资源集合,主要涵盖了Symbian和J2ME两个平台的技术问题。Symbian是曾经流行的智能手机操作系统,而J2ME(Java Micro Edition)是用于开发移动设备、...
6. 游戏设计的参考文献:游戏设计的参考文献包括杨大生、陈忠的《基于Symbian平台飞机大战游戏设计》、谢海军的《基于Java的手机游戏引擎的研究及实现》、马鹏强的《基于J2ME的手机五子棋游戏设计与实现》等。...
总的来说,《ColorLinez手机版》展示了Java在移动游戏开发中的应用,以及如何适应触摸屏设备进行游戏设计。对于想要了解J2ME开发或者对手机游戏编程感兴趣的人来说,这款游戏提供了一个实践和学习的实例。同时,它也...
通过研究这些源代码,开发者可以学习到如何在J2ME环境下开发移动游戏,理解游戏开发的基本流程,同时也能深入研究移动设备上的性能优化和用户体验设计。对于希望进入移动游戏开发领域的程序员来说,这是一个很好的...