`
yns74yns
  • 浏览: 13069 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

学习android游戏开发的准备

 
阅读更多

学习android游戏开发的准备
2011年08月10日
  此文为翻译 作为自己的学习资料,可能有些地方翻译得不太准确,大家就抱着看看的态度就可以了。如果能学习东西当然是更好
  原文地址:http://www.rbgrn.net/content/54-getting-started-android-game-development
  如果你喜欢android平台游戏开发,那你需要知道很多基础东西。我是Light Racer,Light Racer 3D,Antigen,Deadly Chambers and Wixel的开发者,如今这些游戏都放置在android market上。在我开发游戏之前,我的第一个android 应用程序是原始的Light Racer 。我也学到很多关于写android游戏的经验,因此很愿意分享给大家。我甚至写了一本关于Light Racer 3D详细开发的在线书籍――《development of Light Racer 3D》。里面介绍了大量的基础知识和关键的代码片段。如果你之前已经有游戏开发的经验,那么跳转到移动开发平台将不会太难。只需要学习android的框架和api就可以了。如果你是刚刚学习游戏开发,那我这里提供一个必须知道的列表让你入门。它包括各种游戏的类型,如行动、策略、模拟和解题。
  Android的环境是以java为基础。因为java是比c++更容易上手的开发语言,也是移动开发的规范,再加上目前我也在用,所以这对新手将是一个很好的开头。Google在这方面也做了很多工作,比如提供文档形式的api和大量的例子。这些例子几乎100%的使用api的函数,因此也被叫做API Demos。如果你对java有一定的熟悉和已经在使用Eclipse了,那么开始第一个例子就会相当的容易。如果以前你从未学过任何的代码,那它将会随着你的前进不断吸引着你,不过不能气馁。如果你有过一些用c++开发的经验以及想用c++开发跨平台或者高质量的android游戏 ,那就看看BatteryTech,目前我正使用它来开发游戏。
  Get the SDK
  第一步启动android平台获取SDK,这SDK里包括核心的元件库,模拟器,工具和例子代码。推荐使用eclipse和android插件。如果你只是做android开发,那Eclipse IDE for Java Developers是个不错的选择。如果这是你第一个java开发的项目,你就要下载java SE JDK。
  Learn the application architecture
           首先理解android 应用框架是很重要。如果你不学习它,你后面学习解决游戏问题时将会困难重重。你应该去理解 Applications, Activities, Intents 和它们之间是如何联系的。Google已经提供了大量好的信息在这框架里。更重要的事情是理解为什么游戏需要多个activity组成和怎么样设计游戏才有好的用户体验。所有的都关联着activity的生命周期。
  Learn the activity lifecycle
  Activity 的生命周期由android系统管理。系统控制创建,恢复,暂停和销毁Activity的状态。想拥有好的操作的应用程序,那正确处理这些事件是非常重要。在设计游戏之前理解这些的工作原理可以省去你调试时间和设计耗费的时间。对于大多数应用,android默认的设置就可以满足大多数应用,但是对于游戏你或许需要去考虑设置单例标志。因为当设置的是默认时,android在适合的时候每次都会创建一个新的activity实例。对于游戏,你或许只需要一个activity实例。这就意味着你需要去管理这些事物的状态,但是对于我则需考虑解决一些资源管理的问题。
  The main loop
           无论你正在写什么类型的游戏,你或许有或许没有主循环。如果你的游戏不是依赖于时间或者只是单纯的回应用户的动作,除了等待用户输入,就不会其他视觉的变化,你可能不需要主循环。但是如果你正在写的游戏包括动画,时间或者其他自动化等等,你应该正视地考虑使用主线程。
  The main loop of a game is the part that "ticks" sub systems in a specific order and usually as many times per second as possible.
  主循环需要在自己的线程里跑动,因为所有更新UI界面的线程都必须在android主 UI线程里更新UI界面,更新界面执行的顺序通常如下:State, Input, AI, Physics, Animation, Sound and Video.
  情景的更新意味着要去管理情景的过渡,譬如游戏结束,人物选择或者下一情景。通常在一个情景你会去等待几秒钟,情景管理将会处理这些延迟和当时间到期时就设置下一情景.
  输入是通过用户操作键盘,滚动和碰触的来触发,在处理物理性质之前必须处理这输入,因为通常输入会影响到物理性质,因此首先处理输入将给游戏带来更有效的响应。在android中,主线程发生输入事件,因此你必须用代码来缓冲你的输入事件,这样主循环才有时间去执行。这不是困难的任务。定义字段,然后通过onKeyPressed 或者onTouchEvent 事件来保存下一个用户的输入。当这个输入是有效的输入时,将改变游戏的情景以及让物理性质处理响应它,来更新输入。
  AI的更新近似用户决定他们去“按”下一步。学习如何取写AI已经超出这文章的范围了,不过一般的想法是AI会像用户做的那样按按钮。这也会引起和响应物理性质的更新。
  物理性质的更新或许是或许不是真的物理。比如行动类的游戏,考虑上次时间的更新是关键点,当前时间会更新用户的输入,AI的输入已经决定所有事物是否发生碰撞。对于一个游戏,你在视觉上抓住一个物件并滑动它们,它将会是滑动的一部分,或者让它掉入其他地方。对于一个益智问答游戏,它将是答案正确与否的一部分。你还可以说出你别的什么东西,对于这篇文章所有的游戏都是这个游戏引擎的一部分。我把它指做物理性质。
  动画并不是放入一个gif动画那么简单。你需要在游戏的正确时间内描绘每一帧。这不像声音处理那样难,保存这些情景的字段比如:isDancing, danceFrame and lastDanceFrameTime 来使动画根据时间决定一下帧来更新。这是所有动画都这样做的。实际上显示动画的变化都是由视频来更新。
  声音的通过处理触发声音,停止声音,改变音量和改变声音的声调来更新。平常当写游戏时,声音的更新实际是通过产生一个bytes流来发送到声音的缓冲区,它是由android管理。因此你们可以选择SoundPool 或者MediaPlayer来使用到游戏里。They are both a little sensitive but know that because of some low level implementation details, small, low bitrate OGGs will yield the best performance results and the best stability.
  视频的更新要考虑到游戏的情景,人物的位置,分数,状态,行为和屏幕的绘画。如果使用主循环,你将要用到SurfaceView来绘画。与其他views对比,view本身会回调绘画的操作以及主循环将不得不做。SurfaceView拥有最高的帧每秒的速度以及在屏幕上最合适给游戏做动画或者移动部件的功能。All the video update should do is take the state of the game and draw it for this instance in time.  Any other automation is better handled by a different update task.
  代码是怎么样的呢,这里有个例子:
  public void run() {
  while (isRunning) {
  while (isPaused && isRunning) {
  sleep(100);
  }
  update();
  }
  }
  private void update() {
  updateState();
  updateInput();
  updateAI();
  updatePhysics();
  updateAnimations();
  updateSound();
  updateVideo();
  }
  3D or 2D?
  在开始你的游戏之前,你需要决定你打算往3D还是2D走。2D游戏有比较低的学习曲线通常更容易得到良好的性能。3D游戏需要更多深入的数学技能并且如果你不小心有可能出现性能的问题。他们还要求有使用建模工具的能力,像3D Studio和Maya。如果你打算要有形状复杂的箱子和圆圈。那使用OpenGL,Android支持OpenGL的3D编程以及在OpenGL里一定能找到很多好的教程去学习。
  Build simple, high quality methods
  在开始时一定要确定自己要避免在不要将方法写得太长。如果你遵照主循环模式,我上面所述,这是相当容易的。每个方法只能完成一个功能并保证没错误。比如:如果你需要洗桌子上的卡,你应该写个方法叫"shuffleCards",就只做洗卡的功能。
  练习代码在游戏开发中是一个很重要的部分。调试在有状态性,真实的系统里是非常困难的。尽量保持自己方法只有一个任务,不要一个方法里完成多个任务。如果你打算编写一个画场景背景的方法,可以叫"drawBackground"。这会让自己以后在复杂的系统里很快速的理解。
  It's all about efficiency!
  Performance is a major issue for any game.  The goal is to make the game as responsive as possible and to also look as smooth as possible.  Certain methods like Canvas.drawLine are going to be slow.  Also drawing an entire screen-sized bitmap onto the main canvas every frame will also be costly.  Balancing things like that is necessary to achieve the best performance.  Make sure to manage your resources well and use tricks to use the least amount of CPU to achieve your task.  Even the best game will not be very fun if it can't perform well.  People in general have little tolerance for choppiness or poor response.
  Tips and Tricks
  
Take a look at the example for LunarLander in the SDK.  It uses a SurfaceView and that would be the appropriate view to use for a game that needs the highest number of frames per second possible.  If you're going 3D, take a look at GLSurfaceView. It takes care of the OpenGL device initialization and provides a mechanism for rendering.  For LightRacer, I had to optimize the way I have everything drawn or else the framerate would be drastically lower.  I drew the background to a Bitmap only once which was when the view is initialized.  The light trails are in their own bitmap which gets updated as the racers move.  Those two bitmaps are drawn to the main canvas every frame with the racers drawn on top and then finally an explosion.  This technique made the game run at a playable rate.
  It's also a good practice to have your bitmaps be the exact size you intend to draw them on screen, if applicable.  This makes it so that no scaling is needed and will save some CPU.
  Use a consistent Bitmap Configuration (like RGBA8888) throughout the game.  This will save the graphics library CPU in having to translate the different formats.
  If you're determined to develop a 3D game but have no 3D knowledge, you will want to pick up a book or two on 3D game programming and study up on linear algebra.  At a bare minimum, you must understand dot products, cross products, vectors, unit vectors, normals, matrixes and translation.  The best book I have come across for this math is called Mathematics for 3D Game Programming and Computer Graphics.
  Keep the sound small and at a low bitrate.  The less there is to load, the faster loading times will be and the less memory the game will use.
  Use OGGs for sound, PNGs for graphics.
  Make sure to release all media players and null out all of your resources when the activity is destroyed.  This will ensure that the garbage collector gets to everything and that you don't have any memory leaks between launches of the game.
  Join the Android Google group and find community support.  There will be people that can help you along the way.
  Above all, spend time testing and retesting and making sure that every little thing works exactly the way you would expect it to.  Polishing the game up is the longest and hardest part of development.  If you rush it out to market, you will probably have a disappointed crowd and you may feel that all your hard work is wasted.  It's not possible to have 100% of people love what you write but you should at least try to put out the highest quality work that you can.
分享到:
评论

相关推荐

    android开发期末大作业.zip

    1.通过本课程设计的实践及其前后的准备与总结,复习、领会、巩固和运用课堂上所学的Android手机应用开发知识。 2.为学生综合应用本专业所学习的多门课程知识(例如,软件工程、数据库、Java语言、Java Web开发等)...

    《Android.4.游戏入门经典.第3版》PDF

    《Android 4游戏编程入门经典》囊括了成为一名成功的Android游戏开发者所需的全 部知识。本书是一本可以信赖的指南,能够帮助你在移动游戏开发中迅速“升级”。学完 本书并加以融会贯通,就能够编写出成功的Android...

    Android游戏开发教程示例-高清带目录

    书的主线是设计一个游戏,然后各个章节具体介绍该做怎样的准备等,阅读完你也应该有了一个自己写的代码的游戏了!虽然是英文版,但是学习android能不练习英文么!再加上这是游戏入门级的书籍,很容易阅读的!

    Android 4游戏编程入门经典

    《Android 4游戏编程入门经典》囊括了成为一名成功的Android游戏开发者所需的全 部知识。本书是一本可以信赖的指南,能够帮助你在移动游戏开发中迅速“升级”。学完 本书并加以融会贯通,就能够编写出成功的Android...

    Android 4 游戏编程入门经典(英文完整版)

     《android4游戏编程入门经典》囊括了成为一名成功的android游戏开发者所需的全部知识。本书是一本可以信赖的指南,能够帮助你在移动游戏开发中迅速“升级”。学完本书并加以融会贯通,就能够编写出成功的android...

    [Android开发权威指南].李宁.扫描版.pdf

    第15章 D游戏开发 第16章 有趣的Android应用 第三部分 高级篇 第17章 HTML5与移动Web开发 第18章 输入法开发 第19章 Android OpenGL ES开发基础 第20章 OpenGL ES的超酷效果 第21章 Android NDK编程 第22章 测试驱动...

    AIR_Android应用开发实战

    全书共16章,分为五个部分:准备篇(1~2章) 主要介绍了利用AIR开发Android应用之前需要了解的基本信息、开发环境的搭建,以及一个简单的AIR Android应用开发的全过程,旨在让读者对AIR Android应用开发有一个全面...

    智能移动终端应用开发设计报告Android-贪吃蛇.doc

    针对当今游戏开发的流行趋势,手机游戏的设计已成为主流,随着计算机技术及硬件 技术的不断发展,用户的需求量也越来越多,并且用户追求的效果也越来越好,在此形 势下好的设计方法尤为重要,基于android系统的手机...

    Android程序设计基础

    通过逐渐在游戏中添加特性,你将学习Android编程的许多方面,包括用户界面、多媒体和Android生命周期。..  第一部分中将首先介绍Android,内容涉及如何安装Android模拟器,如何使用IDE(Intergrated Development ...

    Android基础教程

    书中不仅结合数独游戏开发案例形象生动地讲解了Android生命周期、用户界面、2D图形、多媒体,以及本地数据存储等基础知识,而且通过“Hello, Android”项目深入探讨了外部通信、基于位置的服务、内置SQLite数据库、...

    忆术家「Memrise」v2021.6.7.0 for Android 以探索宇宙游戏为背景模式的趣味语言学习应用.rar

    是由语言专家携手顶级开发团队共同打造最佳语言课程和游戏,确保学习内容简单、有趣、面向每个人。因为如果您越是享受语言学习的过程,越是学 的多、学的快。因此将娱乐性、真实性、实用性巧妙融合,致 力为用户打造...

    Android学习项目之简易版微信为例(一)

    这里主要是和广大朋友们聊聊一个非Java程序员对Android操作系统的理解以及一个Android工程的目录结构,为进一步学习做准备。 1 缘起 智能手机的出现与普及为人们的生活、工作带来了极大的便利,我们可以用手机...

    java猜字母游戏源码-Android-Precourse-Challenge:Android-Precourse-Challenge

    java猜字母游戏源码Android Precourse 挑战 为了消除那些想要参加 Lambda 学校的人的更多障碍,我们创建了 Lambda 挑战赛。 根据我们的数据,我们有信心,如果您能完成 Lambda 挑战赛,我们可以帮助您学习编码,并...

    网狐荣耀版开发使用常见问题解答

    在网狐荣耀版系统开发,游戏开发,界面cocos和lua开发等过程后,要进行发布和打包。pc端与安卓端相对简单,苹果端的修改、发布与打包成了多数开发者的一个主要问题。下面就说说这个苹果打包的基本过程。 一、环境...

    Tap Tap Run 小鸟点点跑Unity可爱风休闲小游戏项目源码C#

    Tap Tap Run是一个完整的游戏模板,准备发布。 Tap Tap run具有令人上瘾的一键式游戏玩法和时尚简约的图形。 怎么玩 点击跳跃或改变方向 不要偏离道路 解锁新角色 特征 已有 50 个不同级别。您可以轻松制作更多关卡 ...

    HTML5移动Web开发指南.pdf

    同时也有部分准备进入移动Web开发领域的新手,苦于入门困难,而难以上手。因此,一本介绍移动Web开发的书籍便成为开发者最渴望的资源之一。 基于上述两种原因,作者认为需要编写一本能够利用HTML5新技术开发移动Web...

    Android五子棋游戏程序完整实例分析

    然后自己写了个关于五子棋的android程序,从中还是能够学习到很多东西的。现在我们开始今天五子棋程序的编写历程。 好了,我们现在开始一步步的构建出项目来,首先是如下的项目结构图: 运行的效果图: 一些前期做...

    python开发

    可以做网络游戏的后台,很多在线游戏的后台都是Python开发的。总之就是能干很多很多事啦。 Python当然也有不能干的事情,比如写操作系统,这个只能用C语言写;写手机应用,只能用Swift/Objective-C(针对iPhone)和...

    PokemonRPG:宠物小精灵RPG游戏,由cocos2d-js开发

    PokemonRPG这是一个基于cocos2d-js的游戏项目,准备开发一款模仿口袋妖怪的游戏,目前处于开发阶段。 目前仅基于jsb做ios和android下的开发,完成后才会考虑扩展到其他平台(wp, h5等等)。 如果您也对这个项目有兴趣...

Global site tag (gtag.js) - Google Analytics