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 领域广泛,牵涉到的知识点太多, ...
随机推荐
- window API一天一练之邮槽
邮槽通信的进程分为服务端和客户端.服务端创建邮槽,客户端通过邮槽名打开邮槽,获得句柄后可以向邮槽写数据. 邮槽通信是单向通信,只能由客户端向服务端发送数据.下面来看看有关邮槽的几个API HANDLE ...
- go语言之进阶篇WriteString的使用
1.WriteString的使用 示例: package main import ( "fmt" "os" ) func WriteFile(path stri ...
- WPF装饰元素
Border: <Style TargetType="Border"> <Setter Property="CornerRadius" Val ...
- (转)Unity导出Android在高通骁龙800以上CPU概率性崩溃解决方法研究
Android上的奇葩问题真的是太多了,开始测试反馈说游戏在某些Android手机上随机crash,后来经过详细的测试发现随机闪退的手机都是搭载了高通骁龙800以上的CPU.然后连上真机当crash的 ...
- Simple XOR Encryption/Decryption in C++ (And Several Other Languages)
For details on how to implement XOR encryption using Go, see this post. If you are looking for XOR e ...
- Material Design学习之 ProgreesBar
转载奇怪注明出处:王亟亟的大牛之路 继续我们Material Design的内容,这一篇讲的是进度条,上一篇是Switch地址例如以下:http://blog.csdn.net/ddwhan0123/ ...
- Android权限判断checkPermission
判断本程序是否拥有某权限的方法: private static final String EXTERNAL_STORAGE_PERMISSION = "android.permission. ...
- 【树莓派】服务配置相关3:基于Ubuntu Server的服务配置
该文接续之前写过的两篇: [树莓派]服务配置相关 [树莓派]服务配置相关2:基于RPi Desktop的服务配置 这是我个人用来进行树莓派盒子安装配置的脚本,对于外部其他博友,可以部分参考,但不需要逐 ...
- MySql安装完成后设置远程访问的角本
一.方法: 登陆安装Mysql的机器的Mysql, 执行: GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password001!' ...
- 简述一下 src 与 href 的区别
href 是指向网络资源所在位置,建立和当前元素(锚点)或当前文档(链接)之间的链接,用于超链接. src是指向外部资源的位置,指向的内容将会嵌入到文档中当前标签所在位置:在请求src资源时会将其指向 ...