失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 怎样编程游戏如何快速开发一个小游戏 – 游戏开发 – 前端

怎样编程游戏如何快速开发一个小游戏 – 游戏开发 – 前端

时间:2020-12-08 21:20:11

相关推荐

怎样编程游戏如何快速开发一个小游戏 – 游戏开发 – 前端

该文还提到与火爆相关的两个姿势。一是社交匹配度,在小游戏这样一个去中心化的大背景下,让游戏内容和微信社交相结合是一个很重要的点,同时开发者也需要在利用社交互动提升用户体验和群聊分享造成用户骚扰之间选择一个平衡点,过犹不及。第二是操作简便度,说的是游戏易上手操作简单。这是大家根据游戏成为爆款后观察得出的结论,并不是说具备这两个特性就一定能开发出一款火爆的游戏,并且新的爆款游戏也不一定符合这些特点,仅供参考。

今天介绍的内容更倾向于技术方面,所以“火爆”就从标题里面去掉了,并且也不会介绍具体的游戏逻辑如何开发,而是更偏向于如何利用好微信的开放能力开发一款小游戏。

什么是“小游戏”?小游戏是什么?

首先为大家介绍一下小游戏是什么。从普通用户的视角看,小游戏是小程序的一个子类目,可在微信内被便捷的获取和传播,即点即玩,具备出色的用户体验。小游戏是小程序,普通用户分不清也无需分清。

小游戏Runtime

如果放大小游戏的Runtime可以看到很多的细节,这是一个典型的分层架构:

最上层蓝色部分,是游戏代码,分为游戏逻辑,游戏引擎、weapp-adapter三部分。大部分游戏开发会用到一些引擎的工具、工作流,以及利用引擎封装的高层API去实现游戏逻辑。其次是weapp-adapter,因为小游戏的底层一方面不是webview,可以简单看成是webview经过精简、优化过后的平台;另一方面核心能力的实现上却参考了webview。所以这里如果有一个适配器,把小游戏的底层API——wx API适配到一个接近webview的接口,对上层引擎、已存在的游戏接入微信小游戏平台则会更加容易,这个就是weapp-adapter的作用。其中只有游戏逻辑是必要的。

可以看到,在架构上小游戏和小程序是有差别的,小游戏没有页面概念的,wxss/wxml不再存在。其次,底层实现也不是webview,小游戏和webview的关系只能说是渲染相关的核心能力可以通过weapp-adapter的简单适配保持接口一致,但同时很多webview上存在的功能并没有对等的实现,比如小游戏就没有DOM/BOM的概念,也没有全局的document/window对象。

小游戏的入口为game js文件,语言为Javascript,但有一些限制,比如禁止执行动态代码,因此eval、new Function等能力是不支持的。配置为game.json,可以配置横竖屏、接口超时等参数。js里面可以组合wx API的能力来实现游戏逻辑, 非代码类的资源应该尽量放到cdn,减少整个代码包打包后的大小,以加快用户首次进入时的速度,微信对首包的大小目前限制为4MB。

Webview Adapter

下面来说一下Webview Adapter,它的初衷是为了让游戏开发者更好地熟悉大家的平台,所以大家的平台在能力上会尽可能地与webview做一些适配,其实这个适配也是很简单的一层。比如说大家在浏览器里面使用image对象创建一个图片,而在小游戏里是通过wx.createimage来创建的,在代码中需要做一个简单的适配。

以此类推,常见的Canvas、document对象都是在Adapter中通过一个简单的适配实现的,大家可以研究链接中的代码。之后官方不会继续维护这个Adapter,大家会更专注于底层能力的建设。

小游戏能力概览

下图是小游戏能力的概览,小游戏能力的迭代比较快,部分能力还没有来得及罗列出来。比如最近刚发布的游戏圈、健康系统防沉迷相关的一些接口。

大家先看一下基础能力,在渲染这部分WebGL1.0和Canvas 2D都是支持的,这里的Canvas更接近于浏览器里面的标准。同时,这里提到的可控帧率的概念,如果小游戏在后台运行的话,可以尽量将帧率降低。

在多媒体部分,小游戏还不能像小程序一样实现实时的音频视频流,这是大家在后续要进一步支持的。网络IO的部分与小程序也是类似的,大家也提供了一些UI的组件,比如说拉起键盘,模态对话框等。

小游戏的社交开放能力现在已经对外了。其中最重要的一个能力是在开放域将微信的好友关系开放出去,给开发者使用,考虑到对用户隐私的保护会有一些设计上的限制。

因为小游戏去中心化的特点,分享这一部分也是非常重要的,开发者要考虑如何将这个能力利用起来。在代码方面,因为首包限制是4MB,但部分小游戏的代码量可能比较大。大家最近也在规划一个分包的能力,允许异步加载代码并执行,但这个代码是一定要经过大家审核的。

如何开发一款小游戏?

那么如何开发一款小游戏?因为偶本人也只是开发过一些简单的游戏,并不是专业进行游戏开发,所以接下来偶会更多地介绍一下如何利用微信的能力来开发小游戏。

选择小游戏引擎

微信跟引擎商也有比较密切的合作,一般现在的游戏引擎都会支持发布到多个平台,对微信小游戏这个新平台而言,已经有一部分引擎做了适配,比如Cocos Creator、Egret Engine以及LayAir Engine。适配的主要工作,类似之前提到的weapp-adapter,把wx API的能力,和引擎衔接起来。

比如引擎一般会把小游戏平台和webview平台对标,适配过程就是把wx API对应到webview的能力,同时把只存在于webview能力的依赖去除,比如不再依赖BOM、DOM。已适配的引擎都有相应的文章介绍如何把游戏发布到微信小游戏平台。

设备/环境适配

小游戏会有API提供获取屏幕的宽高、设备像素比等能力。小游戏开发完成后,在开发者工具也可以发起真机测试的请求,微信提供了不同设备的测试集群,帮助开发者提前去发现问题。基础库提供的wx API本身是一个不断迭代更新的过程,对于使用了新能力的小游戏,需要做低版本兼容。

微信登录

小游戏的登录过程,跟小程序是类似的。需要用户自己去定义登录状态。appsecret/session_key代表的是小游戏开发者和微信平台之间的一种信任约定,比如支付、上报托管数据,平台方需要验证access_token(只有appsecret才能换得到),和用户相关的还要验证session_key的签名,才能保证请求来自于小游戏开发者/用户,而不是恶意的第三方和随意捏造的用户。

access_token是一种应用态的access_token,和用户无关,需要保证全局维护一份,应该有一个中控的模块去保证access_token有效,同时在有效期内直接使用本地cache的access_token,而不是每次使用都去生成新的access_token,否则可能遇到调用频率限制的错误而影响服务。切记appsecret/session_key不要放到前端代码中去,否则可能会被坏人利用损坏小游戏开发者/用户的权益。

缓存

缓存类型包括数据缓存和文件缓存两类。数据缓存即key-value存储,适合结构化类型的小数据存储,上限为10MB。文件缓存提供了一个完整的文件系统API,包括目录/文件的增删改读,适合针对经常使用的网络资源做本地缓存,上限是50MB。

和浏览器不同的是,微信只提供了基本的存储管理能力,并不对存储什么,和存储满时删除什么做一些操作。开发者自行灵活定义缓存以及淘汰策略,比如对经常访问的资源存储到文件系统以及在文件存储满时,清理一些最近不常访问的文件。

开放数据域

开放数据域是一个封闭、独立的 JavaScript 作用域,和执行游戏逻辑的环境——称为“主域”隔离。其目的是在保证用户隐私的前提下开放用户数据给第三方,提升小游戏的整体用户体验。以下为物理视图,主域的入口为game.js,开放数据域则是一个独立的目录,其入口文件为index.js。

主域和开放数据域的通信受到严格的管制,基本原则是只进不“出”。

•只进:允许外部的数据进入开放数据域,即主域可以随时postMessage到开放域,以及开放域引用主域准备好的本地资源

•不“出”:不允许开放数据域的数据被上传到第三方服务器去。因为开放数据域里面,index.js是可以直接访问到用户敏感数据的,比如同玩好友数据。当然最终开放数据域需要index.js在综合各种数据后把数据以图形图像的方式渲染到sharedCanvas上,在主语sharedCanvas允许draw到主域的上屏Canvas上,最终用户会在显示屏上看到game.js画出来的好友排行榜、群排行榜或好友超越等社交互动信息。

在开发数据域中的数据,开发者没法把数据拿出去和游戏数据做关联,所以如果需要在开放域下展示的游戏数据,比如分数,开发者需要将该数据通过上报接口把游戏数据托管到平台。这样就可以在开发数据域里面就取到相关数据,其应用场景有好友排行、群排行榜、超越好友提示等。

分享

包括自定义分享和系统菜单分享,可以分享到群聊、单聊。也可以把分享上下文与特定的群关联,实现一些群PK、群排行榜的场景。分享是一把双刃剑,需要谨慎使用,一方面避免过度骚扰用户/群聊,另一方面增强社交互动提供好的游戏体验,需要找到一个合适的平衡点。

支付

小游戏在安卓下支持虚拟支付,它的方式目前只有一种:即货币托管的方式。主要分为2个流程:

1.充值:RMB -> 游戏币,这里开发者只需要拉起支付的流程,平台负责把用户RMB兑换成对应的游戏币,存储到用户对应的游戏帐号上

2.使用游戏币购买道具:开发者可以扣除对应的游戏币,给用户发放游戏内道具,扣除游戏币的过程需要有一定的事务机制,去保证在网络异常的情况下交易正常。扣除游戏币的接口支持根据订单id去重,意味着网络超时等情况下,开发者可用同样的订单id去重试扣除,直至返回明确的响应。

以下为简单时序图,部分角色针对开发者无需关心的部分做了相应简化处理:

性能

小游戏常见的性能问题,一般是内存造成的。如果内存占用太多会被微信客户端主动关闭,因此开发者在用户游戏过程中要及时释放不再使用的内存(js代码去除引用,或主动调用对应资源的释放接口,如果有的话),特别是Canvas和Image类大型对象,同时可以主动调用wx.triggerGC触发底层回收对应资源。

对于和游戏逻辑相对独立的工作,可以考虑在worker中去实现,小游戏提供了独立的worker线程执行js逻辑的能力。

版本更新机制

小游戏启动的过程分为冷启动和热启动。冷启动是指内存中无该小游戏的运行实例的情况下,启动小游戏的过程;热启动是指小游戏的运行实例在内存中还存在,只是暂时切换到了后台,这时用户再次触发小游戏回到前台的过程。

小游戏会在冷启动时检查小游戏的版本,如有新版本,在下载回本地后,下一次冷启动即可使用最新版。当然,大家也提供了API可以供开发者决策在有版本可用时,是否需要强制更新。

运维

特别提醒,小游戏有完善的后端监控,可以通过“运维中心”开启,比如脚本错误监控。脚本错误主要由运行过程中未捕获的异常触发,需要重点关注。该类异常,可能会导致用户小游戏前端的js逻辑暂停执行。

同时,平台也提供了完善的数据分析服务,可以通过“小游戏数据助手”进行数据分析。

主机游戏是怎么编写和调试的?

1、FC时代的机器是主机方直接提供底层资料和调试用专用硬件,第三方自己写框架。进入次世代(偶现在仍然把PS之后的游戏机统称为次世代,因为偶觉得自己一直活在90年代)后游戏主机本身高度复杂化,第三方厂商只能依赖主机方或者主机硬件开发相关的第二方提供的开发SDK来开发游戏,但是除开XBLA等方便同人开发商的平台外,仍然需要主机方提供调试用专用硬件,俗称开发机。这些开发机,并不是独立的机器,而是类似发布版主机但具备特殊硬件接口和软件的特殊主机,一般是配合开发者在自己PC上运行的SDK,开发时进行在线调试用的。你去图书馆找几本说老的移动设备比如Windows CE或者Palm开发的书读一读,就能理解编写代码-〉下载到设备-〉在线调试这种开发方式了。

2、SDK能支持什么编译器就用什么语言,早期没SDK的机器就五花八门了,如果说FC的话多数情况都是机械语

怎么用c语言或者c加加编出游戏?

以前学习C语言的时候看的是如鹏网的视频教程——《C语言也能干大事》系列;

通过开发超级玛丽,飞机大战,吃金币等经典小游戏,网站开发的方式来讲解C语言的知识点,挺有意思的,没想到C语言还可以这么学,还可以写出这么漂亮的程序,蛮有成就感的,具体的可以到如鹏网官网上去了解一下

课程体系的设置也可以极大的激发对编程的兴趣,挺好玩的;

大家觉得好游戏需要哪些点呢?

人追求极致的画面、有人喜欢丰富的剧情、有人倾向于游戏性和操作性,还有的人嘛,更愿意选择氪金才能让自己变得更强的游戏,毫不在意游戏本身的素质,至于这种人,偶只能说你风格清奇。

对于游戏公司来说,一款能够赚钱的游戏就是好游戏。对于游戏玩家来说,一款能够让自己沉迷并且带来欢乐的就是好游戏.对于游戏设计师来说,一款能够让自己在设计游戏完成后有满足感的就是好游戏。

但是无论如何,那些被人们口口相传的好游戏们,应该有一些共通性,鉴于国内的各种垃圾页游充斥着网络的每个角落,所以大家就以往的优秀游戏的特点总结出以下共性。

一、画面

一款好游戏的画面应该非常细腻,不一定要很拟真,但在社会的发展、审美的提高和科技的进步过程中,通过不同的游戏引擎,画面应该是首先变革并且最明显的。

在现在的时代中,即便是画面复古的游戏,用全新的技术来重新定义FC时代的横版游戏,画面也应该比几十年前要精致细腻得多。

游戏的画面能够最直观把游戏要素和特点表达给玩家,让玩家身临其境,这就是合格的理想游戏画面。

二、剧情

在剧情方面,应该非常丰富,跌宕起伏并且具有深度。玩家在游戏时,应该在细腻画面的基础上,再通过剧情代入游戏,让自己沉浸在游戏中。

用心去感受游戏编剧营造的剧情,去结识游戏中有血有肉的NPC们,去探索荧幕中那个全新的世界。

游戏的剧情能够匹配游戏的画面,并且让玩家感受到自己真切地融入到游戏中,成为游戏世界里的一员,并且在游戏结束后回味无穷,就是合格的理想游戏的剧情。

三、设定

好游戏的设定应该是合理的,在游戏的剧情的基础上,进一步充实游戏的本体,在适度的背景中构建适度的设定。

例如在架空的世界中,充分契合游戏背景的游戏语言、文化、货币制度、政治制度等等,让整个世界变得更加真实起来。

如果是真实历史背景或者现实背景的游戏,就应该尽量去还原历史中或现实里的各种细节。这就是合格的理想游戏的设定。

四、操作与回报

好的操作应该是流畅简洁,不过于复杂,也不过于简单,可以让玩家在迅速掌握,但也需要一定的技巧和练习才能熟练使用。

无论是用手柄还是键盘,都能够设置到合理的键位,就是合格的理想游戏的操作。

游戏的回报应该能够让玩家感受到自己的所作所为并不是碌碌无为,在通过任务、剧情或者其他什么方式,耗费了一定的时间之后,玩家能够得到一定的成就感和满足感,这就是合格的理想游戏的回报。

五、付费

一款游戏的付费机制,并不是说好游戏就不应该收费,因为游戏也是一款产品,是有研发成本的,玩家也是消费者,要享受游戏,就应该付费。

免费运营道具收费也好,一次性买断制收费也罢,一款好游戏应该设定合理的付费机制,而不是在游戏中设定各种诱导性不透明的付费端口,导致现实货币影响虚拟游戏的根本平衡。

所以,一款游戏不应该成为可以通过更新而无休无止的盈利的工具,而是应该像所有实物消费品一样,拥有合理的定价,所谓物有所值就是这个意思。

这一点,还需要在社会发展的过程中,通过法律来裁定。其实在国内,充斥着很多的垃圾游戏,这些游戏甚至连个美工都没有,随便买个服务器,复制之前的老游戏,随便改改或者改都不改就敢投入市场赚钱。

有些游戏简单粗暴,没有学习成本,自动打怪自动寻路,充点钱就可以称霸服务器,这些游戏也有人乐此不疲。

这种状况和国内浮躁的游戏环境是分不开的,其实大家国家的游戏市场刚起步不久,现在的游戏市场说到底其实并不算是真正的游戏市场,而是资本市场,各种资本注入赚钱,这对游戏本身来说是不健康的。

但是对资本家们来说,赚钱是第一位的,对于他们来说,资金的迅速回收并且实现盈利使他们的追求,这也无可厚非。

游戏打磨需要工匠精神

其实有很多所谓的玩家,他们没有见过真正的好游戏,当然每个人对游戏的鉴赏能力和审美水平也不一样。

所以在游戏的选择方面,每个人都是不一样的,在这里,偶也只是想谈谈偶自己对游戏的看法,和对理想游戏的憧憬。

游戏,应该是用心打磨出来的一款产品,是无数个游戏设计师夜以继日雕琢出来的心血。游戏属于娱乐产业,但更应该是一个艺术品,游戏才应该用工匠精神来诠释。

游戏一般是怎样开发出来的?

游戏开发是由多个环节组成的,包括定类型、添加音乐/背景音乐、美工人物设计、剧本情节、设置代码程序。具体如下:

1、【定类型】所谓类型,就是一个方向。比如世面上流行比较广的有第一人称视角,第三视角,网页游戏,rpg,即时战略等等这些个类型的游戏形式。

2、【音乐/背景音乐】音乐在一个游戏中的重要性不言而喻。如果在玩一个游戏的时候,是寂静无声的,那么玩几分钟都玩不下去,因为游戏是一种视听的艺术。光有画面,没有声音会让人觉得非常的奇怪。所以音乐对于游戏有着不可忽视的作用。

3、【美工人物设计】好的游戏,要有好的人物设计。做游戏的时候,一定要考虑到各种人物的关系,还有人物的身份,只有符合游戏的整个发展情境,这样的人物造型才算成功。如果是一个画得非常不协调,或者很丑的主人公,人家第一眼就不想玩了,所以好的人物设计,好的背景设计是非常重要的。

4、【剧本情节】如果有一个故事的背景的话,就会为这个游戏增色不少。像是rpg这类的游戏,那主要的就是靠游戏剧情进行设计,比较出名的仙剑奇侠传,就会让人觉得这个故事很凄美,人物整个发展的脉落就一目了然。

5、【代码程序】游戏的运行是建立在程序的基础上的。一个好的游戏,往往都有一个好的游戏引擎。就像发动机一样,发动机厉害了,只要把其它的部件加上去,就完美了。这里也一样,游戏里的程序代码就相当于这个发动机了一个好的游戏,有一个好的平台支撑,做出来的游戏也是棒棒的。注意事项:1、毕竟一个人的力量是有限的,一个人的才能也是有限的,就得组织一批电脑精英,一起开发,才是最完美的。2、要想搞好游戏开发技巧,最重的一个还要有一个过硬的网络平台,时时保持网络畅通。

如果觉得《怎样编程游戏如何快速开发一个小游戏 – 游戏开发 – 前端》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。