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中判断和更改当前的游戏状态,程序便自动找到需要更新和释放的视图类进行操作。
Android游戏开发基本知识的更多相关文章
- Android游戏开发实践(1)之NDK与JNI开发03
Android游戏开发实践(1)之NDK与JNI开发03 前面已经分享了两篇有关Android平台NDK与JNI开发相关的内容.以下列举前面两篇的链接地址,感兴趣的可以再回顾下.那么,这篇继续这个小专 ...
- Android游戏开发实践(1)之NDK与JNI开发01
Android游戏开发实践(1)之NDK与JNI开发01 NDK是Native Developement Kit的缩写,顾名思义,NDK是Google提供的一套原生Java代码与本地C/C++代码&q ...
- Android游戏开发实践(1)之NDK与JNI开发02
Android游戏开发实践(1)之NDK与JNI开发02 承接上篇Android游戏开发实践(1)之NDK与JNI开发01分享完JNI的基础和简要开发流程之后,再来分享下在Android环境下的JNI ...
- Android游戏开发实践(1)之NDK与JNI开发04
Android游戏开发实践(1)之NDK与JNI开发04 有了前面几篇NDK与JNI开发相关基础做铺垫,再来通过代码说明下这方面具体的操作以及一些重要的细节.那么,就继续NDK与JNI的学习总结. 作 ...
- [Android游戏开发]八款开源 Android 游戏引擎 (巨好的资源)
初学Android游戏开发的朋友,往往会显得有些无所适从,他们常常不知道该从何处入手,每当遇到自己无法解决的难题时,又往往会一边羡慕于 iPhone下有诸如Cocos2d-iphone之类的免费游戏引 ...
- Android游戏开发之旅 View类详解
Android游戏开发之旅 View类详解 自定义 View的常用方法: onFinishInflate() 当View中所有的子控件 均被映射成xml后触发 onMeasure(int, int) ...
- 《Android游戏开发详解》一1.7 控制流程第1部分——if和else语句
本节书摘来异步社区<Android游戏开发详解>一书中的第1章,第1.7节,译者: 李强 责编: 陈冀康,更多章节内容可以访问云栖社区"异步社区"公众号查看. 1.7 ...
- [Android游戏开发]游戏框架的搭建
通常情况下,游戏开发的基本框架中,一般包括以下模块: 窗口管理(Window management):该模块负责在Android平台上创建.运行.暂停.恢复游戏界面等功能. 输入模块(Input):该 ...
- 【读书笔记《Android游戏编程之从零开始》】9.游戏开发基础(如何快速的进入 Android 游戏开发)
1.不可盲目看API文档很多人在接触学习一门新的平台语言时,总喜欢先去探究一番API文档.先不说成效如何,至少编者认为这种方式不适合大部分人来效仿,主要原因在于 API 领域广泛,牵涉到的知识点太多, ...
随机推荐
- N体运动的程序模拟
这依然是与<三体>有关的一篇文章.空间中三个星体在万有引力作用下的运动被称之为三体问题,参见我的上一篇文章:三体运动的程序模拟.而这一节,对三体问题进行了扩展,实现了空间中N个星体在万有引 ...
- CentOS6 安装并破解Jira 7
CentOS6 安装并破解Jira 7 JIRA软件是为您的软件团队的每个成员构建的,用来规划,跟踪和发布优秀的软件. https://confluence.atlassian.... 最低硬件要求及 ...
- 引用外部jquery.js
使用 Google 的 CDN <head> <script type="text/javascript" src="http://ajax.googl ...
- LigerUi之Grid使用详解(二)——数据编辑
一.问题概述 在开发web信息管理系统时,使用Web前端框架可以帮助我们快速搭建一组风格统一的界面效果,而且能够解决大多数浏览器兼容问题,提升开发效率.所以上一篇文章为大家介绍了LigerGrid的显 ...
- 机器学习-->期望风险、经验风险与结构风险之间的关系
https://blog.csdn.net/liyajuan521/article/details/44565269 在机器学习中,通常会遇到期望风险.经验风险和结构风险这三个概念,一直不知道这三个概 ...
- (转)Unity3D研究院之手游开发中所有特殊的文件夹(assetbundle与Application.persistentDataPath)
这里列举出手游开发中用到了所有特殊文件夹. 1.Editor Editor文件夹可以在根目录下,也可以在子目录里,只要名子叫Editor就可以.比如目录:/xxx/xxx/Editor 和 /Edi ...
- springboot 中使用事务
直接在service 层的方法上加上@Transactional 注解就ok. 注意事项: 1.Spring 基于注解的声明式事物 @Transactional 默认情况下只会对运行期异常(java. ...
- 强大的Mockito测试框架
转载:https://blog.csdn.net/dc_726/article/details/8568537 1自动生成Mock类 在需要Mock的属性上标记@Mock注解,然后@RunWith ...
- git 本地与服务器的同步
如果在服务器上直接用 git init 则会自动在当前目录创建.git目录但在本地clone后修改后,不能push,这是由于git默认拒绝了push操作,需要进行设置,修改.git/config添加如 ...
- 结构体指针之 段错误 具体解释(segmentation fault)
一个网友问了我一个问题.一个C程序执行出现了段错误,这个问题非常好.非常多刚開始学习的人都easy犯这个错误,详细代码例如以下: watermark/2/text/aHR0cDovL2Jsb2cuY3 ...