基于Android的飞行射击游戏设计与实现

    赖建评

    

    

    

    摘要:基于Android的游戏应用,是Android市场中最重要的组成部分,而飞行射击类游戏是经典的游戏类型之一。该文采用Android平台,分析设计了Android飞行射击游戏开发的总体框架,研究Android飞行射击游戏开发相关的技术,包括SurfaceView视图、背景滚动、碰撞检测等、爆炸动画等,设计实现飞行射击游戏开发。

    关键词:Android;飞行射击;游戏

    中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2016)12-0073-02

    游戏发展至今,划分出了休闲益智、体育竞速、动作冒险、飞行射击、经营策略、角色扮演等游戏类型。在众多的游戏分类中,飞行射击游戏是发展较早的游戏类型之一,在电子游戏的历史演变过程中扮演了重要的角色,留下很多经典的代表作,如“斑鸠”、“1945”、“雷电”等。随着Android智能终端的普及,飞行射击游戏在Android平台,通过用户触屏直接控制飞机,能给用户带来更刺激、更畅快的体验。本文基于Android平台,分析相关开发技术,设计实现一款飞行射击游戏。

    1 飞行射击游戏框架

    1.1游戏视图

    在Android游戏开发中,游戏界面需要用到大量的图片资源和处理图像特效,如果采用Android应用开发中单纯的XML布局界面,会造成界面刷新时间过长、事件处理等待太久等问题。为解决以上问题,在Android游戏中采用自定义视图继承View或SurfaceView实现游戏界面绘制。

    View对画布的重新绘制,通过该类的invalidate()或postInvalidate()完成,画布由系统的UI主线程进行更新。而SurfaceView中内嵌有Surface对象,Surface是在后台线程中绘制,画布的重绘由新线程完成。在飞行射击游戏中,游戏界面的物体是动态变化的,需要在游戏过程中不断重新绘制,因此选择SurfaceView视图,能够避免主线程阻塞,提高程序反应速度,SurfaceView更适合用于飞行射击游戏开发。

    1.2 SurfaceView框架

    SurfaceView继承View,包含SurfaceHolder接口的实现实例,对外提供该实例的访问接口。SurfaceHolder里包含对SurfaceView内嵌的 Surface进行控制的接口,能够获取Surface、更改Surface显示内容及监听Surface状态事件。

    Surface状态事件的监听通过重写以下三个函数实现:surfaceCreated(),当SurfaceView首次创建后调用,在该函数中完成绘制界面相关信息的初始化工作;surfaceChanged(),当SurfaceView的尺寸发生改变的时候调用,在surfaceCreated运行后会首次被调用;surfaceDestroyed(),当SurfaceView被销毁前调用,如退出游戏画面,在该函数中停止绘图线程和清理使用的资源。

    SurfaceView采用了双缓冲技术,在绘图前通过SurfaceHolder的lockCanvas()获取Canvas,在 Canvas上绘制内容,绘制完成后调用SurfaceHolder的unlockCanvasAndPost(),把画布中的内容提交到Surface渲染显示,这种双缓冲技术能够避免更新视图时画面闪烁。在线程的run方法中循环调用绘图函数,实现动态刷新屏幕。

    2 飞行射击游戏关键技术

    2.1背景滚动

    在飞行射击游戏运行后,通过用户点击“开始”按键,启动游戏进入主界面,此时游戏的背景一般是用同一张图片,在游戏过程中不断从上到下滚动,使得飞机在游戏界面中给玩家留下不断飞行的错觉。为实现这一效果,设计一张上、下两边沿能够衔接过渡的背景图片,设置两个位图A、B初始化为同一背景图,通过绘图控制两个位图A、B前后连接一起向下移动,当A的上边到达屏幕底部后,把A设置到B的上方,当B到达屏幕的底部后,把B设置到A 的上方,不断循环以上过程,实现背景不断向下滚动的效果,该过程如图1所示。

    2.2 碰撞检测

    游戏开发经常需要进行碰撞检测处理,飞行射击游戏中要判断子弹是否击中飞机,然后根据检测的结果做出不同的处理。在手机游戏开发中最常用到三种检测碰撞的方式,包括矩形碰撞、圆形碰撞和像素碰撞检测。当碰撞检测的物体形状比较复杂时,需要进行组合碰撞检测,将复杂物体分解成多个基本形状的组合,然后分别进行碰撞检测。本程序中用到的角色形状近似矩形,下面只讨论矩形碰撞检测的其中一种实现方式。

    矩形碰撞检测是通过两个矩形之间的位置关系,判断它们是否发生碰撞。两个矩形之间不碰撞时的位置关系有图2所示的四种情况:当矩形A的右端比矩形B的左端靠左,或矩形A的左端比矩形B的右端靠右,或矩形A的下端比矩形B的上端靠上,或矩形A的上端比矩形B的下端靠下时,两个矩形不可能发生碰撞。根据德摩根定律,求不碰撞情况下的否定,既为碰撞情况:在水平方向上,矩形A的右端比矩形B的左端靠右,并且矩形A的左端比矩形B的右端靠左,同时在垂直方向上矩形A的下端比矩形B的上端靠下,并且矩形A的上端比矩形B的下端靠上时,两个矩形发生碰撞。

    2.3爆炸动画

    Android游戏开发中,爆炸效果可以用逐帧动画实现。逐帧动画实现有两种方式:当每一帧是单独一张图片时,可以通过XML资源设置animation-list定义每一帧图片和播放时间,在碰撞点播放该逐帧动画;当多个帧的图片合并在一张图片里面的时候,需要通过画布的剪切区域,更改剪切区域位置,依次在碰撞点绘制显示每一帧。在本文中,采用第二种方式实现爆炸动画效果。

    3 飞行射击游戏设计与实现

    3.1 程序流程设计

    游戏中设计了玩家飞机、敌机和Boss角色。程序运行后,进入菜单界面,点击开始进入游戏界面。进入游戏界面后,背景和敌机不断从上到下移动,同时敌机发射子弹,当敌机移动到屏幕底部或者被玩家击中后,敌机爆炸,随后敌机在屏幕上方重新出现;在游戏状态下,玩家通过触屏控制飞机上、下、左、右飞行,并不断向上发射子弹,玩家飞机被击中后减少血量,当玩家能够击中足够多的敌机时,通关成功,否则游戏失败。

    3.2程序实现

    程序主体框架使用自定义视图类继承SurfaceView并实现SurfaceHolder.Callback和Runnable接口。线程的run()方法不断循环调用逻辑处理模块和绘图方法,根据玩家操作所处的阶段,完成游戏初始状态、游戏进行状态、游戏结束状态界面更新绘制。初始状态菜单绘制使用GameMenu类完成,实现初始欢迎界面;游戏过程中通过GameBg类设置背景循环滚动,Player类完成玩家飞机飞行绘制、玩家飞机与敌机碰撞检测、玩家飞机与敌机子弹碰撞检测,Enemy类完成敌机飞行绘制、敌机与玩家飞机子弹碰撞检测,Boss类完成Boss飞行绘制、Boss与玩家飞机碰撞检测,Bullet完成子弹飞行绘制,Boom类完成爆炸效果动画显示。

    3.3 游戏运行效果

    通过使用SurfaceView视图,应用背景滚动和矩形碰撞检测技术,实现完成的飞行射击游戏运行效果如图3所示。

    4 结束语

    本文介绍了Android游戏开发中的SurfaceView视图,研究了飞行射击游戏开发过程中背景滚动、碰撞检测、爆炸动画等关键技术,设计实现了Android飞行射击游戏的框架开发,经过运行测试,该游戏运行流畅、稳定,后期为了增强趣味性,可以在游戏中增加武器选择、音效等开发。

    参考文献:

    [1] 吴新华,万强.基于Android平台的手机游戏开发[J].萍乡学院学报,2015,12(32).

    [2] 李华明.Android游戏编程之从零开始[M].北京:清华大学出版社,2011.

    [3] 吴亚峰,于复兴,杜化美.Android游戏开发大全[M].北京:人民邮电出版社,2013.

相关文章!
  • 融合正向建模与反求计算的车用

    崔庆佳 周兵 吴晓建 李宁 曾凡沂<br />
    摘 要:针对减振器调试过程中工程师凭借经验调试耗时耗力等局限性,引入反求的思想,开展了

  • 浅谈高校多媒体教育技术的应用

    聂森摘要:在科学技术蓬勃发展的今天,我国教育领域改革之中也逐渐引用了先进技术,如多媒体技术、网络技术等,对于提高教育教学水平有很

  • 卫星天线过顶盲区时机分析

    晁宁+罗晓英+杨新龙<br />
    摘 要: 分析直角坐标框架结构平台和极坐标框架平台结构星载天线在各自盲区状态区域附近的发散问题。通过建