从J2ME学Symbian游戏开发(二)

原创 2006年06月21日 16:46:00

        上一节我们讲到了“按键事件”在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()方法。

从J2ME学Symbian游戏开发(二)

  上一节我们讲到了“按键事件”在J2me和Symbian中的类似处理过程,其实这些东西都是一个游戏里必须做的处理,无论是在任何平...
  • zjsjava
  • zjsjava
  • 2007年09月02日 13:23
  • 643

从J2ME学Symbian游戏开发(二)

        上一节我们讲到了“按键事件”在J2me和Symbian中的类似处理过程,其实这些东西都是一个游戏里必须做的处理,无论是在任何平台。              那么在手机游戏里,菜单也是...
  • itkbase
  • itkbase
  • 2008年01月03日 09:28
  • 126

从j2me学symbian游戏开发(一)

网页内容已不存在。
  • Labber
  • Labber
  • 2008年03月14日 02:48
  • 138

从J2ME学Symbian游戏开发(一)

        相信在手机游戏开发这块是J2ME的天下,一是因为它简单容易学,二是因为关于它的资料多。        而J2ME毕竟是运行在Symbian OS的内核之上的,速度慢也是必然的了,更不能...
  • dongfengsun
  • dongfengsun
  • 2006年06月21日 15:49
  • 1974

从J2ME学Symbian游戏开发(一)

        相信在手机游戏开发这块是J2ME的天下,一是因为它简单容易学,二是因为关于它的资料多。        而J2ME毕竟是运行在Symbian OS的内核之上的,速度慢也是必然的了,更不能...
  • itkbase
  • itkbase
  • 2008年01月03日 09:28
  • 125

从J2ME学Symbian游戏开发(一)

 相信在手机游戏开发这块是J2ME的天下,一是因为它简单容易学,二是因为关于它的资料多。        而J2ME毕竟是运行在Symbian OS的内核之上的,速度慢也是必然的了,更不能忍受的是它把很...
  • zjsjava
  • zjsjava
  • 2007年09月02日 13:21
  • 1691

学习Symbian的开始

需求一台电脑,相当快的处理器(大于1.5GHz),512M甚至更大的内存,最少有2G大小可用空间的硬盘存储,操作系统是Windows 2000,XP 或者Vista。开发软件来编译程序,编写程序。即I...
  • mmchsusan
  • mmchsusan
  • 2007年07月24日 23:20
  • 601

IT学吧C++俄罗斯方块游戏开发

下载地址:http://xxitnet.com/thread-145-1-1.html 更多资源加群:377215114
  • jianyue178826
  • jianyue178826
  • 2014年06月23日 11:58
  • 1001

给自学者的建议:想学游戏编程开发,你需要做什么?

声明:只是个人见解!!! PS 2013/03/11 17:02 Yellow Lee早上在百度游戏开发贴吧,看到里面好多人很迷惘,加入置 顶的群,聊了一下,发现迷惘的人更多,做点事吧...
  • yellowvivi
  • yellowvivi
  • 2013年03月11日 18:10
  • 10703

J2ME中文教程之J2ME技术概述

随着移动通信的突飞猛进,移动开发这个新鲜的字眼慢慢成为开发者关注的热点。在网上进行的最近一份调查显示,有24.34%的受访者涉足嵌入式/移动设备应用开发,这个数字可能略高于实际的比例,但也足可说明嵌入...
  • lpy123456
  • lpy123456
  • 2007年01月16日 12:37
  • 676
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从J2ME学Symbian游戏开发(二)
举报原因:
原因补充:

(最多只允许输入30个字)