我想开发一款具有盈利能力的弹射手游动作手游,希望找几位美工和程序一起实现。

此页面上的内容需要较新版本的 Adobe Flash Player。
最新开发文章
最新信息推荐
上市公司专栏
实时股价每分更新
纳斯达克(美元)(市值:亿美元)
综指: 涨跌幅:
恒生指数(港币)(市值:亿港币)
综指: 涨跌幅:
综指: 涨跌幅:
谈休闲游戏策划案的编写
作者:戴波02-25-2010
  对有志于游戏策划工作的初学者,一般不建议一开始就进行大型游戏、特别是大型网游的策划编写,因为策划初学者不仅不能很好地掌握大型游戏策划的结构与规律,还很可能因为编写的文案有明显错误而导致信心全失。所以,对于策划初学者的建议是,先从策划一款小游戏开始,逐步把握策划的编写要领,步步深入,最后才有可能独立完成极具商业价值的大型游戏的策划文案。
  什么是休闲游戏
  所谓休闲游戏,笔者认为它是玩家以休闲为主要目的、游戏规模小、开发周期短、功能相对单一的游戏产品。小型的休闲游戏主要以棋牌游戏为主,还包括现在比较流行的《连连看》、《找不同》、《台球》等等;值得一提的要算从家庭游戏机《炸弹人》改编而成的众多作品,比如《QQ堂》、《碰碰帮》、《泡泡鸟》、《炸弹超人》、《咕噜咕噜》、《冰冰帮》、《哔哔曼》等,《疯狂坦克》、《百战天虫》等作品也在国内休闲网游占了一席之地,它们虽然规模已经算得上中型,但究其本质仍可列为休闲游戏的范畴。不是以为休闲游戏主要是益智类作品,动作类、格斗类游戏仍然可以做成休闲游戏——只要它是规模小、功能相对单一的休闲作品,比如众多的FLASH游戏作品,什么《拳击》、《打企鹅》、《钓鱼》;再比如手机上的《贪吃蛇》、《沙罗曼蛇》,都可认为是小型休闲游戏。
  国内规模较大的休闲游戏运营商有腾讯科技、联众棋牌、新浪网等,用免费的旗号吸引了众多玩家的眼光,人气十分兴旺。项目规模的大小并不是决定企业获利的决定因素,联想到其它行业,比如小小的纽扣,在浙江就能做出规模巨大的钮扣市场,日交易量十分惊人,这就不得不让人感叹:几厘的价值居然就产生了数百万的利润。所以,哪怕是再小的作品,只要有它存在的价值,就一定能创造出市场,进一步创造出远景利润。
  对于休闲游戏而言,一般是在非常简单的规则与操作基础上,衍生出复杂多变的状况。说得玄妙一点,就是从“不变”到“万变”,不变的是规则,万变的就是过程的随机性。我们用《连连看》和《找不同》做为例子来比较一下。《连连看》的规则非常简单,找到界面上画面相同的两个目标,只要它们之间的连接线段在三折以内,目标即可消除。但在简单的规则上,却因为每局内的目标均为随机分配,玩家要以最快的速度完成目标消除任务也非易事,这样就达到了锻炼玩家手、眼、脑的灵活性的目的;而《找不同》在电脑上的制作明显不如人意:它的规则同样简单,在左右两个画面上找出其中的几处不同即可;但电脑上的《找不同》有至少两项弱点,一是每局画面上的不同之处都比较固定,多玩几次就知道它们在什么位置,二是电脑上的画面远不如街机版的《找不同》,没有那种大气和趣味性,在电脑上玩《找不同》,画面虽然精细了,但往往一笔一划都会成为不同的地方,判断起来费力,简直有点游戏玩人的感觉。笔者觉得最经典的休闲小游戏,还是要算《俄罗斯方块》,它以非常简单的几种方块类型和非常简单的操作以基础,却能产生出极强的变数,以致它成了全世界玩家数量最多的游戏之一。作为策划,在进行休闲游戏的设计过程中,就应该掌握与其它类型游戏不一样的开发特点,把握休闲游戏的脉博,这样的游戏才称得上能经受住市场考验的作品。
  有些策划初学者一接触策划工作,往往会急于知道一个问题:我的策划案应分几个部分,从哪几方面入手?其实,策划文案并没有固定公式化的格式,它不但与编写者的写作习惯有关,而且还与游戏的类型、规模有莫大关系。所以在进行策划案的编写时,初学者完全没必要缚束自己的手脚,只要尽可能把自己想表达的思想按一定框架清楚地记录下来就行了。
  策划案编写没有固定模式
  许多资深策划积累了大量编写经验,形成了独特的写作风格。那么,作为策划初学者又应该如何确定自己的编写风格呢?我的个人意见是,编写策划案,尤其是策划总案,主要目的是要把自己所思所想尽可能完整地表达出来,让人看完文案后就能在头脑中形成比较清晰的游戏全貌,能让投资者看到这款游戏的商业价值,能让其它人一看就产生想玩的冲动(编者注:对于参加大赛的策划案作品,能打动评委的心也很重要哦:))。能达到这一步,我想就已经足够了。有的朋友在学写策划总案时,喜欢洋洋洒洒数万字,甚至数十万字,看着看着就很让人汗颜,总觉得自己以前的东西都很有偷懒的意味。策划总案,我觉得是写给资方、上级管理层、所有开发团队看的,主要是表达策划对整个项目的想法,能清晰地构勒出游戏的概貌;至于过于纷繁的技术细节,我想,还是交给执行策划来做吧。把策划总案与策划分案区别开来,有个最好的好处,就是节约开发前期的准备工作,能够留出大量的时间来让资方、上层机构、开发团队就总案进行讨论,尽可能修正总案中的偏差,保证总案的可执行性;至于细节部分的策划,可以与程序、美工同步交互进行,在设计过程中反复与程序、美工协商,以便达到合作无间的目的;同时,也能给执行策划更多的思考空间,思维不会受到总案过于细腻描述的束缚。当然,策划总案是否有必要简化,视策划者的偏好而定,也欢迎各位同好交流指正。业界有这样的冷笑话流传:要让公司认为你的策划案有份量,那就得尽可能拼凑字数,弄个几万、几十万字,装订成厚厚的一本,使所有人都用非常肃穆的神情双手去接你的案子。
  除了策划自身特有的写作风格外,游戏策划案的结构还可能因为对象的改变而有所变化。
  它可能根据针对游戏的类型不同而有所侧重:比如角色扮演类游戏,可能比较注重世界背景、人物分析、故事剧情、关卡等方面;格斗类游戏,可能主要从角色的数据系统、招式系统、碰撞检测等方面入手;网络游戏,可能主要强调世界的构建、交互系统、战斗系统、任务系统、角色成长系统等方面。
  它还可能因为项目规模的不同而有所侧重:对于超大型游戏项目,涵盖的项目内容比较丰富,因此在策划总案里可能需要列出比较多的系统模块,比如战斗系统、生产系统、生活系统、魔法系统、战斗系统、任务系统等;对于中型游戏项目,会将注意力放在比较重要的几个功能方面,比如手机交友互动游戏,重点可能就在于对支持平台、交互手段、数据库需求等方面;对于小型游戏项目,则强调它的简短、明快,以比较少而集中的几个卖点来支撑整个游戏。
  以上说这么多,无非想说明根据实际情况的不同,策划可以采取不一样的文案结构来进行编写,初学者大可不必为了统一文案风格而烦恼。还是回到我们的主题,要做好休闲游戏的策划工作,笔者有一些相关建议,提出来和策划爱好者们交流一下。
  掌握一定策划原则
  休闲游戏有它自身的一些特点,要做好策划工作,就必须先了解它的这些特性,达到“知已知彼,百战不殆”的目的。笔者试着对休闲游戏做一些策划方法的归纳,不妥之处,欢迎赠送砖头、拖鞋。
  一、“小”。休闲游戏决定了它是属于开发周期短、功能模块相对单一的游戏作品,因此首先要把握住的原则就是要控制住项目的规模。游戏开始设计的时候就抓住自己认为很不错的创意,不要因为考虑到其它卖点而影响了原来的思路,成为“掰玉米的猴子”;也不要把许多游戏的特点全参考进来,形成一锅大杂烩,这样反而使游戏产品的卖点不突出。作为策划,脑子里闪过的第一个创意往往是很有市场潜力的,在进入细节思考的时候就不要脱离了既定轨道,到最后连自己都搞不清自己要表达的主题,同时,所有过于繁琐的设计均不可取,项目突出1、2个亮点即可。在项目类型的选择上,尽量以简单的规则、简洁的画面、轻松的操作为主,不要一来就考虑诸如角色扮演、即时战略、网络游戏等复杂的类型。
  二、“专”。由于受到项目规模的限制,策划的创意不宜过于复杂,大而全不如小而专。初学者最容易犯的一个毛病就是不能有所舍弃,头脑里每冒一个新的念头,都觉得非常好,于是添加到策划案中,久而久之,就形成了线索非常多、结构复杂、涉及面广的东西,最先确定的方向完全被打乱了,不要说别人,就连自己都很难搞懂自己的真实意图。因此,策划初学者在策划过程中,尽量使创意显得清晰,一条主线贯彻到底;忌杂乱无章,多而平庸。以什么类型游戏为题目,则尽量避免掺杂其它要素,使游戏作品专一化;对于确实非常有市场潜力的其它创意,可以先放一放,等这个项目完成了再另设计一款游戏来实现。
  三、“强”。所谓强,就是要尽量避开开发团队的弱项,以自己的强项来代之,优秀的策划应该做到正确估量自己团队的实力,找到什么是自己的优势,什么是自己无法克服的弱点,并考虑进策划案中,以使项目开发在设计之初就避开不足之处,确保项目开发的顺利进行。目前国内的许多游戏开发工作室,有可能会面临一个问题,即美工力量的不足。相对于策划、程序,美工可以选择的就业机会要大一些,比如广告公司、某些形象设计室等等,如果工作室前景并不看好,就不容易招到有实力的美工;那面对美工力量的不足,作为策划应该如何解决呢?在具体策划过程中,应尽可能以策划技巧来代替美工的不足,打个比方:中国的水墨山水画不同于西方的写实风格,在表现山水风光时不用把山上的树木画得清清楚楚,简单几笔勾勒便体现了画面意境;游戏策划也一样,要表达一座大山的雄伟,不必让美工把它完全画出来,可以通过边角显示、或者角色的旁白等烘托出来,至于最后的效果就要看策划的能力水平了。策划一定要照顾到技术实现的可能性和美工力量的大小,有些项目虽然很有创意,但若对我们的开发要求很高,则不可取。
  四、“严”。一个有经验的游戏开发团队,可能半个月就能完成一款休闲小游戏,没有经验的人也能在三个月左右完成项目,如果项目开发的时间实在太长,就很可能使开发团队失去动力,项目开发最终流产。所以,项目在整体上花费的时间必定不长,留给策划的时间也会较短,那么,在短的时间内设计出完备的策划案,这就要求策划初期拟定严格的策划思路和项目开发计划,保证项目开发方向的稳定,也保证按期完成各项开发任务。在规定的项目计划时间内,召集团队相关人员进行及时、严格的可行性讨论,审核无误后,立即作为定稿封存,则此后的一切开发将围绕它进行,尽可能不再作大的改动;即使项目开发中期,发现原策划案的一些失误,也只能尽量在小范围内修改,不能触及内核。如果策划认为确实有必要进行大的改动,那对项目开发很可能就是毁灭性的灾难,所以把握住策划大局对于休闲小游戏的生命力是一个至关重要的问题。
  五、“全”。即使是小型游戏,也必须做到项目的整体完善,换句话说,就是要使项目具备独立发售的可能。这里引发的是另一个话题,即一个团队或者个人打算做休闲小游戏的初衷是什么?不论是为了获取经验,为了证明自己能行,还是为了出售产品,都应该严格按照游戏开发流程来进行,只有按照正规的开发步骤做项目,才能让开发者获得更多的开发经验,明白项目管理、软件工程的重要性,也能为自己下一步进入游戏公司或者开一家属于自己的游戏公司打下扎实的基础。所谓“全”,就是要事前有开发设计,主要是策划文案,项目开发计划等;事中有开发记录,主要是程序代码必备的注释和日志,人事管理档案,项目变更原因及处理等;事后有开发总结,通过这些档案资料,能清晰地看到一个项目是如何启动、实施并最终结束的,能真正为团队的成长提供规范的开发模式,增长参与成员的开发经验。
  把握住休闲小游戏的一些设计特点后,就需要策划能有天马行空的思想,创造出其它人没有想到的好点子,成为游戏独特的卖点。所以,作为一名策划,就应该随时保持头脑的灵活,那么,随时有必要进行这样的脑力锻炼:
  找一个灵感
  根据以上的策划原则,希望初学者能获得一些有用的策划经验。在此基础上,让我们来做一下脑力激荡,看看如何能把一个突发的灵感转变为一份有价值的策划文案。
  首先要知道灵感是从何而来?灵感的获得,通常是有所见、有所闻,然后才能有所思;对于策划初学者,最直接获取灵感的方式恐怕就是赏玩其它游戏的时候所得了。所以,灵感最简单的方法就是从其它游戏中直接获得,或者换一种说法,初学者最常用的一种方法就是去模仿其它游戏的特点,不论是其它游戏的形式还是技巧,只要能“取其精华,去其糟粕”,形成自己的风格就行了。如果对某款游戏的某项设计非常喜欢,那就证明对它的第一印象很深刻,容易沟通和理解,毫无疑问,这就是已经得到了一个灵感。
  记得PSP机上有一款水口哲也的作品,叫《lumines》的游戏,说简单点,它是一款俄罗斯方块的模仿品;如果描述再准确点,它是一款“光与音结合”的方块游戏,也就是在方块操作的基础增加了比较酷的光影效果和动感十足的音乐,它们将会根据关卡的不同而出现激烈或轻柔的变化。回头看一下有关策划休闲游戏原则的建议就会发现,水口哲也的作品也遵循了这些规律:比如“小”,这款作品就专注从俄罗斯方块基本规则入手,抛开了其它游戏规则的诱惑,这里不由让我想起一位程序员朋友说过,俄罗斯方块只是给程序新手们练习用的东东,其实只要挖掘潜力,老瓶也能装新酒;“专”,这款作品完全从方块+音乐的角度出发,条理清楚,结构简单;“强”,水口哲也最厉害和最喜欢做的事就是在游戏中加入音乐元素,这当然是他的长项了;“严”,从游戏开发的出发点来看,他始终贯彻了音乐方块的原则,严格把握了开发思路;“全”,游戏分为单人模式、双人模式、与电脑对战、拼图模式,卖点方面还有对不同关卡音乐的收集等,最终形成了一款可以上市获利的作品。
  如果对这款作品比较感兴趣,那该如何入手,吸取它的特色为已用呢?
  它的主要特点在于将音乐这一全新元素灌注到游戏中,让游戏者的视觉和听觉得到充分的感官刺激,达到眼、耳、手的多方位享受,所以构思上要以俄罗斯方块为基本操作规则,以增强音乐表现力为卖点。在做出的这个游戏里,玩家如果不开音乐就变成了单纯的玩普通俄罗斯方块了,所以在模仿的时候,在表现方面再加强对画面视觉冲击的创意。
  首先要考虑的是,如何把所见转变为所听?为了达到这个目的,可以从方块入手,把可见的方块与音乐绑定在一起。众所周知,音符有七个,因此可以用七种方块的基本结构来分别赋予特定的音符,具体可参见图(方块与音乐联系的建议);再扩展开来,根据音符的高、中、低音,再扩展出更多、更有趣的方块形状,这样游戏就会显得更大气了。
  我们有了基本的音乐元素,就需要有一定的空间来组合它们,这就是策划常说的创建世界的过程。对于音乐方块,它存在的世界应该是非常简单的,我们可以根据自己的喜好,把它放在某种风格的世界中,比如背景为星空世界、海洋深处、卡通的蘑菇世界,这些只是很随意的构想,只是为了烘托自己作品的目的。为了加强游戏的冲击力,我们不妨考虑一下将它放在工厂为背景的环境中,以金属冷色调的质感加上重低音的音效为视听冲击,总体上就基本形成了自己一定的风格。
  笔者一位朋友也比较喜欢水口哲也的这款游戏,所以他模仿做了一款,有兴趣的朋友可以在这里下载赏玩:。
  最后,给策划初学者们提一些个人建议,希望能有一点帮助:仿做游戏之前,首先要看这是什么样的游戏,它涉及范围有多大,风格是什么,特点有什么,再据此找到符合的依托物——即游戏的世界,最后才是各项细节方面的设计,在不影响程序与美工的基础上再搞些小花样,增强游戏气氛。
相关新闻:
相关专题:
<button style="border:2px solid #background-color:#margin-right:10" onclick='javascript:var _title=document.var _url=document.location.if( document.all ) {var _text=_title+" - "+ _clipboardData.setData("Text",_text);this.innerHTML="已经复制成功,请用 Ctrl+V 粘贴";}'>复制本文地址推荐给朋友
收藏这篇文章游戏美工吧-百度贴吧--这里才是游戏美工交流和学习的园地。--不管你是游戏策划还是程序猿,或者你是有着天马行空想象力的特效师,亦或是原画概念设计师,又或者是一个强大的3D美工。即使你什么都不会,只是来学习
感谢你与本吧的一同成长
签到排名:今日本吧第个签到,
本吧因你更精彩,明天继续来努力!
本吧排名:
本吧签到人数:28
可签7级以上的吧50个
本月漏签0次!
成为超级会员,赠送8张补签卡
连续签到:天&&累计签到:天
超级会员单次开通12个月以上,赠送连续签到卡3张
这里才是游戏美工交流和学习的园地。
小编多次跟大家讲手游市场的潜力很大,现在的形式不管怎么否认,也不得不面对现实了,手游才是目前
原画和建模哪个方向好一些? 大一在读 要分方向,我建模好一些,可是学长和老师都说原画一定要好
几个大学狗在自学unity和c#,初次尝试,打算做一个2d的像素游戏(不考虑做得多好看。美工难度太大,目
人物原画、场景、UI图标、动作特效、等整包d都可以做,Q版、中国风、写实、欧美风、日韩风等通通可以~
我和几个朋友一起正在做一款手游,我们的设计团队和程序猿们很强 (O_O) 。想问下有木有美工愿意入伙一
地点江西高安,有回乡想法的同学不妨交流交流,已有项目,有程序,缺个美术 QQ:
绘画风格偏漫风,时髦感例如(女神异闻录),顺便配音和视频制作也是会的。如果有喜欢的可以留下号
团队正在开发一款RPG武侠类2D手机网游,游戏框架已搭建完毕,现在缺少美工,欢迎有兴趣的美工朋友合作
找一名外包 棋牌游戏APP美工 详情联系 QQ: 要求地区在杭州
Mark Crilley的漫画教程、插画教程、画面艺术处理,和各种上色技巧。 还在等什么,留下mail 先到先得
【资源共享】------cgwang王氏教育集团--绘学霸app
需要的留mail~~
有没有想一起开制作组的,暂时想法是做一个以多游戏共用一个巨型世界观制作的游戏群组,目前第一档
利润均分(55开)、成本均摊(游戏的icp、文网文、软著和版号都是成本,前期我可以先垫着,等收入了再
请问公司是更喜欢传媒大学的还是理工大学的,游戏设计方面的
美工被别的公司挖了 寻多名游戏美术 2D的 DEMO己完成大半 求加团 团队实力雄厚 工作量不多 可异地完成 有意者加Q
一 【从入门到精通游戏美工视频教程】下载地址: 教程下载地址在本帖一楼,二楼,三楼 记得来看,有
想找个人拜师 带我入门,一年内我可以帮师傅跑腿 做家务 接送小娃娃 我上过半年的培训班,3dmax ps 会一
想找个人拜师 带我入门,一年内我可以帮师傅跑腿 做家务 接送小娃娃 我上过半年的培训班,3dmax ps 会一
地点长沙,有回乡想法的同学不妨交流交流,已有项目,有程序,有策划,缺个美术,要求精通APPIU设计,
接游戏动作外包咯,3d,2d 都ok,有需要加q
寻武侠文字游戏美术合伙人。 先介绍下自己,我是程序员,做了5年游戏,天天打工总感觉没太多意思,就
我是一名《游戏开发专业》的大学生,因为编程很是差劲,想在游戏美工方面发展,而且没有画画的基础
来一个2d游戏美工师。联系我。最近在开发一个2d游戏。联系我吧。qq
本人是一名英语应届生,女生,对游戏很感兴趣,所以想学。但有几个问题想请教,第一,在北京有哪些
个人简介: 大家好,本人简称Q。 我是一名在加拿大工作的3D+2D游戏美工,工作经验已经有3年多了,白天全职工作是在游戏公司里什么都做(策划,设定,3
有人吗,新人一枚,锐核带薪内培生靠谱吗,做次时代的
学次世代的看这
青岛半城隶属于上海半城信息公司,是上海半城信息公司于2016年在青岛开设的分公司,青岛半城的公司法
观众老爷们,有没有想一起做游戏的萌新们,当然,现在考虑的是完整的做个小东西练练手,然后才会去
个人承接游戏动作外包咯
画渣一枚有没有可以一起进步交流的
现有程序三枚,寻找有创业意向的3d游戏美工合作,有意向者请加我的Q群。要求有一定的基础,能
想问下美工一般都是妹子吗
新手程序员寻找新手美工,一起进步与组团,和新手美工捆绑签署第三方合同。 个人情况介绍: 计算机批
如题,懂ps就可以,主要是负责写几个页面的按钮对话框这样,当然也有工资。工作量不大,也支持远程合
坐标广州天河,游戏行业寻找广告投放和高级广告设计师。有意向请联系我
我看了下无尽战区的角色,人设很漂亮 还有天谕的人设也是很不错的,但是无尽战区的英雄角色更多,天
青岛太仑游戏—TALENT GAMES是一家源自北京的游戏CG外包和研发公司。我们拥有完整的游戏CG美术团队,为不
吼……吼……吼,有想法的在楼下吼一声……想一起努个力
找一个游戏美工一起做个武侠游戏,周期比较长需要组建线下工作室,qq要求有梦想的伙伴一起奋斗
队伍正在开发一款rpg游戏,现在缺少美工,所以在这里招募美工 大家都是学生党和上班族,我们并不知道
下面要给大家介绍的是在Ask ZBrush里用 Actionline对齐摄影机,此技巧来源于ZB官方油管频道,考虑到有些人看
小树技术工作室招募美工了。要来从速!
你可能感兴趣的吧...
发贴红色标题
签到六倍经验
更多定制特权
兑换本吧会员
吧主,解锁更多会员特权
本吧专属印记
定制名片背景
名人自动顶贴
定制头像边框
兑换本吧会员
赠送补签卡1张,获得
助攻总额: 43W
贴吧热议榜
发表后自动分享本贴
使用签名档&“美工程序员(Desingineer)” -& 创业公司努力寻找的传奇人物。这些人既能做UI、UX,也能做前端、后端编程。
这是著名投资人的一条Twitter。
很多创业者不厌其烦的问我,“我们需要一个设计师,他要能会HTML5,CSS3,Javascript,以及Python/Ruby。”我通常的回答是,“你在寻找一个天才,你应该把你的要求分成(i)一个懂得HTMLCSS的设计师(ii)一个程序员,和(iii)一个专职的Javascript程序员。”
正如Chris所说的,像这样同时擅长(暂不要求精通)设计和编程的人既传奇又罕见。他们能独立的完成任务,极具价值,十分难得。
我有幸曾跟少数几个这样的人一起共事过,他们所有的事情都做的很漂亮。我尝试同时涉足这两个领域,但永远达不到他们那样的水平,跟天才还有很大的距离。
如果你发现了这样的人,这样的同时在设计和开发两个领域都表现的不错,或能轻松的取得进步的人,给他们想要的一切,把他留在身边。他们是最稀有品种。
你认为呢?你认识多少“美工程序员”?
[英文原文: ]
分享这篇文章:
你也许会喜欢这些文章:
对于这篇文章,你的反应是:
You had mail.
Paul read it, so ask him what it said.
本作品采用进行许可。
备案信息:京ICP备号 &&京公网安备00号
感谢你的参与互动。2D动作游戏开发与实现(翻译)
原文太长,所以将翻译与原文分成了两部分, 主要是讲2D游戏瓦片规则及不规则渲染与角色碰撞原理的。
因为单纯的2D游戏开发过于简单,所以本文尝试结合不同的2D平面游戏并将之归类,列出他们的优缺点,然后讨论下一些实施的细则。长远目标是在2D平面游戏开发方面的指导做的十分全面。如果有任何建议,更正,要求或者补充,请留言!
声明:有些文章的信息是通过反编译引擎的,并不是通过代码或者编程者本身。很有肯能他们不是通过这种方法实施的,只是看起来是这样而已!并且游戏tile的大小是为了游戏逻辑设定的,和实际是有出入的!四种方案
由简单到复杂,我先将我知道的四种2D游戏常见实施方案列举出来:
方案1: 纯粹的瓦片渲染
在这种模式中,游戏角色的移动范围其实是完全被地图Tile限制死的,正常情况下,角色绝对无法站在两片相邻Tile的中央的位置。
而我们肉眼所见的渐进式角色移动(动画),也只是为了让游戏看起来比较流畅的权宜之计,它最终到达的也只是某一瓦片的范围之中,而不可能同时定位于两块瓦片之间(比如角色可以在(0,1)和(0,0)这两个坐标间任意移动,但每次实际的位置判定只能取这两个坐标之一,不能出现位于(0,0.5)这种定位情况)。
这种方案是最容易实施的,但暴露了很多严重的角色控制方面的限制,尤其是做传统动作游戏时,这是肯定不适合的。不过,这种方案在处理像素风的游戏或者卡通风格的游戏中却出乎意料的受到欢迎。
例子:波斯王子,Toki Tori, Lode Runner, FlashBack
如何实现?
因为地图是网格状的,所以每一块Tile区域(通常以2维数组形式存在)都存储都着是否是障碍物,能否通行的信息。
当然,有时也可以额外包含用什么图片表示,角色在此处脚步声音的信息,以及其他种种。一般来说,在这种模式中的游戏角色和其他游戏用单元通过一套统一的切图表示(素材由统一的纹理切分而来),但游戏角色或游戏单元占用多少地图瓦片却是不固定的。比如在Lode Runner这款游戏中,游戏角色占用的地图区域是1X1的Tile。
而在游戏Toki Tori中,游戏角色则占用了2X2的Tile。至于在Flashback中,由于背景用了不常见的小Tile,游戏角色甚至变成了2个Tile宽,站立的时候5个Tile高,匍伏的时候3个Tile高。
通常在这种类型的游戏中,游戏角色很少会进行对角线移动。但如果将移动分解成两个不同方向,也还是可以做到的。类似的,每次角色移动时只移动一像素位置是很常见的做法,而连续的快速移动,我们则可以通过多次移动像素位置来达到。具体判定移动的运算过程如下:
1、首先,提前拷贝角色位置信息,代入到他想移动到的地方(比如,向右移动时,每次拷贝一个位置到右边一格)。
2、检查这个拷贝与背景是否有碰撞。
3、如果发现碰撞,运动停止,作出反应。
4、否则,可以通过。把角色移动到此处。(可以加入动画)
这种方案对于弧线运动的操作十分之差,所以此类游戏一般不会出现这样的运动,或者只有上下左右的运动,因为这里只考虑了直线运动的情况而已。好处是这个方案的简单和准确性。因为处理的信息量很少,所以游戏角色被卡住的状况极少发生,游戏的可控性也会十分之强,甚至不需要对不同情况进行微调。
开发基于这种机制的游戏是十分简单的,你要做的只是检查用户Tile和背景的Tile,然后对齐它们并且适合赋予的动作。
原则上讲,这种模式是肯定不允许一个小于Tile的角色存在的,不过,我们也可以通过不同的方法来解决。比如,背景Tile可以设定的比游戏角色的Tile小些,或者你可以在某个Tile内做些视觉上的缩小效果,但也并不会影响游戏逻辑。(这个很可能是Lode Runner-The Legend Returns采取的方法)。
方案2:平滑的瓦片渲染
一般通过构建专用的Tiemap对象,检测通过Tilemap的具体角色单元来实现(很多游戏引擎中都内置有Tilemap类或类似作用类)。与上一方案不同的是,该模式中角色可以在地图里面自由移动,角色坐标不受网格制约(对于移动像素小于1像素的情况,选择取整)。这在当年的8位(如FC)和16位(如MD)游戏机器上也是十分常用的技巧,而今天也同样在使用。它的开发十分简单,而且对于地图编辑来说也并非太过负责。同时也能支持斜坡和平滑跳跃的动作。
如果你不确定你要在哪个平台上面实施游戏开发,并且你就只是想做个动作游戏的话,我建议你采取这个方案。它十分灵活,相对容易,堪称在四种类别中最容易掌握。这也解释了为什么绝大多数游戏开发者都会使用它。
例子: 超级玛丽, Sonic the Hedgehog, Mega Man, Super Metroid, Contra, Metal Slug
就其基础部分而言,地图中瓦片信息的获取和纯Tile渲染方式是一样的,不同的仅仅是玩家和背景的互动算法。在Tiemap中,游戏角色的碰撞单位是一个轴对齐的盒子(AABB算法,可以把它理解为一个无法旋转的矩形),它通常会等于单独Tile的整数倍数大小。一般来说,应该是1Tile宽,1Tile高(小马里奥)或者2Tile高(大马里奥)甚至3Tile高。在许多游戏例子里面,角色的贴图是大于逻辑上碰撞单位的,这是为了更友好的视觉效果和游戏体验(比起防止让玩家碰到不该碰到的地方,更应该防止他碰不到应该碰到的地方)。比如,你的角色贴图约等于2个Tile宽,实际上你要碰撞的目标只有一个Tile宽。
假设没有斜坡和单方向的平台,这个算法是很直接的:
1、分解动作到x和y轴,移动一次。我通常采取y轴,但你可以在两个方向都移动非常大的一个跨度。
2、得到目标对象(前进面)边缘的坐标。比如,如果是向左移动,则是碰撞单位 的左边的x轴。如果是右,则是右边。向上则是上面。同理向下。
3、算出与那个Tile的边线相重叠-得到最小和最大的正交轴的直(比如我们向左走,那么正交轴就是y,然后玩家与32,33,34几个tile发生重叠,那么就可以算出贴图在这个方向的范围: y=32*TS, y=33*TS, y=34*TS, TS是tile的大小)
4.、在自己控制的角色未动前,算出移动方向上的静态和所有动态障碍物中间坐标值,何处离你最近,有多近。
5、玩家在那个方向上的可移动距离,将是最近障碍物离你的距离和你一开始想移动距离的最小值。
6、根据以上计算得出移动后游戏角色的新位置,更新坐标。
斜坡计算(绿色箭头指的),通常是十分棘手的,因为它虽是障碍物,却又允许玩家部分移动进入它的Tile内。而同样的算法,X轴方向移动会引起Y轴变化。一种解决方案是,让Tile记录两次Y值(左右两边也就是Math.floor(y))。假设(0,0)为坐标左上角,那么角色左边的tile的 y为(0,3),站在上面的那个是(4,7),然后是(8,11),然后才是(12, 15)。接下来,是上面的那段Tiles的重复。再接下来是更陡的斜坡(0,7)和(8,15)。
下面的系统是允许任意斜坡的,由于感官上的原因,那两种斜坡是最常见的,总共是12个种类的tile(6个前面描述的和和他们的镜像)。
碰撞算法(横向运动):
在碰撞检测阶段(第四步),斜坡算法将只把玩家靠近高边缘(小y值)算作一次碰撞,那么玩家就不会看见角色有点在斜坡上的“抽风”(来回震颤)。
也许你禁止斜坡去阻止“半穿越”,很多类是Mega Man X一样的游戏都采用了这个限制。但如果你不想去限制,那么玩家从鞋面的低处爬坡的情况就会变的很复杂。一个方法是去预先处理,把这些麻烦的斜坡进行标注。然后在碰撞检测的阶段,如果玩家爬坡的时候在y轴上的最小值(底边)是大于斜坡的边缘高在y轴上的值(tile coord*tile size + floor y),就算作一次碰撞。
碰撞处理好后,玩家可以开始移动(第6步),但纵向位置需要调整。当上坡的时候,这相对比较容易:以玩家碰撞盒子的下边缘中点在坐标轴里面的值,计算它的高度:首先,找到处于哪快地面tile。如果是斜边,在当前的坐标系统中计算它的floor y。比如这样:t=(centX-tileX)/tileS floorY=t*leftFloorY+(1-t)*rightFloorY。移动玩家来找到最低的位置(假设玩家的固定在贴图的下边缘中间,那就是这点)。
下坡有点棘手。一种方法是计算玩家移动前地面上多少个 像素,然后移动后又有多少个(运用上面的公式),然后调整他的高度使这两个一样。这种方法对于上下坡都可以运用。另外的方法是引入重力,但十分麻烦。
非斜坡的障碍物tile,如果它和斜坡相邻,是不应该在碰撞检测中考虑进去的。如果玩家处于(0, *)位置,左上至右下方向出现斜坡,那就忽略他左边的tile。如果是(*,0)左下至右上方向斜坡,那就忽略右边的。如果玩家大于两个tile,那么要忽略更多的tile。这么做是为了防止玩家爬坡时候卡住(黄色区域)。
当向下的时候,不用考虑斜边tile的上边缘作为碰撞边界,相反,计算它在当前纵向的floor坐标(使用同样的算法)。
One-way platforms
此处对比超级马里奥,展示了马里奥下坠和站立在同一个单方向平台的情景。
所谓One-way platforms(单方向平台)就是你可以站立,也可以跳跃穿过的那种平台。而另一种说法是,如果你站在上面了,就算是障碍物,否则将是可以被穿越的。这是理解这类平台的关键。算法也要做如下改变
在x方向上,永远没有障碍物
在y方向上,如果在玩家运动之前已经处于它的上方了,则是障碍物。(玩家的碰撞盒子的下底边至少是处在单向平台的上方的1像素)。在移动之前,你必须储存玩家位置的信息,才可以检查到这个状态。
有些人似乎认为,当玩家y轴的速度是正向的时候(向下)把单向平台算作障碍物是不错的想法,但这个想法是错误的。因为玩家有可能在跳跃的时候和平台重叠,但下落的时候脚步并没有接触平台。这那种情况下,玩家应该继续下落才对。
有些人则想要允许玩家从此类平台跳下,有几种相对比较简单的算法来解决。比如,在某一帧的时候禁止单向平台,然后保持玩家至少y方向速度为1(那么玩家在下一帧的碰撞检测中就不必考虑具体的游戏碰撞单元)。或者检查玩家是否正好在单向平台的上方,如果是的话,手动把玩家往下移动一个像素来达到穿越平台的效果。
Ladders(楼梯)
游戏中的楼梯,看起来需要十分复杂的运算才能实现。但实际上,它不过是最简单的一条IF语句:当你在楼梯上面的时候,你可以忽略大部分的碰撞检测,用新的规则来定义就好了。大多数人的做法,是将楼梯定义为只有一个tile宽。
进入楼梯的的两种方法:
让你的玩家碰撞盒子与楼梯重叠(比如LGame中,就直接算角色的getRectBox是否碰撞了Tile),可以是空中的也可以是地面上的,然后向上。
让你的玩家站在楼梯正上方,先用上述的单向平台方法处理,然后向下。
有时,这些方法会突然让玩家的x方向的值与楼梯tile对齐。如果从楼梯向下爬的话,移动y轴就可以让玩家实际上处于楼梯的内部了。而在此时,有些游戏会用不同的碰撞盒子来判断玩家时候处于楼梯上面。比如Mega Man,似乎就用了单tile来做这个事情。
离开楼梯的方法也有几种:
到达楼梯的顶部,这会产生一个把玩家向上推动几个像素的动画。
到达悬梯的底部,这会产生一个简单的下坠,尽管有些游戏会不让玩家离开楼梯。
向左或者向右。如果没有障碍物,则允许通过。
跳跃。有些人允许玩家在楼梯中做此类动作。
在楼梯上,玩家的行动也会改变。通常是只能上下移动,或者做些攻击之类。
Stairs(阶梯)
阶梯是楼梯的变体,在Castlevania系列中十分著名。实施方法其实是很简单的,基本与楼梯相同,但有几处例外要提前指出:
玩家通常采取一个一个,或者半个半个tile移动
每次移动玩家在x和y方向移动相同的距离
初始的重叠检测会检查前面一个tile而不是当前的tile。
某些游戏也有象斜坡一样的阶梯。实际上,它们大多只是在视觉上做了些效果。
Moving Platforms
Moving platforms(可移动平台)
可移动的平台看起来也很棘手,但实际上却也是很简单的。不过与通常的平台不一样,它是运动的,不能用固定的tile来表示(事实上,多数时候可移动平台算作Sprite(精灵))。所以一般会用碰撞盒子(AABB)来表示。在碰撞监测中算作障碍物。
实施移动平台的方法有几种。一种算法是:
1、在屏幕中人和物体移动前,判断玩家是否处于移动平台上面。这个可以通过检查玩家的下底边中点是否正好1像素高于平台表面。如果是这样的,在平台上储存一个处理方法然后玩家现在的位置。
2、移动所有的移动平台,让它在玩家移动前发生。
3、对于每个站在平台上的角色,算出所在平台的平移量,然后把每个角色都移动相同的平移量。
Other Features
有些游戏有更复杂的特性,不如Sonic the hedgehog系列在这个方面十分著名,这些超过了作者的知识范围,所以不再深究(这种实现,可以使用LGame的Polygon建立形状,然后结合瓦片地图进行碰撞计算)。
方案3:像素位掩码计算
效果上类似于方案2,但在处理碰撞关系时却不是比较Tile与游戏角色的大小,而是直接使用一整张图片做背景,然后通过对背景中每个像素和游戏角色的图片像素进行碰撞检查,再得出移动关系。
这种看似更细致的处理方式,却也提高了游戏的复杂度,并且内存占用也会上升很多。同理,对地图的编辑处理也有很高的要求(美工的噩梦)。因为Tile不能用来创建视图了,也就导致了每层的单元,都要手工绘制得出(苦逼的美工~)。也因为这些问题,这个方法不是特别常用,但会比Tile产生更高质量的游戏结果。对于动态场景也是挺适用的,比如某些可破坏的场景(对美工有仇者,就可以天天让他们做这种地图玩~)。
例子: Worms, Talbot’s Odyssey
其实,笔者在制作此类地图的原始想法,与第二种方案很类似:即把每个像素想象成一个Tile,然后实施一模一样的算法。不过,这种想法隐含着一个重大的差别,那就是斜坡的处理。因为,现在的斜坡是被周围的Tiles隐性定义的,前面的方案也就不再适合了。所以,我们也需要采用更复杂的算法(另外,楼梯处理也会相应的变得十分棘手)。
Slopes(斜坡)
这种方案之所以难以实施,很大程度上是因为斜坡的存在。不幸的是,斜坡在很多游戏中是必须存在的场景。
下面粗略的描述了Talbot’s Odyssey对于斜坡的算法:
通过加速度和纵向速度计算每个轴方向的位移。
轴方向移动时优先适用位移较大的那个方向。
对于纵向,把碰撞单位(AABB)向上移动3个像素,这样达到爬坡的目的。
提前扫描坐标,通过检查所有实体存在的障碍物和位图本身来决定玩家在碰到障碍物之前能移动多少距离。然后把玩家移动到新位置。
如果是纵向移动,把玩家在斜坡能往上移动多少就移动多少,最多3个像素。
如果移动结束后,发现玩家与某个障碍物重叠。取消此次移动。
无论结果如何,在另外一个方向上继续以上述方法移动。
因为此种方案对于玩家正在下坡移动或者下坠根本没有区分(都是算像素),你就只需要建立一个系统去计算距离上次玩家在地面上已经过去多少帧了。这样,一但满足判定标准,我们就能根据判断结果,处理角色是否可以跳跃或者开始某种动画了。在Talbot中,通常是十帧一处理。
另一个窍门,是在碰撞发生之前就有效的计算出来可以移动的像素。不过有些因素会使计算比较复杂,比如单向通过的平台,向下滑的陡坡。总之,这个技术需要很多调优,并且相对第二种方案来说十分不稳定。所以除非你十分需要的(比如调戏美工妹妹-_-),一般不推荐使用。
方案四:向量地图
这种技术采用了向量数据(线或者多边形,比较典型的是使用SVG,可伸缩向量图形)来判断碰撞的边缘。虽然实施起来很难,但由于物理引擎的大行其道,这个方案还是很受欢迎的。这种方案即提供了bitmask方案的优点,又对内存计算消耗不大,还很便于图层编辑。
例子: Braid, Limbo
一般有两种解决方案:
自己计算碰撞,类似于bitmask方案(方案3),使用多边形碰撞来计算反射或者滑动。
直接上游戏引擎……
基本上,大多数人都会选择第二种方法,这不仅仅 是方便简单的原因。更重要的是,你可以把心思和精力花在其他更重要的地方。但有一点需要注意:如果仅仅通过默认设置开发,那么你的游戏将和其它同款引擎开发出来的游戏极度近似,变得毫无特色可言。
Compound objects
Compound objects(复杂物体)
在此方案中,存在着非常独有的缺陷,它可能会突然无法判断玩家是否正在地面上(大多出于取整原因),或者撞到墙了,或者通过斜面向下滑动之类。用游戏引擎的话(Box2D之类),你还需要考虑摩擦力,移动的时候比较大,滑行的时候比较小之类。
而处理这些情况的比较通用方案,是把游戏角色划分成几个多边形。每个多边形代表不同的东西:比如,你会有主体躯干,两条细长的腿,一个方方的头部;甚至通过不同的多边形来组合之类。有时候,我们可以通过这些小小的修改,来避免角色被障碍物卡住。游戏角色的不同组成部分,它们大多也会具有不同的物理属性,或者碰撞反应。要获得更多信息,还可以使用传感器监听。通常会用它来判断条约前是否离地面太近,或者玩家是否在推墙(反复撞墙)。
不论你在进行何种2D游戏开发,你都必须考虑到一些全局因素。
Acceleration(加速)
角色的加速度对于游戏玩家来说,将是有很大影响的部分。
加速,通常是指游戏角色速度的突然改变(上升),它大多包含实际的移动像素增加,以及短暂的加速动画两部分。当游戏角色速度很慢的时候,角色一般需要花很长的时间去达到最大速度,但这时的加速动画,则可能半途被停止下来(如果玩家松开按钮)。这样,又很可能会让玩家觉得角色很逊,很难控制。而当角色速度已经很快的时候,则很容易加速到最大速度,但是因为动画变更的关系,它又很可能猛然卡住一下。这样看起来,动画和加速的组合关系十分敏感,我们编码时也要十分小心。
即使一款游戏横向没有加速度,它至少会在跳跃的时候加入这类因素。不然,跳跃的弧线就变成三角形了。
实现加速通常很简单,但要注意几个地方:
注意x方向上面的速度,如果控制按钮没有按下去的话,加速度就应该是0(具体设定的话,可以向左键一直按着会达到最大负速度,右边的话是最大正速度)。
注意y方向速度。在平地上是0,下落的时候达到最大。
对于每个具体方向,可以把当前速度加速后的最大速度,用每个方向的权重来平均下或者直接加入速度值中。
两种加速方法如下:
权重平均:加速度是一个介于0(无变化)和1(瞬时加速)的数字。用那个直去对目标速度和现在速度进行线性插值。把结果作为现在速度。
vector2f curSpeed = a * targetSpeed + (1-a) * targetS
if (fabs(curSpeed.x) & threshold) curSpeed.x = 0;
if (fabs(curSpeed.y) & threshold) curSpeed.y = 0;
加速度:先判断在哪个方向上添加加速度(用sin函数),然后检查是不是加速过多。
vector2f direction = vector2f(sign(targetSpeed.x - curSpeed.x),sign(targetSpeed.y - curSpeed.y));
curSpeed += acceleration *
if (sign(targetSpeed.x - curSpeed.x) != direction.x)
curSpeed.x = targetSpeed.x;
if (sign(targetSpeed.y - curSpeed.y) != direction.y)
curSpeed.y = targetSpeed.y;
在移动角色前把加速度整合到角色速度上面是很重要的,否则在角色画面显示上,你会发现总有一帧的落后。当碰到障碍物后,应把对应方向的加速度设定为0。
Jump control
在2D平面游戏中,跳跃只需要检测玩家是否处于地面就好了(或者在前几帧的时候,是否在地面上)。如果在的话,设定给角色一个初始的负y速度(或物理上说的“推动力”)然后再让重力做剩下的事情。
通常玩家有四种控制跳跃的方法:
推动力:在超级马里奥游戏中经常看见。角色在跳跃之前,蓄好动能。在有些游戏中,这是唯一可以影响跳跃弧线的方法,与现实生活一样。你其实不需要实现什么,除非你强行干预去停止它。
空中加速:在空中的时候保持对于横向的移动控制。虽然在现实生活中是不可能实现的,但在游戏中这个特性很受欢迎,这会让玩家更容易控制角色。几乎所有的平面游戏都会有这个特性,但波斯王子是个特列。通常空中的加速度减少的十分快,所以推动力十分重要,但有些游戏(Mega Man)会给力完全的空中控制。这个仅仅是在空中的时候稍微修改下加速度参数就好了。
上升控制:另一个物力上无法实现的行为,也是很受欢迎的。你按住跳跃按钮越久,你就可以跳得更高。这种特性,通过不断得补充推动力给角色(推动力的大小是递减的趋势)来达到,或者也可以通过克服重力影响也可以达到。不过这种补充是有时间限制的,不然你会看到你的角色“一飞冲天”(游戏王zexal主角台词)。
多重跳跃:一旦到了空中,有些游戏允许玩家再次跳跃,甚至会无限制的跳跃,直到玩家到达地面(两次跳跃一般是被大家统一采用的)。这种方法可以在游戏内部增加一个计数器来达到。这个计数器在每次跳跃时自动加1,然后到达地面后,自动变成0。只有在计数器没有超过限定值的时候,才可以继续跳跃。通常第二次的跳跃会比第一次的短很多。另外一个限制是,空中跳跃只有在角色完成了旋转跳跃且开始回落的时候才可以被触发。
Animations and leading
在许多游戏中,你的角色在实际执行你的命令前,都会先执行一段预先设定好的动画。如果在对操作有很高要求的游戏中,这可能会让你的玩家抓狂的。所以,此类游戏里千万不要这么做。但是,你仍然可以加入向导动画(在跳跃和跑动之前)。如果你在意游戏的响应速度,最好只是装饰下而已,然后立刻让角色对命令进行反应。
Smoother movement with pseudo-float coordinates(更加平滑的移动)
相对使用浮点计算而言,用整形来代表玩家位置是很明智的选择,因为这会让计算变得更快更稳定。但是,如果你把什么都整形了,你会发现移动十分卡(因为所有位置都取整了)。对于这种情形,有一些处理方案可供参考:
用浮点型数据来计算和储存位置信息,在计算和表现碰撞的时候转成整型,很快也很简单。但如果你从原点开始移动,会发现偏差会很大。不过,如果你的场景十分小,这点差异是不那么明显的。但是记住,如果真碰到了,你可以用双精度来进行计算修正。
用固定长度数字来计算位置,同样在碰撞的时候转成整型。虽然场景大小限制更大,但精度是全局统一的,在某些硬件上更快(比如手机上)。
把位置信息储存成整型,把小数点后面的数字转化成浮点型。当计算未知位置的时候,把位移按照浮点来算,然后加上小数点后面的数字,再后把整数部分加到未知整数上面,把小数部分加到未知的小数上面。在下一帧的时候,同样这么计算。这样做的好处是,你只有在移动的时候才会用浮点型,而其他地方都是整型,可以提高整体性能。
没有更多推荐了,
不良信息举报
举报内容:
2D动作游戏开发与实现(翻译)
举报原因:
原文地址:
原因补充:
最多只允许输入30个字
加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!

我要回帖

更多关于 一款完全不充钱的手游 的文章

 

随机推荐