Android游戏开发基本知识

Android游戏开发

手机游戏被业内人士称为继短信之后的又一座金矿。Android虽然基于Java,但是其虚拟机是基于寄存器的,速度得到了很大的提升,这为Android平台上开发游戏提供了坚强的后盾。

大家不要认为开发游戏很难,开发游戏其实比开发一些应用更简单,因为游戏的本质就是在屏幕上不断地显示和更新图片,只不过不是胡乱地更新,而是根据程序逻辑来控制。比如,要实现一个主角在地图上移动,那么只需要将编辑好的地图先绘制到屏幕上去,然后再将主角绘制上去,剩下的便是逻辑判断了。再如,要让主角移动,当我们按下了前进键时,在碰撞检测之后主角能够移动的情况下,只需要将主角绘制的位置向前移动就可以达到目的了。

但同时不要认为开发一款游戏很简单,一款完整的游戏需要多方面的知识,比如:

1. 游戏的创意

2. 背景

3. 故事情节

4. 游戏音效

5. 游戏风格

6. 游戏类型

7. 运行速度

8. 适配机型

而且游戏的开发需要策划、美工、程序、测试的协同工作和默契配合完成的。

一、策划

一款游戏的策划是最重要的,它将直接决定该游戏的后期制作和玩家的喜欢程度。在早期的游戏开发过程中,或许只是一个或者多个代码工作者将自己封闭起来狂写一段时间的代码就可以产生一款很不错的游戏,但现在如果还是这样,写出来的游戏多半不会受到用户的欢迎。

如何才能开发一款受广大用户喜爱的游戏呢?

1. 确定目标客户:

2. 考虑游戏类型:单机? or 联网?, 单人? or 多人?, 动作类型? or 角色扮演?

3. 考虑游戏的可玩性:包括游戏的难度设置,关卡控制以及后期的版本控制。

4. 定义游戏风格

5. 配置游戏音效

6. 大胆创新

策划的同时要考虑到美工和程序在技术上的实现以及硬件的支持,不能设计技术达不到的效果。

二、美工

美工在拿到策划文档之后,需要根据策划文档的描述来发挥自己的想象力,在保持和策划文档一致的情况下,进行创新。同时,为了保证美工的图片适合程序的要求,还需要多和程序员进行交流,以确保程序员能够很清楚地理解自己的设计,使游戏效果达到最好。

三、程序

程序员在得到文档和资源后并不能马上打开编辑器,新建工程开始写代码,而是要仔细查看文档和资源,根据这些来确定所要的知识和所要实现的功能,然后构建一个整体的框架。这个整体的框架很重要,一个优秀的程序员会在框架的设计上花很多时间,因为一个好的框架可以使后面的开发、调试更加简单,同时一个好的框架还能提供游戏的运行效率。为了保证质量,每个程序员写的程序都有Bug,所以我们需要不断地测试、修改,再测试、再修改,从而给玩家一个最好的体验。

 

如何实现一个适合该游戏的框架呢?

以魔塔游戏为例:

游戏中包括地图、主角、整个屏幕界面、显示了地图和主角的属性,地图上还有道具,至少需要一个视图来显示,并且需要更新界面的显示和一个控制游戏逻辑及事件的类。

在android中,要显示一个视图类(GameView)就必须继承View类,View类中包括一个最主要的绘制方法onDraw和一些事件的处理,比如onKeyDown, onKeyUp等。当然在构建视图时还可以加入自己的一些抽象方法,比如资源回收(reCycle), 刷新(refurbish)等。这个类应该是一个抽象类,可以被各个界面使用。

有了视图类来显示界面,还有控制当前屏幕显示哪一个界面,甚至对界面进行一些逻辑上的处理,这时就可以构建一个整个游戏逻辑的MainGame类,在该类中需要根据不同的游戏状态来设置屏幕需要显示的视图。同样,还需要得到当前要显示的视图对象,以便被其他类使用,实现一个getMainView方法来取得当前视图对象。

在创建和控制了视图界面显示之后,要让游戏能够动起来,需要开启一个线程来实时更新视图显示界面并刷新视图。需要为游戏开启一个主线程(ThreadCanvas extends View implements Runnable),可以通过MainGame.getMainView()方法来取得当前显示的视图界面,然后使用postInvalidate()方法来刷新一个界面。

在完成了这些模块之后,就需要通知一个Activity(MagicTower)来显示界面,由于在ThreadCanvas中控制界面的显示,所以使用setContentView方法来显示一个ThreadCanvas类对象即可,按键事件处理也可以调用ThreadCanvas类来处理,ThreadCanvas类会和MainGame一起配合来找所指定的界面。

至此基本完成一个游戏的整个框架,后面的所有视图类界面显示都只需要继承GameView,然后在MainGame中判断和更改当前的游戏状态,程序便自动找到需要更新和释放的视图类进行操作。

原文地址:https://www.cnblogs.com/fengzhblog/p/3187364.html