当前位置:
文档之家› 第10章 Android游戏开发实例
第10章 Android游戏开发实例
编辑好地图后,可以得到一个保存了地图数据 的二维数组,如GameMap.java文件中的 floolAarray数组。数组中的数字代表不同的图 块,我们只需要将这些数据所对应的图块绘制 到屏幕上即可
绘制步骤
首先创建一个TiledLayer对——表示要显示的地图
TiledLayer(int columns, int rows, Bitmap image,
这些数据当然不是我们从键盘上一个一个地输 入进去的,一般情况下先由程序员做一个地图 编辑器,在这个地图编辑器中用鼠标点击再保 存,或者是从网络上卜载一些成熟的编辑器, 如用mappy这样的工具生成地图,再用脚本语 言为mappy写一个应该保存成什么格式的程序 。通常地图分为45度角、侧视角和俯视角等
这里使用我们实现的Sprite类来完成《魔塔》 中的主角,sprite是个用来显示图像的类,该 类和TiledLayer的区别是:Sprite是由一个图 像(可以有几帧,但是一次只有一个显示)组 成的(当然Sprite还有其他的特性,每次只能 使用一个图像而不是多个图像来填充屏幕是它 的最主要特征),因而Sprite被用来定义一些 小的有动作的游戏对象(如飞船和小行星对撞 ),TiledLayer更常被用来构造生动的背景。 下面我们看看如何使用这个Sprite类
设臵Sprite属性
进行碰撞检测
精灵旋转与镜像
在做游戏时,都需要使用旋转和镜像。如,在做一个飞机 游戏时,飞机有几个方向的图片,这样会增加游戏开发出 来的包的大小,所以可以制作一个方向的图片,然后通过 精灵的旋转方法来将图片在各个方向进行旋转 这里我们只实现了90度倍数的旋转,分别是我们在Sprite 类中定义的常量:TRANS_NONE、TRANS_90、 TRANS_189等 我们可以通过,setTansforrn方法来传输上面这些常量, 设臵Sprit的旋转和镜像
游戏策划
现在我们就可以根据上面的目标客户和游戏类型来 定义游戏的风格了,如想以三国为题材做一个即时 战略游戏,就不可能定义为现代风格,游戏中就不 会出现坦克、飞机的道具。同时这也体现了游戏的 真实性,但是游戏本身是一个虚幻的东西,玩家就 是需要将自己放到虚拟的世界中,所以也不能过度 真实,让玩家觉得枯燥乏味。风格确定之后,还可 以根据游戏的风格来配臵游戏音效。
本章我们将通过在Android平台完成一个游戏 《魔塔》的开发来学习Android游戏开发。该 游戏包括了游戏开发中的大部分技术,包括地 图、精灵、图层、音效、存档等。下面是游戏 《魔塔》在Android上的运行的主要界面。
魔塔游戏主要界面
魔塔游戏主要界面
魔塔游戏主要界面
12.2 游戏框架设计
第12章 Android游戏 开发实例
本章学习目标:
了解手机游戏开发的基本流程 掌握Android手机游戏开发的设计框架
12.1 手机游戏开发简介
首先要说的是大家不要认为开发游戏很难,开 发游戏其实比开发一些应用更简单。因为游戏 的本质就是在屏幕上不断地显示和更新图片, 只不过不是胡乱地更新,而是根据程序逻辑来 控制,如要实现一个主角在地图上移动,那么 只需要将编辑好的地图先绘制到屏幕上去,然 后再将主角绘制上去,剩下的便是逻辑判断了。 再如,要让主角移动,当我们按下了前进键时, 只需要将主角绘制的位臵向前移动就可以达到 目的了„在碰撞检测之是通过一个浮动的对话框来显示对话内容,这个对话框 只是一个矩形框,然后在右边绘制出对应NPC的头像即可 。 (GameScreen.java中的dialog方法)这里的对话内容 可以通过TextUtil类来实现自动换行。 当主角和怪物发生碰撞,就会发生战斗。需要一个界面来 展示战斗效果。战斗界面非常简单,就是分别显示玩家和 怪物的头像以及属性,包括生命、攻击、防御。( FightScreen.java中的onDraw方法)
到这里我们基本完成了一个游戏的整体框架, 后面的所有视图类界面显示都只需要继承自我 们自定义的抽象类GameView,然后在 MainGame中判断和更改当前的游戏状态,程 序便自动找到我们需要更新和释放的视图类进 行操作 下面通过该游戏的菜单显示界面来熟悉该框架 的使用
首先创建一个MainMenu类 继承自GameView类。然后 实现GameView类中定义的 抽象方法(onDraw, onKeyUp等) 完成界面绘制和按键处理后 ,只需要在MainGame中判 断当前状态。如果是菜单界 面,就将GameView对象构 建为MainMenu类对象, ThreadCanvas便可以通过 getMainView取得该对象并 进行刷新。
前面己经介绍了框架在游戏开发中的重要地位 ,如何才能实现一个适合该游戏的框架呢? 首先我们需要了解游戏的内容,游戏中包括了 地图、主角、整个屏幕界面,显示了地图和主 角的属性,地图上还有道具。至少需要一个视 图显示,并且需要更新界面的显示和一个控制 游戏逻辑及事件的类。下面我们来构建该游戏 的整体框架。
这里先实现了Game包中的几个重要的类,包 括Layer, TiledLayer, Sprite, LayerManager。 这样就可以使用这个包来轻松地完成以后的游 戏开发了。
地图设计
地图的设计在游戏中非常重要,我们不可能让 美工做出一张完整的大地图,然后在程序中直 接使用,这样做出来的游戏将会很大,一般的 手机不一定能成功地装载这么大的图片 通常游戏中的地图是多个小块组成的一个完整 的大地图,而组成这些小块的数据一般可以使 用个二维数组来存储,然后通过程序以最快的 方式将这些地图数据对应的小块映射到屏幕上 组成一幅完整的地图
int tileWidth, int tileHeight)
设臵地图数据——将floorArray中的一维数组转换为 二维的floorMap
setCell(int col, int row, int tileIndex) floorMap.paint(canvas)
绘制地图——将二维的floorMap绘制到屏幕上
当我们选择一个菜单项后,应用程序界面将跳 转到另一个界面。如选择了“关于”界面,将 跳转到“关于”界面。通过在MainMenu类的 dealItem方法中调用MainGame类的 controlView(yarin.GAME_ABOUT)方法实现
一个好的游戏框架需要根据具体的游戏类型和 内容来进行设计,以方便开发,提高发效率, 使得开发的游戏运行效果更好。现在我们可以 点击菜单界面上的“新游戏”来进入游戏的主 题开发了 大家可能知道,J2ME,在MDIP2.0后面的版 本多出了一个专门为开发游戏提供的Game包 ,本章我们将通过在Android中实现并使用这 个包来完成《魔塔》
在Android中要显示一个视图类就必须继承 View类,View类中包括一个最主要的绘制方 法onDraw和一些事件处理,如onKeyDown、 onKeyUp等。在构建这个视图类时,还可以加 入一些自己的抽象方法,如资源回收、刷新等 。有了这些内容,下面构建一个拥有显示游戏 界面的视图类GameView。该游戏由多个界面 构成,所以GameView是一个抽象类,可以被 各个界面使用(GameView.java文件)
游戏策划
在明确了目标客户之后,需要考虑游戏的类型。从 大的方面说,游戏是单机的还是联网的,是单人的 还是多人的,是动作类型的还是角色扮演类型的等 等。在确定了游戏的类型之后,还需要考虑游戏的 可玩性,总不可能说游戏玩家十多分钟就通关了, 这就需要包括游戏的难度设臵、关卡控制以及后期 的版本控制。
Sprite类使用
构建Sprite对象
Sprite(Bitmap image) Sprite(Bitmap image, int frameWidth, int frameHeight) Sprite(Sprite s) setRefPixelPosition(int x, int y) collidesWith(TiledLayer t, boolean pixelLevel) collidesWith(Sprite s, boolean pixelLevel) colidesWith(Bitmap image, int x , int y, boolean pixelLevel)
完成了这些模块后,需要通知一个Activity显示界 面,通过setContentView方法显示一个 ThreadCanvas类对象即可(MagicTower.java) 按键事件的处理可以调用ThreadCanvas类处理 ThreadCanvas类和MainGame类一起配合找到指 定的界面
主角设计
游戏中的主角称为“精灵”,当然精灵包括的 范围很广,不仅仅是主角,还有NPC、道具等 既然是精灵,必然有很多动画,如主角在向4 个方向移动时分别对应4个不同的动画,动画 本身就是将图片一帧一帧地连接起来,循环地 播放每一帧形成的。在一些大的游戏中同样可 以使用自己写的精灵编辑器去编辑精灵,将精 灵拆成很多部分,然后再组合起来,这样可以 节省大量的空问。
游戏策划
解决了上述问题,就可以准备写策划案了。在写策 划案的同时还需要考虑到美工和程序在技术上的实 现以及硬件的支持,不能设计技术达不到的效果。 了解了这些问题,开始编写策划案。
美工
美工在拿到策划文档之后,需要根据策划文档的描 述来发挥自己的想象力,在保持和策划文档一致的 情况下,进行创新。同样,为了保证美工的图片适 合程序的要求,还需要多和程序员进行交流,以确 保程序员能够很清楚地理解自己的设计,使游戏效 果达到最好。