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 领域广泛,牵涉到的知识点太多, ...
随机推荐
- Maven 默认插件以及功能
Maven 默认插件 已知 Maven 使用 plugin 来执行实际操作的,在默认情况下,Maven 会绑定以下几个插件来完成基本操作. plugin function life cycle pha ...
- Round() 四舍五入 js银行家算法
首先问一下round(0.825,2) 返回的结果,大家猜一猜, 首先SQL server 返回的是 0.83 js的返回结果 是0.83,code 如下: var b = 0.825; ...
- log4net修改数据库连接字符串和写自定义信息
最近项目需要用log4net来写日志,因为整个平台式在sharepoint上,我们需要记录具体是哪个子站点发生的日志,因此需要再原来的log表里面添加一个自定义信息列.由于平台的安全性要求,我们需要对 ...
- 基于libnids的TCP数据流的还原(多线程实现) .
我们知道,libnids本身可以实现TCP数据流的重组,但是如果一个TCP流数据量比较大的时候,就会分成好多个TCP报文段,这些报文段在网络中的传播可能是乱序的,利用libnids可以帮助我们按顺序接 ...
- 阅读日志: 微信小程序的风口只有一天?
原文地址: 小程序的风口只有一天?难道我们用的是假的小程序 http://xudanei.baijia.baidu.com/article/755506 原文摘要: #,小程序的趋势,从1月10日至1 ...
- Context Application 使用总结 MD
Markdown版本笔记 我的GitHub首页 我的博客 我的微信 我的邮箱 MyAndroidBlogs baiqiantao baiqiantao bqt20094 baiqiantao@sina ...
- 测试数据——有效范围(2)
测试数据库搞好,学习了一下逾期率的官方定义: • 对于某支标,如果某一期没有正常还款,则悲观逾期率=所有未还本金/借款本金: • 对于一批标,悲观逾期率=当前逾期标的所有未还本金/借款本金: • 以3 ...
- Mysql正则匹配某列是否含有手机号
SELECT COUNT(1) FROM t_user WHERE user_name REGEXP ".[1][35678][0-9]{9}."; 解释: 正则中 .的意思是所有 ...
- C#调用MySQL数据库(使用MySql.Data.dll连接)mysql-connector-net-6.10.4.msi
下载地址:http://dev.mysql.com/downloads/connector/net/ 安装指导 1.安装:mysql-connector-net-6.10.4.msi 其下载地址:ht ...
- cookie相关的函数
浏览器中,使用JavaScript操作cookie的两个工具函数. 设置cookie值, 必须的參数是name和value,可选參数是过期天数和域名. // 设置cookie值(key,value,过 ...