APP下载

Android游戏开发基础框架探讨

2017-12-25甘廷杰重庆育才中学

新商务周刊 2017年21期
关键词:线程视图图层

文/甘廷杰,重庆育才中学

在移动互联网技术出现以前,广大的PC用户把PC上面的游戏软件当作闲暇 时间不可或缺的一种娱乐方式,从最早期的“俄罗斯方块”,到后来的“冒险岛”,再 到后来的“魂斗罗”,甚至“连连看”,这些无一不给我们留下了非常深刻的,愉悦的 记忆,与此同时,也给游戏软件的创作者带来了非常可观的收入与名声。但是,随着移动互联网技术的发展,以及像iPhone和android等智能手机的出现,之前竞 争异常激烈的异常繁荣的电脑游戏软件行业,越来越多的游戏软件开发者把 目光投向了手机游戏软件这一新兴的空间更大,利润更可观的行业。

Android 作为一个开源的移动设备的平台,其软件层次结构自上而下分为四个层次, 分别是:应用程序(Application)、应用程序框架(Application Framework)、各种库 (Libraries)和 Android 运行环境(RunTime)、Linux 内核 (Linux Kernel)。

Android 应用程序由一个或多个组件组成,Android 的应用程序框架为应用程序层的 开发者提供 APIs,它实际上是一个应用程序的框架。由于上层的应用程序是以 Java 构 建的,因此本层次提供的首先包含了 UI 程序中所需要的各种控件:

例如:Views(视图组件)包括 lists(列表 ),grids(栅格),text boxes(文本框), buttons(按钮)等。甚至一个嵌入式的 Web 浏览器。

这里首先介绍下手机游戏开发制作流程,其开发周期可以分为以下:游戏的策划, 企划书的编写,美工及背景音乐的创作,游戏程序的代码编写与调试,游戏的测试,Demo 版的发布,对Demo版的再测试,正式版的发布。

通常情况下,游戏开发的基本框架中,一般包括以下模块:

窗口管理(Window management):该模块负责在Android平台上创建、运行、暂停、恢复游戏界面等功能。

输入模块(Input):该模块和视窗管理模块是密切相关的,用来监测追踪用户的输入(比如触摸事件、按键事件、加速计事件等)。

文件输入输出(File I/O):此模块用来读取assets文件下图片、音频等资源。

图像模块(Graphics):在实际游戏开发中,这个模块或许是最复杂的部分。它负责加载图片并把它们绘制到屏幕上。

音频模块(Audio):这个模块负责在不同的游戏界面加载音各类频。

网络(networking):如果游戏提供多人游戏联网功能,此模块就是必须的。

游戏框架(Game framework):该模块把以上各种模块整合起来,提供一个易用的框架,来轻松地实现我们的游戏。

按照功能划分,我们可以把一个简单的游戏框架划分为三个板块:

整体控制层:在 Android 游戏中一般是通过 Activity 控制整个游戏发展的流程,包 括进入欢迎界面、游戏加载、进入游戏界面、进入帮助界面,以及启动游戏、暂停游戏、 结束游戏等。

界面表现层:此层包括图层对象和视图对象。图层对象定义图层的宽和高、图层的 位置、图层的移动以及图层的绘制方法等;视图对象的主要作用是绘制图层对象、响 应键盘事件和处理视图线程等。

数据存储层:保存游戏的数据,例如在游戏中设计的用来封装常用数据常量的类以 及在退出游戏时用来保存当前游戏进度的文件等。

游戏工作的流程又分为:处理用户的输入、更新状态、并呈现给用户。用户在游戏中能最大化感受的是游戏的交互性。其中,画面视图的交互又是其最直观的表现形式。因此,在整个游戏开发过程中,视图对象是我们需要处理的重点对象,也是用户能看到的最直接的对象。

在Android平台下,提供了View、SurfaceView类作为视图类的基类。我 们首先看下以View类作为基类的视图类的开发。在Android中,任何一View类都只需要重写其中的onDraw()方法来实现界面的绘制。游戏的核心是不断的绘图和刷新界面, 在Android中最常用的方法是利用Handler来实现UI线程的更新,也可以直接在run()方法 中使用postInvalidate()方法在线程中更新界面。其次,是SurfaceView类开发框架。当需 要开发复杂的游戏,而且对程序的执行效率很高时,View类就不能满足需求了,这时必 须用SurfaceView类进行开发,这也是主流的开发框架。一般在使用时需要对其进行创建、 销毁,情况改变时要进行监视,这就要实SurfaceHolder.Callback接口,如果要对被绘制的画布进行裁减,控制其大小时都需要使用SurfaceHolder来完成处理。在程序中, SurfaceHolder对象需要通过getHolder方法来获得,同时还需要addCallback方法来添加 “回调函数”。

一般 surfaceCreated 方法用来在开始绘制视图对象时初始化和启动所需的各个 线程,而 surfaceDestroyed 方法用来在绘制视图对象结束时停止各个线程。这里通 过实现 Runnable 接口来实现刷帧线程,也可以通过创建内部的线程类来实现刷帧线程。 最后在 Activity 类中,调用 setContentView(GameSurfaceView 的对象)实现视图对象的显示。

因此,在主流的Android游戏开发的框架中,我们都会使用到SurfaceView这个类表现视图界面,SurfaceView 双缓冲绘图机制来实现视图界 面,加载界面进度条技术的设计实现等等。

[1]马欣.基于智能手机的游戏软件技术研究[D]. 苏州大学2015》

猜你喜欢

线程视图图层
实时操作系统mbedOS 互斥量调度机制剖析
浅析体育赛事售票系统错票问题的对策研究
为《飞舞的空竹龙》加动感
以假乱真窥探湿玻璃后的风景
与众不同“跳出”画面更个性
视图
Y—20重型运输机多视图
SA2型76毫米车载高炮多视图
Django 框架中通用类视图的用法
计算机中的多线程问题