灵通163百科在线-实用的手机,证券免费资源网站

您现在的位置:首页 > 塞班Symbian > 游戏资源 >

Symbian中的游戏编程:第二部分

教程来源:www.lt163.com     点击数:     更新时间:2018-01-08 10:45

  window server是给所有拥有GUI的应用程序所使用的,它提供给应用程序一个接口,从而使它们与其他应用程序交互时更方便。这个server的主要任务就是管理系统资源,象对屏幕和键盘的访问,它使用Symbian系统中client-server体系架构来执行,因此对共享资源的控制更加有力。客户程序和server运行在不同的进程中,不可以直接访问各自的内存地址区域,因此它们之间的通信就要通过一个消息来传递,这个在client和server之间的通道就成为一个session,当session打开后,一个client可以使用session发送一个消息到server端,从而完成一次对server的请求。这个消息包括一个32bit请求类型操作码,和最多4个32bit的参数。在请求完成后,server返回一个32bit完成码到client中,server可以使用进程间通信服务来发送和接收额外的数据。

  每个client应用程序与window server的通信都要使用一个window server session类:RWsSession,这个类的主要任务是协调发送到应用程序的异步事件,比如重绘事件,priority key events和标准事件包括用户输入事件等,window server会判断哪个应用程序和窗口会接受这个事件。如,一个键盘事件只能发送到拥有焦点的窗口,而一个重绘时间只能发送到应用程序中当前可见的窗口。Due to the higher process priority of the window server, the events are handled with higher priority than applications' other requests.

  (一)、Client Side Buffer

  应用程序对window server的请求通常通过如下的步骤来处理:

  1). The window server’s client side processes the request.

  2). A context switch from the client process to the server process occurs.

  3). The window server processes the request,

  4). A context switch back to the client process occurs.

  这个方法确保了请求在正确的步骤中被处理,而当最后控制重新又回到客户端手中时,请求已经被处理过了。不管怎么说,在两个进程间的环境切换是十分繁杂的过程,会产生比较大的开销。

  Even though, the window server has been implemented as a fixed process, which has a fixed virtual address area and hence does not need its address pointers to be updated, the context switch originates unfounded speed losses. The clients, raising a request, also has to wait for a synchronous response. For most of the requests, including drawing methods, this is unnecessary. Because of these drawbacks, the asynchronous function calls are buffered in a client side window server buffer.

  In the GT versions of the Symbian OS the buffer size has been fixed to 640 bytes. Series 60 has grown the buffer to 6400 bytes, and added support for applications to alter the buffer size. (注意)Larger buffer size is especially valuable in applications where drawing consists of a number of drawing functions or large amount of text. This can be seen as decreased flickering. The buffer size can be changed in the ConstructL of the application's UI class:

  void CMyAppUi::ConstructL()

  {

  BaseConstructL();

  // WS buffer size can be set after the BaseContructL is called

  RWsSession &ws = iEikonEnv->WsSession();

  TInt bufsize = 10000;

  ws.SetBufferSizeL(bufsize);

  // Continue normal app UI contruction

  iMyView = new ( ELeave ) CMyMainView;

  iMyView->ConstructL( ClientRect() );

  AddToStackL( iMyView );

  }

  如此一来,当缓冲被发送时,所有的methods都会在一次message中发送到window server中,这样就只有两次环境切换发生,从而减少了负荷。通常缓冲在如下情况下发生:

  1、缓冲满了

  2、一个同步method被调用

  3、EventReady(), RedrawReady()或PriorityKeyReady()被调用

  4、Flush()被调用,或

  5、一个会导致缓冲溢出的method被调用

  If a drawing is initiated in response to another event than a window server event, an explicit Flush should be called. This is the case, for example, in games, where drawing is usually initiated in response to a timer event.

  (二)Windows

  应用程序在屏幕上绘图要使用windows,它们是由window server来管理的,下图就描绘了各不同window类之间的关系:

  

  (windowsgroup.gif)

  所有的窗口都是从基类:RWindowTreeNode派生的,这个基类指定了他们的z-order。可显示的窗口也同样都是从一个抽象基类中派生的,这就是RWindowBase。RWindow是一个标准窗口,它可以根据程序的要求来绘制或重绘。RBackedUpWindow表现了这样的一种窗口,它将自己的内容都存放在一个backup bitmap中。当RBackedUpWindow的某区域有效时,the window server redraws it automatically from the backup bitmap, without requiring an application redraw. 所有从RWindowBase中派生的类,都有一个显示模式(display mode)用于指定其颜色深度。显示模式是由TDisplayMode这个枚举类型来定义的,而具体模式一般都和屏幕的一致。RWindowGroup是一个non-drawable window,它在

没有相关教程
UC浏览器 最先进实用的手机端浏览器,最大限度节省页面浏览流量,点击下载
老虎地图 绿色纯免费GPS定位省流量的最佳手机地图,点击下载
网秦手机安全系列 手机杀毒防盗,防火墙,构建手机安全,点击进入
塞班精品游戏 最流行最给力的塞班S60免签名名精品游戏合集,点击进入
阿里通 手机上轻松拨打网络电话和收发短信,高音质超省话费,资费标准
爱科手机电话 国内最好的手机网络电话领先品牌,价格低廉,点击查看
愤怒的小鸟2 全民挑战超流行休闲游戏力推新作-愤怒的小鸟2,点击查看
魔力旺旺 淘宝卖家首选的交易工具

资源下载排行
文章阅读排行