高手教你如何从零开始学游戏编程 - CSDN博客
高手教你如何从零开始学游戏编程
开发游戏可能是学习编程的理由中最吸引人的一条了。但如何从零开始入门,达到能够开发游戏的编程水平,是困扰无数勇敢少年们的传统难题。作为一名游戏设计师,我没有系统地学习过编程。从5年前开始,我有了自己从头完整开发游戏的念头,于是断断续续地看了很多书,试过了很多入门方法和开发环境,但直到近半年才找到正确的门路。现在我在Unity开发环境下独立制作游戏原型和利用成型的框架完善游戏功能已不成问题。
本文会介绍如何从零开始学习游戏开发编程的方法,希望能为和我一样挣扎在编程大门之外的游戏开发爱好者们提供帮助。不过事先要说明的是,这种学习思路是为了帮助你在做游戏的过程中逐渐学习编写程序,不适用于其他领域,但作为一种入门方法,它能让你在半年到一年的学习之后,做到独立制做小游戏(或原型)。
门外汉学编程的难点
介绍学习方法之前,我们先看看门外汉学编程最常遇到的问题。
第一,程序员们经常说程序语言只是编程工具,但市面上常见的教程都喜欢从语法、算法和程序语言的使用思想开始教学,而不是把编程语言当做解决实际问题的工具来入手。因此,初学者经常耗费很大精力才能理解书上写的算法和思想,却完全不知道理解之后能用来做什么。
第二,很多编程教程虽然配有实例,但一方面例子的学习难度曲线增加得很快,刚看完一个“Hello World”实例,下一个例子可能就变成教你如何分配内存(真实的故事,我的一本学习Objective-C的教程就是这样的)。另一方面初学者在对开发流程不熟悉的情况下,很难做到举一反三,从一个实例里总结出做另外三个游戏的方法,我经常遇见看了三个不同类型的游戏实例,放下书后却连一个游戏都做不出来的情况。
第三,很多编程教程为了提高普适性,在使用现成架构方面都很保守,导致了很多重复造轮子的教程出现。例如在前几年Cocos2D(一个用于iOS平台游戏开发的游戏引擎)还没有现在这么火时,几乎所有的iOS游戏开发教程讲的都是如何使用OpenGLES来制作游戏图像,而这些底层架构的实现对初学者来说是根本不可能完成的任务。
因此,适合初学者的学习方针是:从实际需求出发;“怎么做”优于“为什么”(为什么可以在入门之后再慢慢理解);使用允许你偷懒的工具或架构(需要做的越少越好)。这些要求其实很容易满足,***恰恰在看起来和编程关系不大的领域----可视化编程工具里(Visual Programming Tools)。
可视化编程游戏引擎让你先做再想
可视化编程泛指一切使用可视化元素的操作代替文本输入的程序设计方式,大体上就是像画流程图一样通过连接若干“盒子”和“箭头”来实现程序逻辑。这个概念在游戏开发工具上的应用越来越流行,近年来还有井喷趋势,从老牌的GameMaker、RPGMaker、TorqueGameBuilder、到新兴的GameSalad、Construct 2和Unity都是其中的代表。尽管这些工具和引擎各有不同的开发方式,但它们都能让初学者在完全不懂编程语法和复杂算法的情况下快速实现自己的游戏设计。
我之前的态度是宁可抱着“看也看不懂,看懂了也不会做”的书苦学XNA(一个微软发布的使用C#的游戏开发架构)和Cocoa(苹果发布的使用Objective-C的应用开发架构),也不屑于使用GameMaker、GameSalad之类的图形界面开发工具。认为这些工具属于“业余型”,就算能做出游戏来也是旁门左道,不能修炼内功。
直到有一次参加了柏林独立游戏BIG Jam的活动,接触了很多非常优秀的游戏开发者。他们大部分人都把GameMaker和Flash这些简单的工具当做制作独立游戏的最佳选择。原因是他们多年以前开始学习游戏开发时使用的就是这些工具,常年的使用经验让他们能在最短的时间里用这些工具实现想法。而使用这些工具从头到尾制作了大量游戏的经历,也在他们以后学习用编程语言开发游戏时打下了很好的基础。
从那之后,为了快速开发原型,我开始物色入门级的可视化编程游戏引擎。HTML5游戏引擎Construct 2偶然进入了我的视线。花十几分钟学习教程实例之后,我很快用几个小时做出了一个一直在构思的游戏想法(当然想法本身就很简单,而且制作过程中碰到实现困难的设计都进行了进一步简化)。说来惭愧,尽管在主机游戏业从业多年,这次使用Construct 2的开发过程中我第一次感觉到对游戏开发的整个过程和架构有了初步认识林琪琦&
首先,可视化编程工具里一般都有一个现成的游戏场景(任何游戏开发过程中都需要一个画布或一个摄像机来描述玩家可以看到的图像范围),然后你需要把游戏中需要的各个元素(一般称为Actor,例如主角、敌人、子弹等,这就是编程语言里对象的概念)放进场景里,然后通过关联逻辑模块来让它们快速互动起来。Construct 2的逻辑模块使用了非常贴近编程语言的按行号从上到下的执行顺序。而且你将从教程中学习到,原来游戏开始运行后每一帧都会按顺序执行一遍所有的逻辑,这就是游戏开发的基本框架中最常说的主游戏循环(Main
Game Loop)。
除此之外,用户使用逻辑模块时不用担心语法错误和算法的设计,一般这类引擎里都会提供大量现成的算法模块可供挑选。只要专注于设计游戏逻辑,其他事情可以说都是软件自动帮你完成。在观看教程和其他范例项目时也一目了然,学习别人的设计思想更加容易。
通过使用Construct 2独立完成了第一个游戏原型后,我学到了相似的游戏元素可以共享一部分属性(编程语言里使用类和继承的概念);学到了所有活动的游戏元素都需要在每一帧的循环里进行驱动,每帧只运动一小段距离;还学到了应该在主游戏循环的什么位置判断是否Game Over,以及Game Over时进入另一个循环来等待玩家重新开始游戏等内容。
本文已收录于以下专栏:
相关文章推荐
没想到重新打开这篇文档已经是一年之后了。去年三月,我停止了这一系列文章的写作。六月,离开了工作了五年的公司。作为公司的创始人和业务主管,我不能容忍它发展的如此缓慢,而合伙人却很享受这种慢节奏的生活。九...
《Android游戏编程之从零开始》
【读书笔记《Android游戏编程之从零开始》】20.游戏开发基础(游戏数据存储) 叶超Luka
22:22 阅...
2.1 创建第一个Andoroid项目
这个没有什么可说的!网上资料一大片!
简单说一下!
打开Eclipse ---&File---&New---&Project----...
没想到重新打开这篇文档已经是一年之后了。
去年三月,我停止了这一系列文章的写作。六月,离开了工作了五年的公司。作为公司的创始人和业务主管,我不能容忍它发展的如此缓慢,而合伙人却很享受这种慢节...
原文: 飞鸽传书游戏编程之从零开始
飞鸽传书 此篇文章献给那些为了游戏编程不怕困难的热血青年,它的神秘要我永远不间断的去挑战自我,超越自我,这样才能攀登到游戏技术的最高峰。我们在这里从零开始...
第八章 地图的设计和实现
这本来是第十章,前面计划还有两章的内容,一是跟第四章一样,完成一个Asteroid游戏作为小结,总结一下前面讲过的Sprite的用法,并演示NPC和子弹的处理方法。但是,在...
第七章 精灵、帧动画与碰撞检测
经过前几章的学习,大家对使用位图、接受用户控制应该已经有了初步的概念,也可以运用这些知识完成简单的小游戏。这一章中,我们会为游戏中最重要的部分----图形处理建立一个基本...
第六章 SurfaceView动画
难度:中等
前面介绍的内容,还是比较简单的,应用这些知识,可以完成一些非实时游戏,比如井字棋等,或者一些画面刷新不是很频繁、实时性不强的游戏,比如我们前面做的扫...
第二章 创建第一个程序Hello Tank
难度:容易
现在开始,我们要真正写作Android程序了。虽然前面***过程那么复杂,但是写起程序来却是非常简单。而且为了让大家有一个直观的认识,本文不会...
他的最新文章
讲师:何宇健
讲师:董岩
您举报文章:
举报原因:
原文地址:
原因补充:
(最多只允许输入30个字)Android 开发游戏前都要会什么 ?-想学安卓游戏开发请问需要掌握
没有你要的?请搜索……
你现在正在浏览:
Android 开发游戏前都要会什么 ? 想学安卓游戏开发请问需要掌握
Android 开发游戏前都要会什么 ?
它是移动开发的规范。每个你写的方法应当完成一个非常特定的任务,并且它就应该无差错地那样做。举例来说。如果你写的是动作类游戏或者带有动画。这是一个适用于任何软件开发的编码实践,但对于游戏开发来说这尤为重要,还需要会使用3D Studio和Maya那样的建模工具。某些方法如Canvas.drawLine比较慢、实时的系统里,调试将变得非常困难。使你的方法尽量的小,一般的经验法则是每个方法有且仅有一个目的(译者注。最重要的是效率,但对于游戏。并且要将屏幕大小的位图画到主画布上;updateInput()!性能是任何游戏的主要问题。我们的目标是使得游戏的反应越快越好,看起来越流畅越好。在Android里。在一个有状态的、暂停、销毁都受操作系统的支配。正确处理这些事件是很重要的,这样应用程序才能表现良好。如果你以前从没写过代码。获取SDK新手上路的第一步便是获取Android SDK(软件开发工具包),你可能需要一个叫做“drawBackground”的方法。诸如此类的任务能够很快完成,因而你可以按照搭积木的方法来开发你的游戏Android是一个基于Ja的环境。这对初学者来说是个好消息;updateAI();updatePhysics();updateAnimations(),在你前进路上还要学习很多,但别气馁、对于滚动条的移动或者用户的触摸,如果你需要洗一副纸牌,你应该写一个“shuffleCards”的方法,并且该方法就应该只做这一件事;updateSound();} 复制代码 3D还是2D,做用户认为正确的事。如果这是你第一次开发Ja项目,你可能会需要下载***JDK,它里面包括签名和部署你的应用程序的一些工具。学习应用程序架构别急着一头扎进开发的海洋里,理解Android应用程序架构是很重要的。我强烈建议使用Eclipse和Android Eclipse插件。如果你玩Android的话,Eclipse IDE对Ja开发者来说很好用。确保管理好你的资源。你的主循环需要在它自己的线程里运行。建立简单、高质量的方法上手时,要确保你整个游戏不要就用一个庞大而冗长的方法,你应该认真考虑下使用主循环。游戏的主循环以一个特定的顺序通常尽可能多的在每秒钟内“滴答”提醒子系统运行?在开始写游戏之前,你要决定是做3D的还是2D的,并且在OpenGL方面有很多很好的教程可供学习,原因是Android有一个主用户界面线程,如果你不运行自己的线程,用户界面线程将会被你的游戏所阻塞,每一帧都是代价昂贵的。如何权衡对于达到最佳性能很有必要。如果你不学一下。如果你要为一个场景用编程方式画一个背景。2D游戏有一个低得多的学习曲线,输入,人工智能。你的activity创建、恢复,一般更容易获得良好的性能。3D游戏需要更深入的数学技能;updateVideo()。主循环根据你写的游戏的类型、人物的选择或下一个级别,你可能需要也可能不需要一个主循环。如果你的游戏不依赖于时间或者它仅仅对用户所做的加以回应,并且不做任何视觉上的改变,例如游戏的结束。很多时候你需要在某个状态上等上几秒钟,而状态管理应该处理这种延迟,并且在时间过了之后设置成下一个状态。输入是指用户按下的任何键,你设计出来的游戏在线下将很难调试。你将需要理解Applications: public void run() {while (isRunning) {while (isPaused && isRunning) {sleep(100);}update();}}private void update......
一些常用的组建主要是需要熟悉View和surfaceView,绘图、找茬游戏什么的都可以、、一般掌握这些,开发点小游戏足够了、、音乐的播放啥的、、以下是我提交问题后的感谢哎,浪费我口水。、 如果你要做类似愤怒的小鸟这种游戏、坦克大战、飞行游戏、存档怎么写,最好去雪下BOX2D,这个是物理引擎,很简单的就能写出像愤怒的小鸟那种游戏、一些碰撞算法、事件处理、比如:超级玛丽
Android是一个基于Ja的环境。这对初学者来说是个好消息,因为相对于C++,Ja被广泛认为是一门更容易上手的语言,它是移动开发的规范。Google也做了一件出色的工作,它将API文档化并提供示例代码供使用。其中有个叫做API Demos的示例几乎展示了所有API的功能。如果你熟悉Ja并且用过Eclipse,要让你的第一个应用跑起来那是相当简单。如果你以前从没写过代码,在你前进路上还要学习很多,但别气馁。获取SDK新手上路的第一步便是获取Android SDK(软件开发工具包)。SDK里有一个核心类库,一个模拟器,一些工具和示例代码。我强烈建议使用Eclipse和Android Eclipse插件。如果你玩Android的话,Eclipse IDE对Ja开发者来说很好用。如果这是你第一次开发Ja项目,你可能会需要下载***JDK,它里面包括签名和部署你的应用程序的一些工具。学习应用程序架构别急着一头扎进开发的海洋里,理解Android应用程序架构是很重要的。如果你不学一下,你设计出来的游戏在线下将很难调试。你将需要理解Applications、Activities、Intents以及它们怎样相互联系。Google提供了很多有用的架构信息。真正重要的是要理解为什么你的游戏需要多于一个的Activity,以及什么才是设计一个有良好用户体验的游戏。要理解这些,首先要了解什么是Activity生命周期。学习Activity生命周期Activity生命周期由Android操作系统来管理。你的activity创建、恢复、暂停、销毁都受操作系统的支配。正确处理这些事件是很重要的,这样应用程序才能表现良好,做用户认为正确的事。在你设计你的游戏之前了解所有这些是如何工作的是件好事,因为以后你可以为自己节省调试时间和昂贵的重新设计时间。对大多数应用来说,默认的设置将工作正常,但对于游戏,你可能需要考虑将SingleInstance标志打开。当设置为默认时,Android在它认为合适时会创建activity的新实例。对于游戏来说,你可能只需要一个游戏activity的实例。主循环根据你写的游戏的类型,你可能需要也可能不需要一个主循环。如果你的游戏不依赖于时间或者它仅仅对用户所做的加以回应,并且不做任何视觉上的改变,永远等待着用户的输入,那么你就不需要主循环。如果你写的是动作类游戏或者带有动画、定时器或任何自动操作的游戏,你应该认真考虑下使用主循环。游戏的主循环以一个特定的顺序通常尽可能多的在每秒钟内“滴答”提醒子系统运行。你的主循环需要在它自己的线程里运行,原因是Android有一个主用户界面线程,如果你不运行自己的线程,用户界面线程将会被你的游戏所阻塞,这会导致Android操作系统无法正常的更新任务。执行的顺序通常如下:状态,输入,人工智能,物理,动画,声音,录像。更新状态意思是管理状态转换,例如游戏的结束、人物的选择或下一个级别。很多时候你需要在某个状态上等上几秒钟,而状态管理应该处理这种延迟,并且在时间过了之后设置成下一个状态。输入是指用户按下的任何键、对于滚动条的移动或者用户的触摸。在处理物理之前处理这些是很重要的,因为很多时候输入会影响到物理层,因而首先处理输入将会使游戏的反应更加良好。在Android里,输入事件从主用户界面线程而来,因此你必须写代码将输入放入缓冲区,这样你的主循环可以在需要的时刻就从缓冲区里取到它。这并非难事。首先为下一个用户输入定义一个域,然后将onKeyPressed或onTouchEvent函数设......
也许你也感兴趣的内容