从J2ME学Symbian游戏开发(一)

原创 2006年06月21日 15:49:00

        相信在手机游戏开发这块是J2ME的天下,一是因为它简单容易学,二是因为关于它的资料多。

        而J2ME毕竟是运行在Symbian OS的内核之上的,速度慢也是必然的了,更不能忍受的是它把很多与底层的交互封装了起来,并且不提供接口让你访问。

        这对于我这样喜欢刨根问低的人来说,是实在无法忍受的!

        其实真正了解了Symbian OS和相应的Series 60,如果在这个平台上做游戏开发的话,Series 60并不比J2ME高深多少。因为它提供了一个AppArc,同样把一些底层的东西封装了起来,但是至少我们可以有接口可用来访问低层的东西。

       下面我就把最近一段时间的学习总结一下:

(一)关于开发工具

       原本是没有必要写这个的,不过看到网上五花八门的工具配置、工具安装的文章,实在觉得有必要出来澄清一下。

      其实,完全没必要为选择什么IDE来烦恼,无论是Moblie Borland C++、VC、VC.NET、CodeWarrior还是Nokia最近力推的Carbide.C++,他们都存在着这样那样的问题。没有一个是完美的开发工具,而且series的SDK还为每一种开发工具提供了不同的版本,真是感觉有点"光了屁股系裤腰带-----多那么一道子"。IDE只能用来看源代码或者写代码,真正有用的还是SDK下的command命令行,不要怕麻烦,这些往往是最重要的。

       命令也就是常用的那么几个:

       bldmake bldfiles

      abld build wins udeb

      epoc

      makesis

      devices

(二)关于键盘交互

      无论做什么样的游戏,都少不了与用户的交互,而对于手机设备来说。与用户交互的无非是键盘,按键事件是系统事件的一种,一旦设备键盘上的键被按下、按住或释放的时候即会产生按键事件。

     Symbian的Window服务器通过控件栈把按键事件传递到应用程序。然后通过调用控件的OfferKeyEventL()方法把按键事件通知相应的控件。这和我们在J2ME里通过KeyPressed(int keyCode)把相应的按键事件通知相应的Canvas类一样。

     OK,我们现在有了第一个类比的关系:

    Symbian的OfferKeyEventL()        J2ME的KeyPressed(int keyCode)

    当然,Symbian里这个方法还有一些需要特别说明的不同之处。

       Symbian里的控件栈是一个结构,负责维护控件。当有按键事件发生的时候,这个按键事件会从控件栈的顶部依次传递到最底端,直至得到了某个控件的处理。默认情况下,控件是不在栈中的,所以应该使用相应的函数CAknAppUi::AddToStackL()把控件添加到控件栈中,使它能够处理按键事件。

      这和我们的J2ME里不一样,J2ME里KeyPressed(int keyCode)是和相应的Canvas里关联在一起的。试着想象一下,如果从一个From高级UI切换到Canvas的低级UI,是不是需要用Command命令来控制?

      然后就可以通过调用控件的OfferKeyEventL()把按键事件传递给该控件。控件可以自己决定是否处理某个按键事件,如果处理事件,则返回值EKeyWasConsumed,否则返回EKeyWasNotConsumed。按键事件会按次序传递给控件栈中的每个控件,直至其中某个控件返回EKeyWasConsumed或没有剩余控件为止。

      OfferKeyEventL()有两个参数:按键事件(const EKeyEvent& aKeyEvent)、按键类型(TEventCode aType)。前者表明按键是哪一个键等信息,后者则是一个emnu类型,说明按键事件的种类。

      和我们在J2ME里不同的是,J2ME里用三个方法来分别表示Pressed、Released、Repeated。而Symbian里用一个emnu类型的参数来说明按键事件的种类,分别是:EEventKeyDwon、EEventKey、EEventKeyUp。

      用以下代码来做为事例恐怕更能说明问题:

      TKeyReponse CMyControl::OfferKeyEventL(const TKeyEvent& aKeyEvent,TEventCode aType){

                    if(aType == EEventKeyUp){

                                 switch(aKeyEvent.iCode){

                                                case EKeyUpArrow:

                                                         //producing

                                                        return  EKeyWasConsumed;

                                                 case EKeyDownArrow:

                                                        //producing

                                                       return    EKeyWasConsumed;

                                                  default:

                                                        return   EKeyWasNotConsumed;

                                                   }

                                            }

                                 return    EKeyWasNotConsumed;

                       }

J2ME游戏开发的高级优化技巧

为什么要优化?   游戏能够被划分为两种较广泛的类型:实时型和按键驱动型。按键驱动类型的游戏一般在屏幕上显示游戏目前所处的状态,并且等待玩家输入某些按键来驱动游戏继续运行。棋牌类游戏,大部分的解谜类...

J2ME游戏开发中的双缓冲技术

双缓冲的原理:         在手机游戏开发中,可能一个完整的游戏界面需要很多图像的绘制,而在绘制过程中手机屏幕需要不断显示,如果该界面的游戏图像元素太多,很可能当前帧还没有绘制完成下一帧的绘制任...

j2me游戏开发之LWJGL(Lightweight Java Game Library)

LWJGL(Lightweight Java Game Library)它可以帮助Java程序员开发有着商业性质的游戏.LWJGL为开发者提供简单易用的API来访问OpenGL (Open Graph...

j2me手机游戏开发

从Java EE到Java ME的通讯 前言   本文源于 2005 年底一个真实的手机项目。很早就想为那个项目写点什么了,至今才提笔,也算是了却一个心愿。虽然时隔两年,但技术本身并没有发...

(Himi)j2me3D游戏开发api

  • 2010年11月28日 22:13
  • 3.34MB
  • 下载

J2ME & Gaming游戏开发指南

  • 2007年07月27日 13:49
  • 1.74MB
  • 下载

22—(图文详解)游戏中灵活实现动画播放!简述J2me的游戏类库与Android游戏开发

由于写书的缘故,博文更新缓慢,大家体谅,今天针对群内常提出动画实现的问题来进行一个详细讲述; 此章节适合没有做过游戏开发的同学学习!        做过Android软件的童鞋们,在学习游戏开发的时候...

J2ME游戏开发(第一版)

  • 2007年05月05日 14:07
  • 2.16MB
  • 下载

使用Eclipse构建Symbian S60 5th Edition J2ME开发平台

使用Eclipse构建Symbian S60 5th Edition J2ME开发平台 2011-06-25 20:59 86人阅读 评论(2) 收藏 举报 最近研究了下基于Eclip...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:从J2ME学Symbian游戏开发(一)
举报原因:
原因补充:

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