万王之王游戏简介怎么不自动进入语音房间每次进副本都会自动进语音能手动吗,有时候不方便有声音

&p&当年我看见传奇的pk眼前一亮&br&
后来我看见梦幻的回合策略眼前一亮&br&
再后来我看见魔兽的设定眼前一亮&br&
我看见了武林外传的精炼系统(60级之前版本)&br&
我看见了天龙八部的宝宝捕捉系统眼前一亮&br&
我看见了问道的回合boss系统眼前一亮&br&
后来的后来&br&
看到了神仙道的vip系统眼前一亮猎命系统一亮数值一亮&br&
qq部落守卫站的关卡眼前一亮&br&
太多了&/p&
当年我看见传奇的pk眼前一亮
后来我看见梦幻的回合策略眼前一亮
再后来我看见魔兽的设定眼前一亮
我看见了武林外传的精炼系统(60级之前版本)
我看见了天龙八部的宝宝捕捉系统眼前一亮
我看见了问道的回合boss系统眼前一亮
后来的后来
看到了神仙道…
&figure&&img src=&https://pic4.zhimg.com/v2-a9bfffe2bf_b.jpg& data-rawwidth=&750& data-rawheight=&422& class=&origin_image zh-lightbox-thumb& width=&750& data-original=&https://pic4.zhimg.com/v2-a9bfffe2bf_r.jpg&&&/figure&&p&&b&本文系猫爪用户投稿,千字百元,欢迎各路游戏文豪踊跃投稿。&/b&&/p&&p&&br&&/p&&p&四人在黑暗中艰难徘徊潜行,躲避那第五人的危险目光 。 &/p&&figure&&img src=&https://pic2.zhimg.com/v2-ccbe128ca5e3fa8dba4efb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&776& data-rawheight=&518& class=&origin_image zh-lightbox-thumb& width=&776& data-original=&https://pic2.zhimg.com/v2-ccbe128ca5e3fa8dba4efb_r.jpg&&&/figure&&p&在网易铺天盖地的宣发攻势下,《第五人格》在一年的测试期后,带着“蒂姆-伯顿式”的哥特元素,终于走进了我们的视野。&br&&br&而且凭借着在现今手游中,极为少见的非对称对抗的玩法,迅速占领了各大商城榜单。&/p&&p&而在宣发过程中,这个游戏机制也始终是宣传的重点——网易首款非对称对抗手游 。&br&&br& 今天就借着《第五人格》跟大家来聊一聊,一个在游戏形式上颇为独特的机制——非对称对抗。 &br&&/p&&p&&b&一、 什么是非对称对抗? &/b&&/p&&p&这个词语的提出是在1991年11月《美国武装部队的联合作战》中首次出现&非对称对抗&概念,被认为是交战双方使用不同类型部队进行信息不对等的作战,而后被延伸到了各个领域。&/p&&p&&br&&/p&&p&但要想搞懂什么是“非对称对抗游戏”,就需要我们反其道而行之,先科普下什么是对称对抗游戏:在同一局游戏内,玩家遵从同一种规则与玩法,抛开一切运气、技术、团队因素,一切的胜利条件和游玩内容一致。&/p&&p&&br&&/p&&p&没明白?通俗的说,就是所有玩家在规则对称的情况下,玩家游玩的总体规则框架都相同。&/p&&p&&br&&/p&&p&举几个例子,如今的大多数游戏都是对称对抗游戏:无论是MOBA类的《王者荣耀》、《决战平安京》还是最近火热的“大逃杀”类游戏。 &br&&br&那么借由上面的解释,反过来理解就能明白什么是规则不对称了。——双方玩家规则不一致,或者说不对称。而这不对称的玩法也有很多的种类,如资源不对称,目标不对称,信息不对称,等等等等…我们就不一一详述了。&br&&br&好了,弄明白了具体概念。大家可以现在猜猜,我们最耳熟能详的非对称对抗游戏是什么了。&/p&&figure&&img src=&https://pic3.zhimg.com/v2-55bb91ee782bb9ccc850_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&800& data-rawheight=&480& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic3.zhimg.com/v2-55bb91ee782bb9ccc850_r.jpg&&&/figure&&p&没错,不是什么《黎明杀机》,而是家喻户晓的“斗地主”。&br&&br&所以绕回来说,这个游戏机制其实并不新鲜。非对称游戏有相当古老的历史,绝对不是是这几年才突然异军突起,只不过最近才有越来越多的特色强烈的制作精良的PVP网游作品接连出现. &br&&br&而在雅达利时代,游戏的策划们一直都是通过非对称机制来设计游戏中的PVE内容,比如一个玩家只能躲避,另外一个玩家却可以攻击。这种例子着实不少。&/p&&figure&&img src=&https://pic4.zhimg.com/v2-fb23e5c7ec15e58b089ab67_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&500& data-rawheight=&311& class=&origin_image zh-lightbox-thumb& width=&500& data-original=&https://pic4.zhimg.com/v2-fb23e5c7ec15e58b089ab67_r.jpg&&&/figure&&p&&b&二、 非对称游戏的乐趣何在?
&/b&&/p&&p&&br&&/p&&p&那么读到这的小伙伴们,想必已经明白了“非对称对抗”的含义。那么我们的第二个问题来了,为什么如今会有那么多人热衷于并不公平的,充满了“马太效应”的非对称机制呢? &br&&br&而在讨论这个问题之前,我要从游戏制作角度科普一下:按照传统的游戏设计经验和理论来说,非对称对战的设计,是极为困难的。 &br&&br&因为这一设计有其内生的不稳定性:由于双方玩家的胜利目标、行为、决策方向都不一样,玩家在游戏过程中,非常容易因为非对称产生失落感。在过去这么多年中,从没有一款非对称对抗游戏取得过巨大成功,这恐怕并不是个偶然。 &/p&&figure&&img src=&https://pic1.zhimg.com/v2-197f6ab25e20d7fe6f5bcb_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&608& data-rawheight=&307& class=&origin_image zh-lightbox-thumb& width=&608& data-original=&https://pic1.zhimg.com/v2-197f6ab25e20d7fe6f5bcb_r.jpg&&&/figure&&p&就由《第五人格》而言:逃生者被抓时,总会去抱怨屠夫太强了,能力过于bug。而杀手玩家也会抱怨,为什么这些人总是跑的那么滑溜? &br&&br&但是处于在无数手游,同质换皮泛滥的今天,我们尝惯了百无变化的柴米油盐后,回过头来看,“咦?芥末似乎也挺好吃的啊?” &br&&br&没错,比起永远毫无变化的MOBA,非对称对抗的乐趣就在于——在非对称情况下胜利的喜悦。不平等挑战有时反而会激起玩家的求胜心,而在这种情况下的胜利也会让玩家格外舒爽,获得巨大的成就感。&br&&/p&&p&&b&三、 一种游戏,两种玩法
&/b&&/p&&p&&br&&/p&&p&接下来要说的,是非对称对抗游戏中值得一提的另一大特色——玩法多样。 &br&&br&在一个游戏中有两种玩法,这无疑是游戏最新鲜的体验之一。举个例子:我最爱玩的LCG卡牌游戏——矩阵潜袭。这一局你可以是谨小慎微,寻找对方防火墙漏洞的黑客:下一局你可能就是罗织防守,并推进议案的黑心财团:而其中双方的游戏内容体验,也是天差地别。 &/p&&figure&&img src=&https://pic4.zhimg.com/v2-eccdae0bc43_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&960& data-rawheight=&720& class=&origin_image zh-lightbox-thumb& width=&960& data-original=&https://pic4.zhimg.com/v2-eccdae0bc43_r.jpg&&&/figure&&p&没错,《第五人格》、《黎明杀机》等的游戏乐趣也就在于此,几次失败被抓也不要紧,玩家也能亲自参与到另一种不平等的规则中,反过来体验追杀他人的快感,宣泄自己上一局心中的怒火。 &br&&/p&&p&&b&四、 小结&/b&&/p&&figure&&img src=&https://pic1.zhimg.com/v2-dd575cec29f7ae93a035d3e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&950& data-rawheight=&535& class=&origin_image zh-lightbox-thumb& width=&950& data-original=&https://pic1.zhimg.com/v2-dd575cec29f7ae93a035d3e_r.jpg&&&/figure&&p&虽然非对称的游戏方式,在电子游戏诞生前的桌游时代便已存在。但电子游戏发展到今天,非对称游戏方式却堪堪在PVP的情景下大放异彩。随着《黎明杀机》的成功,《第五人格》是否能延续这异军突起的辉煌呢?&/p&&p&那就让我们拭目以待吧。&/p&&p&&br&&/p&&p&&b&找游戏,下载游戏,猫爪App,推荐好游戏。游戏一键下载,无需跳转。&/b&&/p&&p&&b&猫爪下载地址:&a href=&https://link.zhihu.com/?target=http%3A//maozhuar.com/download& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&猫爪客户端官网下载 - 猫爪推荐好游戏&/a&&/b&&/p&&p&&b&微信公众号:每天第一时间推荐好游戏&/b&&/p&&p&&/p&
本文系猫爪用户投稿,千字百元,欢迎各路游戏文豪踊跃投稿。 四人在黑暗中艰难徘徊潜行,躲避那第五人的危险目光 。 在网易铺天盖地的宣发攻势下,《第五人格》在一年的测试期后,带着“蒂姆-伯顿式”的哥特元素,终于走进了我们的视野。 而且凭借着在现今…
&p&最近写 CUDA 写出精神病,以 NVIDIA GPU 为例分析下&/p&&p&GPU的相比CPU有几个特点&/p&&ul&&li&运算资源非常丰富&/li&&li&控制部件占的面积比较小&/li&&li&内存带宽大,目前独显都采用 GDDR5 显存,位宽也高,主流独显内存带宽是CPU的十倍(200GB/s 对比 20GB)&/li&&li&内存延迟高,对比 CPU 使用多级缓存掩盖延迟,GPU 采用多线程掩盖延迟&/li&&li&寄存器资源极为丰富,32bit 寄存器有 64k &b&个&/b&,单线程可用 255 个&/li&&/ul&&p&所以,&b&GPU 只适合处理分支少,数据量大,延迟不敏感的任务。&/b&&/p&&p&先看一个GTX 1080 (Compute capability 6.1) 的 SM(stream multiprocessor) 结构&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-aa0d4d996dcc374c1a0a4cb25a925630_b.jpg& data-size=&small& data-rawwidth=&698& data-rawheight=&1220& data-default-watermark-src=&https://pic4.zhimg.com/50/v2-c2ac6d6c19_b.jpg& class=&origin_image zh-lightbox-thumb& width=&698& data-original=&https://pic3.zhimg.com/50/v2-aa0d4d996dcc374c1a0a4cb25a925630_r.jpg&&&figcaption&CC 6.0 SM,来自NVDIA&/figcaption&&/figure&&p&可以看到,一个 SM 中包含4个 Warp,每个 Warp 含有 32 个 CUDA Core【1】。那么,是不是一个Warp 就相当于 CPU 的 32 核呢?&/p&&p&&br&&/p&&p&&b&一、 GPU 不适合处理大量分支&/b&&/p&&p&我们上面说了,GPU 控制部件面积比较小,为了节约控制器,32 个 CUDA Core 必须时刻执行同样的指令。也就是说,一个 Warp 内部的所有 CUDA Core 的 PC(程序计数器)一直是同步的【2】,但是访存地址是可以不同的,每个核心还可以有自己独立的寄存器组,这种执行方式叫做 SIMT(Single Instruction Multi Trhead)。&/p&&p&这是,你可能会问,如果这一个 Warp 中永远都在执行相同的指令,如果分支了怎么处理呢?&/p&&p&问的好,其实 Warp 中的 CUDA Core 并不是真的永远都执行相同的指令,&b&它还可以不执行啊&/b&&/p&&figure&&img src=&https://pic3.zhimg.com/50/v2-76c403af291e453a7a03dd_b.jpg& data-size=&small& data-rawwidth=&800& data-rawheight=&600& data-default-watermark-src=&https://pic2.zhimg.com/50/v2-eba259420dbe266ec4bfe31e8507916c_b.jpg& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic3.zhimg.com/50/v2-76c403af291e453a7a03dd_r.jpg&&&figcaption&An example of warp divergence(http://15418.courses.cs.cmu.edu/spring2013/article/11)&/figcaption&&/figure&&p&这样会导致 Warp Divergence(见上图)。如果极端情况下,每一个Core的指令流都不一样,那么甚至还可能导致一个 Warp 中仅有一个 Core 在工作,效率降低为 1/32. &/p&&p&&b&二、GPU 需要数据高度对齐&/b&&/p&&p&别看 GPU 一个 Warp 核心这么多,带宽看起来这么大,但是实际上一个一个 Warp 的内存访问是成组的,一次只能读取连续的且对齐的 128byte。【3】(这正好是WarpSize 32 * 4 byte)&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-65c845c668bf1f945d5d107_b.jpg& data-size=&normal& data-rawwidth=&578& data-rawheight=&83& class=&origin_image zh-lightbox-thumb& width=&578& data-original=&https://pic1.zhimg.com/50/v2-65c845c668bf1f945d5d107_r.jpg&&&figcaption&摘自《Professional CUDA Programming》&/figcaption&&/figure&&p&上图这种操作的效率是最高的。如果访问完全分散,那么效率可能会又变成1/32.如下图。&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-e81cc83a0c305ae35b76be32e469e1a5_b.jpg& data-size=&normal& data-rawwidth=&599& data-rawheight=&93& class=&origin_image zh-lightbox-thumb& width=&599& data-original=&https://pic1.zhimg.com/50/v2-e81cc83a0c305ae35b76be32e469e1a5_r.jpg&&&figcaption&摘自《Professional CUDA Programming》&/figcaption&&/figure&&p&而且 NVIDIA GPU 的缓存策略和 CPU 也不同,没有时间局部性&/p&&blockquote&DIFFERENCE BETWEEN CPU L1 CACHE AND GPU L1 CACHE&br&The CPU L1 cache is optimized for both spatial and temporal locality. The GPU L1 cache is designed for spatial but not temporal locality. Frequent access to a cached L1 memory location does not increase the probability that the data will stay in cache.&br&-- 《Professional CUDA Programming》&/blockquote&&p&你可能又会问,CPU 的 Cache line 不也有 64bytes嘛,也就比 GPU 少一半啊,这有什么差别吗?当然有,&b&CPU 是一个核心一个 L1,GPU 是两个 Warp 一个 L1 Cache&/b&【4】&b&。&/b&整个Warp 有一个核心数据没准备好都执行不了。&/p&&p&当然,这么苛刻的访存条件,如果真的做 C = A+ B 还是没什么问题的,现实中访存不会真的这么对齐,所以NVIDIA也下了很多功夫,准备了 Cache 和 Shared Memory, Constant Cache 等部件,力求让程序员能高效访问内存。&/p&&p&&b&三、GPU 访存延迟大&/b&&/p&&p&说起来访存延迟和上一节的对齐还是有不少关系,这里分开讲。&/p&&p&你可能还注意到,一个 SM(CC6.1) 最多可同时启动 1024 个线程,但是一个 SM 中仅有 4个 Warp 共计 4 * 32 = 128 个 CUDA Core。显然一个SM可以启动的线程数比 CUDA Core 的数量大好多。这是为什么呢。&/p&&p&我们看下典型的 GPU 访存延迟(《Professional CUDA Programming》数据可能有点老)&/p&&blockquote& 10-20 cycles for arithmetic operations &br&400-800 cycles for global memory accesses &/blockquote&&p&访存一次能做40个运算啦!但是GPU的显存带宽实际上是非常高的。怎么能让CudaCore 尽量满载呢?这时 SIMT 就上场了。&/p&&p&没关系,这个 Warp (这里指32个线程,之前文中混淆了调度单位和硬件单位)在等数据准备好,我们可以执行另外一组32个线程嘛,这样虽然延迟还是很大,但是 CUDA Core 和 Memory 都能够充分利用。&/p&&p&&b&GPU 的线程切换不同于 CPU&/b&,在 CPU 上切换线程需要保存现场,将所有寄存器都存到主存中,而我们最开始说了,一个 SM 中有高达 64k 个 (注意不是64kbytes,有些中文书写错了)4 bytes 寄存器。而每个 Thread 最高使用的寄存器数量为255。少年你发现什么了吗?&/p&&p&256 * 4 * 32 = 32k。也就是说我每个线程把寄存器用到爆,也才用了一半的寄存器,那多出来的这些寄存器是干啥的?&/p&&p&其实,GPU 的线程切换只是切换了寄存器组,延迟超级低,几乎没有成本。考虑到通常线程并不会使用高达255个寄存器,实际上一个 CUDA Core 可以随时在八个线程之间反复横跳,那个线程数据准备好了就执行哪个【5】。这是 GPU 优于 CPU 的地方,也是为了掩盖延迟没办法的事情。&/p&&p&总而言之,GPU 访存还是需要对齐,而且延迟还是很大,但是&b&最大吞吐量&/b&(在场景合适的情况下,一个比较长的单位时间,处理的数据量)是远高于 CPU 的。&/p&&p&&br&&/p&&p&【注1】LD/SD 是存取部件,用来访问显存,SFU 为超越函数单元&/p&&p&【注2】 Volta 架构重大更新,目前允许每个线程有单独PC&/p&&p&【注3】经过 L1 Cache 的数据读取是以 128 byte 为单元,还可以配置为不经过缓存,单元大小为32byte,写入操作单元大小可以为为 32,64,128 bytes,本条说的都是 Global Memory access。&/p&&p&【注4】NVIDIA GPU 的 Cache 最近几代架构变化明显,具体架构请具体分析&/p&&p&【注5】实际上线程切换是以 Warp 为单位&/p&
最近写 CUDA 写出精神病,以 NVIDIA GPU 为例分析下GPU的相比CPU有几个特点运算资源非常丰富控制部件占的面积比较小内存带宽大,目前独显都采用 GDDR5 显存,位宽也高,主流独显内存带宽是CPU的十倍(200GB/s 对比 20GB)内存延迟高,对比 CPU 使用多级缓存…
&p&没有人深入讲一下procedural generation,怒答一波&/p&&p&&b&procedural generation&/b&,也就是程序化生成&/p&&p&广义来说,就是将原来人手制作的东西,交给程序算法去自动生成。&/p&&p&严格来说不能算新技术,但是近年却因为3A游戏的内容制作量爆炸性地提高,加上open world游戏的流行,而开始真正发扬光大&/p&&p&其中又以Ubi最为精通,开放世界类游戏高产大王(也最常被人吐槽内容重复)&/p&&p&自动生成的范畴很多,涉及美术资源甚至音乐音效,但是以场景生成应用最为广泛,所以也集中讲讲这块&/p&&p&(评论里有很多同学反馈,这里强调一下:通常大厂open world用的procedural generation,只是用来做&b&辅助生成&/b&,&b&不是100%从头到尾的自动化(下文也提到)&/b&,毕竟这是不可能达到高品质的。而即使狭义上100%的自动生成,例如minecraft, no man's sky,也往往有一部分基础部分是人先摆好,然后再随机像零件一样拼装的)&/p&&p&&br&&/p&&hr&&p&&b&+ 自动生成场景有多大意义?&/b&&/p&&p&传统的场景制作流程,都是人手工往场景内添加物件,对于2000年代的游戏来说,当时的地图不算大,细节也没今天那么丰富,所以人手制作尚且能够支撑。&/p&&p&但现在场景制作量多到什么程度呢&/p&&figure&&img src=&https://pic2.zhimg.com/50/v2-8c3e9cc5cc0bb81ce80822cea543307f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&714& data-rawheight=&455& data-default-watermark-src=&https://pic4.zhimg.com/50/v2-36ea4ee15ce_b.jpg& class=&origin_image zh-lightbox-thumb& width=&714& data-original=&https://pic2.zhimg.com/50/v2-8c3e9cc5cc0bb81ce80822cea543307f_r.jpg&&&/figure&&p&&br&&/p&&p&枭雄还是12平方公里的伦敦地图,而起源是120公里的埃及(部分)。广州大学城跑一次内环也才4.5km&/p&&p&&br&&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-e91b76c048cb9a2dc23360_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1433& data-rawheight=&723& data-default-watermark-src=&https://pic1.zhimg.com/50/v2-c65bd7e6eb6c307c751478_b.jpg& class=&origin_image zh-lightbox-thumb& width=&1433& data-original=&https://pic1.zhimg.com/50/v2-e91b76c048cb9a2dc23360_r.jpg&&&/figure&&p&像这样满街都是的民房,内部有:&/p&&p&
-各种家具、物品&/p&&p&
-墙上有破损&/p&&p&
-有很多地方要标记能不能攀爬、攀爬点在哪&/p&&p&
……&/p&&p&而这样的建筑,&b&一个城镇有20~50座不等&/b&,而这样的城镇,在刺客信条起源里头光大城市就有5座,小的乡镇或者城寨更是到处分布。&/p&&p&你还不能都长一样(想想魔兽世界的人族兵营)&/p&&p&现在的开放世界游戏,物件数量往往都会&b&百万级起步&/b&,并且为了尽可能呈现真实感,都要为每个地方尽可能增加细节(杂物、破损、表面凹凸)。这样如果全人手摆放,规模之大可想而知。&/p&&p&&b&应用了自动生成的优势除了成本之外,就是可以大胆地提升很多东西的细节丰富度&/b&,比如far cry 5可以用比较低的成本就可以制作细节很高的山崖。&/p&&p&&br&&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-1e24ca1db0bcf9fc444cd_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&843& data-rawheight=&469& data-default-watermark-src=&https://pic2.zhimg.com/50/v2-a620cbf9abc72c9bf3a1_b.jpg& class=&origin_image zh-lightbox-thumb& width=&843& data-original=&https://pic4.zhimg.com/50/v2-1e24ca1db0bcf9fc444cd_r.jpg&&&/figure&&p&这意味着什么呢?&/p&&p&&b&对于开放世界而言,最怕的就是玩家跑到一个地方发现没有内容。&/b&&/p&&p&以前这些山崖,只能作为一个远景看看,而现在即使爬上去你也会感到细节丰富,都是有相当逼真的碎石和植物,而不是光秃秃的贴图。(老滚爬山党路过)&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-57ff4fcfd39c34df0f1ab5_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&594& data-rawheight=&454& data-default-watermark-src=&https://pic3.zhimg.com/50/v2-a4c9b890bd72cfb606dee265cddba5a8_b.jpg& class=&origin_image zh-lightbox-thumb& width=&594& data-original=&https://pic4.zhimg.com/50/v2-57ff4fcfd39c34df0f1ab5_r.jpg&&&/figure&&p&&br&&/p&&p&另外,传统人工摆放,最蛋疼的,往往还不是产出第一版场景,而是策划要做修改的时候:&/p&&p&我的主角要帅气的从这个位置跑过去,把这个房子拆开,往两边挪一下,中间插个马路。&/p&&p&不够地方?想想办法嘛~&/p&&p&记得周围的花园还是要摆的漂漂亮亮的哦!&/p&&p&&b&而自动生成意味着程序可以做到针对你新修改的内容,自动布置。&/b&&/p&&p&最典型的的就是在树丛里刷了道路,草丛会自动删除,同时周围的碎石还会好好看看的重新布置一下,以适应新的情况&/p&&p&&br&&/p&&hr&&p&&b&+ 主要难点&/b&&/p&&p&而这种制作模式也有很多难题,当然怎么解决这些难题就是自动生成的核心技术壁垒了:&/p&&p&&b&1.如何避免重复感&/b&&/p&&p&场景之所以可以自动生成就是里头很多东西确实很好规则化。&/p&&p&但是规则化最大的敌人就是重复感,人为描述的规则往往考虑不够周全。&/p&&p&著名的No man's sky其实在自动化生成上已经做到很不错的水平,但上市依然一边倒的差评,就是因为重复。除了玩法缺乏之外,另一个就是自动生成并没有真正给玩家带来不重复的体验。去到一个新的地方,植物动物造型变一变,颜色变一变,其他都差不多。&/p&&p&即使技术屌如Ubi也没能完全摆脱自动生成产生的重复感,但是随着他们不断实践,我们能明显感受到品质在持续提升。&/p&&p&怎么解决重复感是一个很大的学问,&b&往往不仅仅是算法的问题,还涉及美术设计,基础资源积累,甚至游戏玩法设计本身&/b&。这里只是简单说一下要点。&/p&&p&首先,&b&基础资源的堆积&/b&也是很重要的环节:要搞清楚,自动生成场景不代表不需要人工资源的堆积,也就是你想你的自然生态场景看起来丰富,你还是要先有足够多种类的树木、石头。&/p&&p&No man's sky的动物就是将头、身、四肢、小配件等模型分拆再按规则重组,加上颜色、材质的随机来做出随机感。其实这个方法很不错,但是因为原始资源实在不够,最多几十个星球你就会觉得毫无新意。而随机可选的东西多了,重复感才会相对减弱。&/p&&p&然后,是&b&自动生成选择的随机维度&/b&,要尽量容易产生有意义的差异化。比如生成动物,虽然靠部件换色能够轻松组合出几百个能看的组合,但是往往没有人会觉得里头有记忆点,从而感到烦厌。而相比之下,体型、夸张的形状,会更有记忆点。另外,用人的设计在里头做干扰,也是很重要的环节,比如加上生物的行为,行为与玩法又要关联。玩家遇到一些动物有变态的行为组合(能喷火又跑得快)&/p&&p&最后,就是&b&算法产生的东西的随机性要符合自然的感觉&/b&,这个就要看具体的情景,例如树和灌木怎么混搭,怎么选择位置,怎么加杂色和大小变化,这些就不再赘述。&/p&&p&&br&&/p&&p&&b&2.针对不同的物件/情景设计合理算法&/b&&/p&&p&目前自动生成并没有非常通用的方案,基本上针对不同的物件都要设计不同的方案,大到产生山谷河流,小到种树放石头布电线。&/p&&p&同样布置石头,在山壁上和在平原上不同,山壁需要考虑斜率,考虑山壁的材质是不是石头,平原上则考虑随机分布的合理性和去模式化感觉。&/p&&p&模块化建筑合成,不同的建筑风格可能都会有不同的思路。&/p&&p&而针对不同的游戏,这些方案往往还要跟着游戏的一些细节做调整,比如有些游戏要能攀爬,可攀爬的部分就要针对做设计。&/p&&p&当然,随着这些方案的持续积累,这些技术最终都会变得越来越全面和通用,毕竟常规题材还是有限的。&/p&&p&&br&&/p&&p&&b&3.与人工布置的结合&/b&&/p&&p&&b&目前还不可能做到从头到尾都让计算机生成场景&/b&(不然很多人要失业了),所以实际制作过程中还是需要大量的人工参与。&/p&&p&那么一方面,随机算法不能破坏人制作的东西,比如你布置了一条路,算法就不能再上面放一棵树,如果之前已经有一棵树,自动生成还要会删除它。而这个事实上比想象中还要复杂,例如AI的巡逻路线可能被自动摆的物件挡住、程序设计的规则可能没有考虑到特殊情况导致某个角落出现不正常,GDC2018上刺客信条就分享了测试团队怎么用自动化的思路来发现自动生成和人工内容相冲突的问题。&/p&&p&另一方面,人还要能引导算法去遵从设计师的思路。例如策划可能会想为自己的玩法设计地形(区域大小、关键路线、关键物件等),自动生成还要考虑如何配合人的想法,而不是胡乱生成一堆随机但是完全不搭的东西&/p&&p&这里说两种常见思路:&/p&&p&&b&3.1人工布点、曲线、面,然后算法大规模生成&/b&&/p&&p&简单说就是,&b&美术和策划布置比较少的点或者线作为引导标记,来引导自动生成算法应该在哪里布置相应的东西&/b&,剩下的事情就是交给算法去生成,并且保证生成的东西符合这些引导标记。&/p&&p&举几个GDC分享&/p&&p&far cry5:&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.gdcvault.com/play/1024029/-Ghost-Recon-Wildlands-Terrain& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&gdcvault.com/play/10240&/span&&span class=&invisible&&29/-Ghost-Recon-Wildlands-Terrain&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&这个分享非常细的讲到以自然环境+城市fps为基础的这个大框架下各种东西的自动布置,包括植被、山崖、碎石、电线、地形、河流等等,还应用到了houdini(其实也可以自己写随机算法,但估计是想使用houdini里头各种现成的solver用来做生成算法)&/p&&figure&&img src=&https://pic4.zhimg.com/50/v2-84d25d4cd936c247d9b213_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&329& data-rawheight=&189& data-default-watermark-src=&https://pic2.zhimg.com/50/v2-b01b874975efe5717bdebfd6d1f74cc6_b.jpg& class=&content_image& width=&329&&&/figure&&figure&&img src=&https://pic2.zhimg.com/50/v2-64f62994af69eacbcb4a602f13d5c250_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&802& data-rawheight=&196& data-default-watermark-src=&https://pic4.zhimg.com/50/v2-6c4528e0dbdfc1d69da705_b.jpg& class=&origin_image zh-lightbox-thumb& width=&802& data-original=&https://pic2.zhimg.com/50/v2-64f62994af69eacbcb4a602f13d5c250_r.jpg&&&/figure&&p&&br&&/p&&p&刺客信条枭雄:伦敦不是一日建成&/p&&p&主要介绍街道、建筑的生成&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.gdcvault.com/play/1023305/-Assassin-s-Creed-Syndicate& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&gdcvault.com/play/10233&/span&&span class=&invisible&&05/-Assassin-s-Creed-Syndicate&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&&br&&/p&&p&&b&3.2基于笔刷&/b&&/p&&p&地平线:基于GPU的自动物件布置方案&/p&&p&&a href=&//link.zhihu.com/?target=https%3A//www.guerrilla-games.com/read/gpu-based-procedural-placement-in-horizon-zero-dawn& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://www.&/span&&span class=&visible&&guerrilla-games.com/rea&/span&&span class=&invisible&&d/gpu-based-procedural-placement-in-horizon-zero-dawn&/span&&span class=&ellipsis&&&/span&&/a&&/p&&figure&&img src=&https://pic1.zhimg.com/50/v2-aebbf22597a69fcc3a8f684_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&718& data-rawheight=&339& data-default-watermark-src=&https://pic4.zhimg.com/50/v2-976cdb41cd2_b.jpg& class=&origin_image zh-lightbox-thumb& width=&718& data-original=&https://pic1.zhimg.com/50/v2-aebbf22597a69fcc3a8f684_r.jpg&&&/figure&&p&&br&&/p&&p&这种方式在更加适合美术和策划需要仔细定制地图细节的情况。&/p&&p&相当于程序开发了一个很强的地图刷,这个刷可以根据美术策划的需求配置成几种分类:道路、树1、树2、杂物&/p&&p&然后&b&你就只管往上刷,程序会自动帮你按照合理的规则(当然需要程序/TA帮忙定制)放置这些东西&/b&,例如保证路和斜坡上没有树,保证树与树之间密度合理,保证树下有合理的灌木草丛覆盖,等等。&/p&&p&相比大规模生成,这种方案可控程度更高,美术策划很好控制细节,当然也意味着更高的人工参与量(刷漆工还有码农)。&/p&&p&另外这个思路现在在UE4/unity里也能实现,并且市场还有几个实例方案(例如landscape auto material),虽然这些实现的性能比较捉急……还没有达到地平线这种产品化的程度,但不失为一个很好的思路参考。&/p&&p&&br&&/p&&p&&br&&/p&&p&随着现在AI发展,未来自动生成这块肯定会越来越强大,大厂和小厂在这块的壁垒差距会越加明显,但是玩家未来也能够更容易相守到更高品质,细节更丰富的,内容量更大的游戏,包爽。&/p&
没有人深入讲一下procedural generation,怒答一波procedural generation,也就是程序化生成广义来说,就是将原来人手制作的东西,交给程序算法去自动生成。严格来说不能算新技术,但是近年却因为3A游戏的内容制作量爆炸性地提高,加上open world游戏的流行…
现在,各大音乐平台都对版权控制特变严重,歌曲下载,试听都需要冲会员,或者掏钱买,而且还很贵,对我这种屌丝来说呢,确实买不起,哈哈哈,没办法,只能想法解决,歌曲还是要听的,听不到偶像歌手的歌曲是很痛苦的。&/p&&p&
扣扣音乐的音乐版权可以说是很全的,大部分歌曲的版权都有,所以今天给大家分享一个使用Python爬虫爬取扣扣音乐歌曲下载链接,得到了链接,怎么下载本地呢,大家都懂的。&/p&&p&
完整代码:&a href=&http://link.zhihu.com/?target=https%3A//github.com/YPSheng/python/tree/master/%25E7%2588%25AC%25E5%258F%2596qq%25E9%259F%25B3%25E4%25B9%%25AD%258C%25E6%259B%25B2& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/YPSheng/pyth&/span&&span class=&invisible&&on/tree/master/%E7%88%AC%E5%8F%96qq%E9%9F%B3%E4%B9%90%E6%AD%8C%E6%9B%B2&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&
工具:Python编辑器&/p&&p&
python3&/p&&p&
爬取网址:&a href=&http://link.zhihu.com/?target=https%3A//y.qq.com/& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&y.qq.com/&/span&&span class=&invisible&&&/span&&/a&&/p&&p&一、首先进入扣扣音乐网页端&/p&&figure&&img src=&https://pic1.zhimg.com/v2-13ec26b24e0ec436de10fe_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1311& data-rawheight=&697& class=&origin_image zh-lightbox-thumb& width=&1311& data-original=&https://pic1.zhimg.com/v2-13ec26b24e0ec436de10fe_r.jpg&&&/figure&&p&二、我们肯定有自己的偶像歌手啦,好,在搜索框搜索我们喜爱的歌手,右键点击检查,查看网页加载信息,由于加载出来的歌曲,直接获取网页也是查找不到的,它是通过ajax加载的。我们需要从加载的链接中,找到这个链接,然后查看获取到的json数据,里边包含着本页的所有歌曲信息&/p&&figure&&img src=&https://pic3.zhimg.com/v2-518f1cfdcc4aa180ae262d585c05113e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1338& data-rawheight=&672& class=&origin_image zh-lightbox-thumb& width=&1338& data-original=&https://pic3.zhimg.com/v2-518f1cfdcc4aa180ae262d585c05113e_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-c014ad844d1d17f6f4b77b13c2dc9be7_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1333& data-rawheight=&447& class=&origin_image zh-lightbox-thumb& width=&1333& data-original=&https://pic4.zhimg.com/v2-c014ad844d1d17f6f4b77b13c2dc9be7_r.jpg&&&/figure&&p&链接:&a href=&http://link.zhihu.com/?target=https%3A//c.y.qq.com/soso/fcgi-bin/client_search_cp%3Fct%3D24%26qqmusic_ver%3D1298%26new_json%3D1%26remoteplace%3Dtxt.yqq.song%26searchid%3DD0%26aggr%3D1%26cr%3D1%26catZhida%3D1%26lossless%3D0%26flag_qc%3D0%26p%3D1%26n%3D20%26w%3D%25E4%25BA%%259C%%25A4%25A9%26g_tk%3D5381%26jsonpCallback%3DsearchCallbacksong615%26loginUin%3D0%26hostUin%3D0%26format%3Djsonp%26inCharset%3Dutf8%26outCharset%3Dutf-8%26notice%3D0%26platform%3Dyqq%26needNewCode%3D0& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&c.y.qq.com/soso/fcgi-bi&/span&&span class=&invisible&&n/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=71083&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=20&w=%E4%BA%94%E6%9C%88%E5%A4%A9&g_tk=5381&jsonpCallback=searchCallbacksong615&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0&/span&&span class=&ellipsis&&&/span&&/a&&/p&&figure&&img src=&https://pic3.zhimg.com/v2-578ce533e103da97b75ef38ec621b2ba_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1351& data-rawheight=&647& class=&origin_image zh-lightbox-thumb& width=&1351& data-original=&https://pic3.zhimg.com/v2-578ce533e103da97b75ef38ec621b2ba_r.jpg&&&/figure&&p&三、好了,知道了怎么获取歌曲信息数据,我们开始研究一下这个链接&/p&&p&&a href=&http://link.zhihu.com/?target=https%3A//c.y.qq.com/soso/fcgi-bin/client_search_cp%3Fct%3D24%26qqmusic_ver%3D1298%26new_json%3D1%26remoteplace%3Dtxt.yqq.song%26searchid%3DD0%26aggr%3D1%26cr%3D1%26catZhida%3D1%26lossless%3D0%26flag_qc%3D0%26p%3D1%26n%3D20%26w%3D%25E4%25BA%%259C%%25A4%25A9%26g_tk%3D5381%26jsonpCallback%3DsearchCallbacksong615%26loginUin%3D0%26hostUin%3D0%26format%3Djsonp%26inCharset%3Dutf8%26outCharset%3Dutf-8%26notice%3D0%26platform%3Dyqq%26needNewCode%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&https://c.y.qq.com/soso/fcgi-bin/client_search_cp?ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=71083&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=20&w=五月天&g_tk=5381&jsonpCallback=searchCallbacksong615&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0&/a&&/p&&p&这个链接可以分为两部分:&/p&&p&(1)域名路径部分:&a href=&http://link.zhihu.com/?target=https%3A//c.y.qq.com/soso/fcgi-bin/client_search_cp%3Fct%3D24%26qqmusic_ver%3D1298%26new_json%3D1%26remoteplace%3Dtxt.yqq.song%26searchid%3DD0%26aggr%3D1%26cr%3D1%26catZhida%3D1%26lossless%3D0%26flag_qc%3D0%26p%3D1%26n%3D20%26w%3D%25E4%25BA%%259C%%25A4%25A9%26g_tk%3D5381%26jsonpCallback%3DsearchCallbacksong615%26loginUin%3D0%26hostUin%3D0%26format%3Djsonp%26inCharset%3Dutf8%26outCharset%3Dutf-8%26notice%3D0%26platform%3Dyqq%26needNewCode%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&https://c.y.qq.com/soso/fcgi-bin/client_search_cp?&/a&&/p&&p&(2)参数部分:&a href=&http://link.zhihu.com/?target=https%3A//c.y.qq.com/soso/fcgi-bin/client_search_cp%3Fct%3D24%26qqmusic_ver%3D1298%26new_json%3D1%26remoteplace%3Dtxt.yqq.song%26searchid%3DD0%26aggr%3D1%26cr%3D1%26catZhida%3D1%26lossless%3D0%26flag_qc%3D0%26p%3D1%26n%3D20%26w%3D%25E4%25BA%%259C%%25A4%25A9%26g_tk%3D5381%26jsonpCallback%3DsearchCallbacksong615%26loginUin%3D0%26hostUin%3D0%26format%3Djsonp%26inCharset%3Dutf8%26outCharset%3Dutf-8%26notice%3D0%26platform%3Dyqq%26needNewCode%3D0& class=& wrap external& target=&_blank& rel=&nofollow noreferrer&&ct=24&qqmusic_ver=1298&new_json=1&remoteplace=txt.yqq.song&searchid=71083&t=0&aggr=1&cr=1&catZhida=1&lossless=0&flag_qc=0&p=1&n=20&w=五月天&g_tk=5381&jsonpCallback=searchCallbacksong615&loginUin=0&hostUin=0&format=jsonp&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0&/a&&/p&&p&
这么多的参数,说实话,我刚看到的时候,眼都黑了,如果你多观察几次你会发现,里面大部分的参数都是不变的,只有个别几个是变化的。这里不多说了,过程大家去体验,然后好好观察,我这里直接给大家贴出来,箭头标记的那几个就是变化的参数:&/p&&figure&&img src=&https://pic1.zhimg.com/v2-f8cd409a9bfcc_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&567& data-rawheight=&565& class=&origin_image zh-lightbox-thumb& width=&567& data-original=&https://pic1.zhimg.com/v2-f8cd409a9bfcc_r.jpg&&&/figure&&p&p 和 n的值,我们在获取到的json数据中找到,jsonpcallback获取就比较费劲了,对爬虫有研究的可以去找一下,它是在一个js文件中,考验大家的观察力以及对js文件的研究了,我这里直接贴出来。&/p&&figure&&img src=&https://pic1.zhimg.com/v2-da6ffddca8a5d2fc6f3b8c_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&506& data-rawheight=&43& class=&origin_image zh-lightbox-thumb& width=&506& data-original=&https://pic1.zhimg.com/v2-da6ffddca8a5d2fc6f3b8c_r.jpg&&&/figure&&p&三、我们先把这个扔一边,里面有歌曲信息我们一会会用到,下面我们先来看歌曲链接长得什么样,随便点击一首歌曲,然后会转到播放界面,然后查看网页加载信息,找到歌曲文件那个链接&/p&&figure&&img src=&https://pic1.zhimg.com/v2-0c2ad881e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1141& data-rawheight=&582& class=&origin_image zh-lightbox-thumb& width=&1141& data-original=&https://pic1.zhimg.com/v2-0c2ad881e_r.jpg&&&/figure&&p&链接:&a href=&http://link.zhihu.com/?target=http%3A//dl.stream.qqmusic.qq.com/CdpV4bOEJs.m4a%3Fvkey%3DB5B9C5DF40E87BC3FAB6C8C094B6F2BDD6E7FDBB%26guid%3D%26uin%3D0%26fromtag%3D66& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&http://&/span&&span class=&visible&&dl.stream.qqmusic.qq.com&/span&&span class=&invisible&&/CdpV4bOEJs.m4a?vkey=B5B9C5DF40E87BC3FAB6C8C094B6F2BDD6E7FDBB&guid=&uin=0&fromtag=66&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&
这个链接里面的参数主要是vkey,guid这两个比较麻烦,我们先看怎么获取vkey,我们继续查看加载的网页信息,会发现一个链接,返回的是一串英文字符串,特别长,不用管,这是加密后的,我们选择这个链接,右键点击在另外一个页面打开,会发现让下载一个文件,然后下载,打开文件就会发现秘密:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-fe13e1ab9a43b2a8f51b0a2_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1366& data-rawheight=&479& class=&origin_image zh-lightbox-thumb& width=&1366& data-original=&https://pic3.zhimg.com/v2-fe13e1ab9a43b2a8f51b0a2_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-e884befcab_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&448& data-rawheight=&338& class=&origin_image zh-lightbox-thumb& width=&448& data-original=&https://pic4.zhimg.com/v2-e884befcab_r.jpg&&&/figure&&figure&&img src=&https://pic4.zhimg.com/v2-b5c92fbe4a6de748d1277f_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&1340& data-rawheight=&127& class=&origin_image zh-lightbox-thumb& width=&1340& data-original=&https://pic4.zhimg.com/v2-b5c92fbe4a6de748d1277f_r.jpg&&&/figure&&p&
获取vkey,&a href=&http://link.zhihu.com/?target=https%3A//c.y.qq.com/base/fcgi-bin/fcg_music_express_mobile3.fcg%3Fg_tk%3D5381%26jsonpCallback%3DMusicJsonCallback99975%26loginUin%3D0%26hostUin%3D0%26format%3Djson%26inCharset%3Dutf8%26outCharset%3Dutf-8%26notice%3D0%26platform%3Dyqq%26needNewCode%3D0%26cid%3Dcallback%3DMusicJsonCallback99975%26uin%3D0%26songmid%3D003g4dpV4bOEJs%26filename%3DCdpV4bOEJs.m4a%26guid%3D& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&c.y.qq.com/base/fcgi-bi&/span&&span class=&invisible&&n/fcg_music_express_mobile3.fcg?g_tk=5381&jsonpCallback=MusicJsonCallback99975&loginUin=0&hostUin=0&format=json&inCharset=utf8&outCharset=utf-8&notice=0&platform=yqq&needNewCode=0&cid=&callback=MusicJsonCallback99975&uin=0&songmid=003g4dpV4bOEJs&filename=CdpV4bOEJs.m4a&guid=&/span&&span class=&ellipsis&&&/span&&/a&
访问这个链接所需参数,红色标记的还是需要改变的,songmid我们观察会发现,在第一次获取到的json文件里面包含着歌曲的songmid,就是media_mid的值,不过这个链接里面filename是拼接出来的C400+media_mid+.m4a:&/p&&figure&&img src=&https://pic4.zhimg.com/v2-fa61acebd4bf_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&582& data-rawheight=&292& class=&origin_image zh-lightbox-thumb& width=&582& data-original=&https://pic4.zhimg.com/v2-fa61acebd4bf_r.jpg&&&/figure&&p&&br&&/p&&p&guid的获取比较麻烦。它也是写在一个js文件里面的,大家可以自己去观察网页加载的js,然后去查找关于guid的获取方式,我这里直接贴出来:&/p&&figure&&img src=&https://pic3.zhimg.com/v2-b91fc0d03a5b87c72bc2_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&638& data-rawheight=&111& class=&origin_image zh-lightbox-thumb& width=&638& data-original=&https://pic3.zhimg.com/v2-b91fc0d03a5b87c72bc2_r.jpg&&&/figure&&p&&br&&/p&&p&
四、好了,关于获取歌曲的链接所有的参数都找到了,那么现在就可以写爬虫了,我已将程序上传至github,地址:&a href=&http://link.zhihu.com/?target=https%3A//github.com/YPSheng/python/tree/master/%25E7%2588%25AC%25E5%258F%2596qq%25E9%259F%25B3%25E4%25B9%%25AD%258C%25E6%259B%25B2& class=& external& target=&_blank& rel=&nofollow noreferrer&&&span class=&invisible&&https://&/span&&span class=&visible&&github.com/YPSheng/pyth&/span&&span class=&invisible&&on/tree/master/%E7%88%AC%E5%8F%96qq%E9%9F%B3%E4%B9%90%E6%AD%8C%E6%9B%B2&/span&&span class=&ellipsis&&&/span&&/a&&/p&&p&我将抓取的结果写入到了一个文件里,大家可以选择存取到数据库,链接给获取到了,怎么下载就是大家自己的事了,已测试,完全可以下载。如有不对的地方请大家指出,谢谢!&/p&&figure&&img src=&https://pic3.zhimg.com/v2-74d231c2c74c647d99b62a775e8c5d2e_b.jpg& data-caption=&& data-size=&normal& data-rawwidth=&978& data-rawheight=&561& class=&origin_image zh-lightbox-thumb& width=&978& data-original=&https://pic3.zhimg.com/v2-74d231c2c74c647d99b62a775e8c5d2e_r.jpg&&&/figure&&p&&/p&
现在,各大音乐平台都对版权控制特变严重,歌曲下载,试听都需要冲会员,或者掏钱买,而且还很贵,对我这种屌丝来说呢,确实买不起,哈哈哈,没办法,只能想法解决,歌曲还是要听的,听不到偶像歌手的歌曲是很痛苦的。 扣扣音乐的音乐版权可以说是很全的,…
之前答过类似的问题,感觉这里也可以用,顺便贴过来,修改一下,补上几点。&br&&br&影响战斗结果的,按重要程度划分,实际上由分成三个部分组成:人物属性数值、战斗策略、运气。所以游戏里的平衡主要有两个方面:数值投放与消耗的平衡、战斗本身的平衡。&br&&br&先说数值投放和消耗的平衡,这个才是最关键的,因为关系到人物属性的成长:&br&&br&①保证同一个等级阶段内,战斗属性数值投放的MAX值及MIN值,这两个战斗单位之间的战斗体验是可以让人接受的。举例来说,如果出现秒杀或者不破防的情况,基本上都是不能接受的。MAX值是你的游戏在某个阶段等级内投放的最大数值,而MIN值通常是你期望非R玩家达到的最低战斗力标准。&br&&br&②厘定“等级”对战斗结果的影响大小。等级因素对战斗结果影响越大,等级就越重要,反之亦然。可能带来的结果是双向的,等级愈重要,经验则易成为玩家的始终第一追求并且能卖的很好,但玩家的追求焦点可能无法较难从经验值上转移。等级不重要,则可能你的游戏在某个等级阶段,战斗数值投放的MAX值和MIN值差距会过大,消费能力强的大R和非R战斗力体验会更易失控。&br&&br&③明确你的人物数值对战斗结果影响的百分比。这个其实只是理想状态,但同ELO算法一样,在绝对大量的抽样基础之上,你可以把这个东东看成一个常态分布函数。这里没有一个最优值,完全看策划的需求。但可以明确的是,数值影响比越大,战斗本身的策略性就越低,最终会回头影响数值的贩卖。同样的,数值影响比越低,战斗本身的策略性发挥空间就越大,游戏可能越好玩,但可能从一开始就会影响战斗数值的贩卖。心动去年出的老版开天辟地和将神就是两个很好的例子。&br&&br&④建立一套较为完善的战斗模拟体系和后台数据监控系统。建议就是这个东西越完善越好。通过大量的模拟,剔除掉数值、策略或者运气可能带来的极端战斗体验。但在这个东西毕竟只是在模拟行为,实际上等游戏上线之后需要根据后台数据进行大量调整。举例来说,如果你有个竞技场,战斗力差距达到X值的玩家,胜者和败者他们通常的胜率和分值期望是多少。这个数值是否是你能够接受的,如果不能够接受,你会怎么样调整?&br&&br&⑤战斗公式的选定问题。这个是上面的策划回答的主要部分,最紧密的关系战斗体验。减法公式、乘法公式、除法公式各有优缺点,选用的原则看策划本身的需求和自身把控能力。减法最直接,战斗力贩卖更明显,但也最考策划数值规划能力。除法适合新人用的较多,前期体验较好,但如何解决后期的伤害成长边际效应同样看策划,天龙等很多游戏都在这个地方上另辟蹊径了。乘法用的人也不少,但若何磨平玩家对属性的理解门槛是个问题。&br&&br&再说战斗策略的平衡。&br&&br&①先明确自己是倾向平衡优先还是职业特色优先,但一切设定以自己的可控能力为前提。当然职业又平衡又各有特色是存在的,但也更考验策划水平。暴雪自己也早就承认天赋完全是个自己挖的一个天坑。大部分时候想通过依靠职业数值成长差异来弥补职业特色差异的做法都是不太现实的,想想像暴雪一样每出一个PATCH就被喷一遍自己是否能承受得了。&br&&br&②谨防出现通用的最优解。考虑平衡的同时不要忘记趣味,游戏性永远是需要关注的第一点。&br&&br&最后说运气。&br&&br&①明确运气对战斗结果影响的百分比。如攻击上下限浮动值、命闪暴韧等等。最终可以通过大量的战斗模拟及中央后台统计得出一个常态值。投放运气就像放盐,多一分太咸,少一分太淡。&br&&br&======================================================================&br&最后单独说一点,考虑平衡的时候,你必须首先明确你需要平衡的对象。抛开对象谈平衡都是没有意义的。实际上在道具消费模式中,玩家的消费能力和水平千差万别,这个时候与其考虑把胖子和瘦子放在一起怎么能打起来平衡,不如换个角度考虑怎么样把胖子和瘦子细分,让他们跟合适自己的对手战斗。此外,再回过头来想想,什么时候需要平衡,什么时候不需要。
之前答过类似的问题,感觉这里也可以用,顺便贴过来,修改一下,补上几点。 影响战斗结果的,按重要程度划分,实际上由分成三个部分组成:人物属性数值、战斗策略、运气。所以游戏里的平衡主要有两个方面:数值投放与消耗的平衡、战斗本身的平衡。 先说数值…
谢邀,手游页游和端游的服务端本质上没区别,区别的是游戏类型。&br&&br&&b&类型1:卡牌、跑酷等弱交互服务端&/b&&br&&br&卡牌跑酷类因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使用简单的 HTTP服务器:&br&&figure&&img src=&https://pic3.zhimg.com/50/b6e288b02b8664afd843_b.jpg& data-rawwidth=&438& data-rawheight=&186& class=&origin_image zh-lightbox-thumb& width=&438& data-original=&https://pic3.zhimg.com/50/b6e288b02b8664afd843_r.jpg&&&/figure&登录时可以使用非对称加密(RSA, DH),服务器根据客户端uid,当前时间戳还有服务端私钥,计算哈希得到的加密 key 并发送给客户端。之后双方都用 HTTP通信,并用那个key进行RC4加密。客户端收到key和时间戳后保存在内存,用于之后通信,服务端不需要保存 key,因为每次都可以根据客户端传上来的 uid 和 时间戳 以及服务端自己的私钥计算得到。用模仿 TLS的行为,来保证多次 HTTP请求间的客户端身份,并通过时间戳保证同一人两次登录密钥不同。&br&&br&每局开始时,访问一下,请求一下关卡数据,玩完了又提交一下,验算一下是否合法,获得什么奖励,数据库用单台 MySQL或者 MongoDB即可,后端的 Redis做缓存(可选)。如果要实现通知,那么让客户端定时15秒轮询一下服务器,如果有消息就取下来,如果没消息可以逐步放长轮询时间,比如30秒;如果有消息,就缩短轮询时间到10秒,5秒,即便两人聊天,延迟也能自适应。&br&&br&此类服务器用来实现一款三国类策略或者卡牌及酷跑的游戏已经绰绰有余,这类游戏因为逻辑简单,玩家之间交互不强,使用 HTTP来开发的话,开发速度快,调试只需要一个浏览器就可以把逻辑调试清楚了。&br&&br&&b&类型2:第一代游戏服务器 1978&/b&&br&&br&1978年,英国著名的财经学校University of Essex的学生 Roy Trubshaw编写了世界上第一个MUD程序《MUD1》,在University of Essex于1980年接入 ARPANET之后加入了不少外部的玩家,甚至包括国外的玩家。《MUD1》程序的源代码在 ARPANET共享之后出现了众多的改编版本,至此MUD才在全世界广泛流行起来。不断完善的 MUD1的基础上产生了开源的 MudOS(1991),成为众多网游的鼻祖:&br&&figure&&img src=&https://pic1.zhimg.com/50/b647b152f0c29b29e2c9_b.jpg& data-rawwidth=&368& data-rawheight=&225& class=&content_image& width=&368&&&/figure&MUDOS采用 C语言开发,因为玩家和玩家之间有比较强的交互(聊天,交易,PK),MUDOS使用单线程无阻塞套接字来服务所有玩家,所有玩家的请求都发到同一个线程去处理,主线程每隔1秒钟更新一次所有对象(网络收发,更新对象状态机,处理超时,刷新地图,刷新NPC)。&br&&br&游戏世界采用房间的形式组织起来,每个房间有东南西北四个方向可以移动到下一个房间,由于欧美最早的网游都是地牢迷宫形式的,因此场景的基本单位被成为 “房间”。MUDOS使用一门称为LPC的脚本语言来描述整个世界(包括房间拓扑,配置,NPC,以及各种剧情)。游戏里面的高级玩家(巫师),可以不断的通过修改脚本来为游戏添加房间以及增加剧情。早年 MUD1上线时只有17个房间,Roy Trubshaw毕业以后交给他的师弟 Richard Battle,在 Richard Battle手上,不断的添加各种玩法到一百多个房间,终于让 MUD发扬光大。&br&&br&用户使用 Telnet之类的客户端用 Tcp协议连接到 MUDOS上,使用纯文字进行游戏,每条指令用回车进行分割。比如 1995年国内第一款 MUD游戏《侠客行》,你敲入:&go east&,游戏就会提示你:“后花园 - 这里是归云庄的后花园,种满了花草,几个庄丁正在浇花。此地乃是含羞草生长之地。这里唯一的出口是 north。这里有:花待 阿牧(A mu),还有二位庄丁(Zhuang Ding)”,然后你继续用文字操作,查看阿牧的信息:“look a mu”,系统提示:“花待 阿牧(A mu)他是陆乘风的弟子,受命在此看管含羞草。他看起来三十多岁,生得眉清目秀,端正大方,一表人才。他的武艺看上去【不是很高】,出手似乎【极轻】”。然后你可以选择击败他获得含羞草,但是你吃了含羞草却又可能会中毒死亡。在早期网上资源贫乏的时候,这样的游戏有很强的代入感。&br&&br&用户数据保存在文件中,每个用户登录时,从文本文件里把用户的数据全部加载进来,操作全部在内存里面进行,无需马上刷回磁盘。用户退出了,或者每隔5分钟检查到数据改动了,都会保存会磁盘。这样的系统在当时每台服务器承载个4000人同时游戏,不是特别大的问题。从1991年的 MUDOS发布后,全球各地都在为他改进,扩充,退出新版本,随着 Windows图形机能的增强。1997游戏《UO》在 MUDOS的基础上为角色增加的x,y坐标,为每个房间增加了地图,并且为每个角色增加了动画,形成了第一代的图形网络游戏。&br&&br&因为游戏内容基本可以通过 LPC脚本进行定制,所以MUDOS也成为名副其实的第一款服务端引擎,引擎一次性开发出来,然后制作不同游戏内容。后续国内的《万王之王》等游戏,很多都是跟《UO》一样,直接在 MUDOS上进行二次开发,加入房间的地图还有角色的坐标等要素,该架构一直为国内的第一代 MMORPG提供了稳固的支持,直到 2003年,还有游戏基于 MUDOS开发。&br&&br&虽然后面图形化增加了很多东西,但是这些MMORPG后端的本质还是 MUDOS。随着游戏内容的越来越复杂,架构变得越来越吃不消了,各种负载问题慢慢浮上水面,于是有了我们的第二代游戏服务器。&br&&br&&b&类型3:第二代游戏服务器 2003&/b&&br&&br&2000年后,网游已经脱离最初的文字MUD,进入全面图形化年代。最先承受不住的其实是很多小文件,用户上下线,频繁的读取写入用户数据,导致负载越来越大。随着在线人数的增加和游戏数据的增加,服务器变得不抗重负。同时早期 EXT磁盘分区比较脆弱,稍微停电,容易发生大面积数据丢失。因此第一步就是拆分文件存储到数据库去。&br&&figure&&img src=&https://pic1.zhimg.com/50/984d43af31dcbb20bfbdf6c22cce4947_b.jpg& data-rawwidth=&439& data-rawheight=&159& class=&origin_image zh-lightbox-thumb& width=&439& data-original=&https://pic1.zhimg.com/50/984d43af31dcbb20bfbdf6c22cce4947_r.jpg&&&/figure&&br&此时游戏服务端已经脱离陈旧的 MUDOS体系,各个公司在参考 MUDOS结构的情况下,开始自己用 C在重新开发自己的游戏服务端。并且脚本也抛弃了 LPC,采用扩展性更好的 Python或者 Lua来代替。由于主逻辑使用单线程模型,随着游戏内容的增加,传统单服务器的结构进一步成为瓶颈。于是有人开始拆分游戏世界,变为下面的模型:&br&&figure&&img src=&https://pic1.zhimg.com/50/68a2d231c4e2c1ba2fb37_b.jpg& data-rawwidth=&404& data-rawheight=&163& class=&content_image& width=&404&&&/figure&游戏服务器压力拆分后得意缓解,但是两台游戏服务器同时访问数据库,大量重复访问,大量数据交换,使得数据库成为下一个瓶颈。于是形成了数据库前端代理(DB Proxy),游戏服务器不直接访问数据库而是访问代理,再有代理访问数据库,同时提供内存级别的cache。早年 MySQL4之前没有提供存储过程,这个前端代理一般和 MySQL跑在同一台上,它转化游戏服务器发过来的高级数据操作指令,拆分成具体的数据库操作,一定程度上代替了存储过程:&br&&figure&&img src=&https://pic2.zhimg.com/50/cf87922d9cff5e0a6490abc5d396c4fe_b.jpg& data-rawwidth=&466& data-rawheight=&162& class=&origin_image zh-lightbox-thumb& width=&466& data-original=&https://pic2.zhimg.com/50/cf87922d9cff5e0a6490abc5d396c4fe_r.jpg&&&/figure&但是这样的结构并没有持续太长时间,因为玩家切换场景经常要切换连接,中间的状态容易错乱。而且游戏服务器多了以后,相互之间数据交互又会变得比较麻烦,于是人们拆分了网络功能,独立出一个网关服务 Gate(有的地方叫 Session,有的地方叫 LinkSvr之类的,名字不同而已):&br&&figure&&img src=&https://pic3.zhimg.com/50/6ae41d97c6bbf306d1319a_b.jpg& data-rawwidth=&486& data-rawheight=&289& class=&origin_image zh-lightbox-thumb& width=&486& data-original=&https://pic3.zhimg.com/50/6ae41d97c6bbf306d1319a_r.jpg&&&/figure&把网络功能单独提取出来,让用户统一去连接一个网关服务器,再有网关服务器转发数据到后端游戏服务器。而游戏服务器之间数据交换也统一连接到网管进行交换。这样类型的服务器基本能稳定的为玩家提供游戏服务,一台网关服务1-2万人,后面的游戏服务器每台服务5k-1w,依游戏类型和复杂度不同而已,图中隐藏了很多不重要的服务器,如登录和管理。这是目前应用最广的一个模型,到今天任然很多新项目会才用这样的结构来搭建。&br&&br&人都是有惯性的,按照先前的经验,似乎把 MUDOS拆分的越开性能越好。于是大家继续想,网关可以拆分呀,基础服务如聊天交易,可以拆分呀,还可以提供web接口,数据库可以拆分呀,于是有了下面的模型:&br&&figure&&img src=&https://pic2.zhimg.com/50/e0c141eb5954dcafcbb4bc86c475da30_b.jpg& data-rawwidth=&480& data-rawheight=&266& class=&origin_image zh-lightbox-thumb& width=&480& data-original=&https://pic2.zhimg.com/50/e0c141eb5954dcafcbb4bc86c475da30_r.jpg&&&/figure&这样的模型好用么?确实有成功游戏使用类似这样的架构,并且发挥了它的性能优势,比如一些大型 MMORPG。但是有两个挑战:每增加一级服务器,状态机复杂度可能会翻倍,导致研发和找bug的成本上升;并且对开发组挑战比较大,一旦项目时间吃紧,开发人员经验不足,很容易弄挂。&br&&br&比如我见过某上海一线游戏公司的一个 RPG上来就要上这样的架构,我看了下他们团队成员的经验,问了下他们的上线日期,劝他们用前面稍微简单一点的模型。人家自信得很,认为有成功项目是这么做的,他们也要这么做,自己很想实现一套。于是他们义无反顾的开始编码,项目做了一年多,然后,就没有然后了。&br&&br&现今在游戏成功率不高的情况下,一开始上一套比较复杂的架构需要考虑投资回报率,比如你的游戏上线半年内 PCU会去到多少?如果一个 APRG游戏,每组服务器5千人都到不了的话,那么选择一套更为贴近实际情况的结构更为经济。即使后面你的项目真的超过5千人朝着1万人目标奔的话,相信那个时候你的项目已经挣大钱了 ,你数着钱加着班去逐步迭代,一次次拆分它,相信心里也是乐开花的。&br&&br&上面这些类型基本都是从拆分 MUDOS开始,将 MUDOS中的各个部件从单机一步步拆成分布式。虽然今天任然很多新项目在用上面某一种类似的结构,或者自己又做了其他热点模块的拆分。因为他们本质上都是对 MUDOS的分解,故将他们归纳为第二代游戏服务器。&br&&br&&b&类型4:第三代游戏服务器 2007&/b&&br&&br&从魔兽世界开始无缝世界地图已经深入人心,比较以往游戏玩家走个几步还需要切换场景,每次切换就要等待 LOADING个几十秒是一件十分破坏游戏体验的事情。于是对于 2005年以后的大型 MMORPG来说,无缝地图已成为一个标准配置。比较以往按照地图来切割游戏而言,无缝世界并不存在一块地图上面的人有且只由一台服务器处理了:&br&&figure&&img src=&https://pic4.zhimg.com/50/c13a5acd999_b.jpg& data-rawwidth=&418& data-rawheight=&185& class=&content_image& width=&418&&&/figure&&br&每台 Node服务器用来管理一块地图区域,由 NodeMaster(NM)来为他们提供总体管理。更高层次的 World则提供大陆级别的管理服务。这里省略若干细节服务器,比如传统数据库前端,登录服务器,日志和监控等,统统用 ADMIN概括。在这样的结构下,玩家从一块区域走向另外一块区域需要简单处理一下:&br&&figure&&img src=&https://pic4.zhimg.com/50/424cd1ceecfeb_b.jpg& data-rawwidth=&388& data-rawheight=&290& class=&content_image& width=&388&&&/figure&玩家1完全由节点A控制,玩家3完全由节点B控制。而处在两个节点边缘的2号玩家,则同时由A和B提供服务。玩家2从A移动到B的过程中,会同时向A请求左边的情况,并向B请求右边的情况。但是此时玩家2还是属于A管理。直到玩家2彻底离开AB边界很远,才彻底交由B管理。按照这样的逻辑将世界地图分割为一块一块的区域,交由不同的 Node去管理。&br&&br&对于一个 Node所负责的区域,地理上没必要连接在一起,比如大陆的四周边缘部分和高山部分的区块人比较少,可以统一交给一个Node去管理,而这些区块在地理上并没有联系在一起的必要性。一个 Node到底管理哪些区块,可以根据游戏实时运行的负载情况,定时维护的时候进行更改 NodeMaster 上面的配置。&br&&br&于是碰到第一个问题是很多 Node服务器需要和玩家进行通信,需要问管理服务器特定UID为多少的玩家到底在哪台 Gate上,以前按场景切割的服务器这个问题不大,问了一次以后就可以缓存起来了,但是现在服务器种类增加不少,玩家又会飘来飘去,按UID查找玩家比较麻烦;另外一方面 GATE需要动态根据坐标计算和哪些 Node通信,导致逻辑越来越厚,于是把:“用户对象”从负责连接管理的 GATE中切割出来势在必行于是有了下面的模型:&br&&figure&&img src=&https://pic1.zhimg.com/50/bd2bec76b90651cfdf696da_b.jpg& data-rawwidth=&420& data-rawheight=&275& class=&content_image& width=&420&&&/figure&网关服务器再次退回到精简的网络转发功能,而用户逻辑则由按照 UID划分的 OBJ服务器来承担,GATE是按照网络接入时的负载来分布,而 OBJ则是按照资源的编号(UID)来分布,这样和一个用户通信直接根据 UID计算出 OBJ服务器编号发送数据即可。而新独立出来的 OBJ则提供了更多高层次的服务:&br&&ul&&li&对象移动:管理具体玩家在不同的 Node所管辖的区域之间的移动,并同需要的 Node进行沟通。&br&&/li&&li&数据广播:Node可以给每个用户设置若干 TAG,然后通知 Object Master 按照TAG广播。&br&&/li&&li&对象消息:通用消息推送,给某个用户发送数据,直接告诉 OBJ,不需要直接和 GATE打交道。&br&&/li&&li&好友聊天:角色之间聊天直接走 OBJ/OBJ MASTER。&/li&&/ul&整个服务器主体分为三层以后,NODE专注场景,OBJ专注玩家对象,GATE专注网络。这样的模型在无缝场景服务器中得到广泛的应用。但是随着时间的推移,负载问题也越来越明显,做个活动,远来不活跃的区域变得十分活跃,靠每周维护来调整还是比较笨重的,于是有了动态负载均衡。&br&&br&动态负载均衡有两种方法,第一种是按照负载,由 Node Master 定时动态移动修改一下各个 Node的边界,而不同的玩家对象按照先前的方法从一台 Node上迁移到另外一台 Node上:&br&&figure&&img src=&https://pic3.zhimg.com/50/0c4dcad7e6e8a694a46df5e_b.jpg& data-rawwidth=&162& data-rawheight=&181& class=&content_image& width=&162&&&/figure&
图11 动态负载均衡&br&&br&这样 Node Master定时查找地图上的热点区域,计算新的场景切割方式,然后告诉其他服务器开始调整,具体处理方式还是和上面对象跨越边界移动的方法一样。&br&&br&但是上面这种方式实现相对复杂一些,于是人们设计出了更为简单直接的一种新方法:&br&&figure&&img src=&https://pic1.zhimg.com/50/8e250bfe7fc15eb0a0d2925dab684ec2_b.jpg& data-rawwidth=&251& data-rawheight=&250& class=&content_image& width=&251&&&/figure&
图12 基于网格的动态负载均衡&br&&br&还是将地图按照标准尺寸均匀切割成静态的网格,每个格子由一个具体的Node负责,但是根据负载情况,能够实时的迁移到其他 Node上。在迁移分为三个阶段:准备,切换,完成。三个状态由Node Master负责维护。准备阶段新的 Node开始同步老 Node上面该网格的数据,完成后告诉NM;NM确认OK后同时通知新旧 Node完成切换。完成切换后,如果 Obj服务器还在和老的 Node进行通信,老的 Node将会对它进行纠正,得到纠正的 OBJ将修正自己的状态,和新的 Node进行通信。&br&&br&很多无缝动态负载均衡的服务端宣称自己支持无限的人数,但不意味着 MMORPG游戏的人数上限真的可以无限扩充,因为这样的体系会受制于网络带宽和客户端性能。带宽决定了同一个区域最大广播上限,而客户端性能决定了同一个屏幕到底可以绘制多少个角色。&br&&br&从无缝地图引入了分布式对象模型开始,已经完全脱离 MUDOS体系,成为一种新的服务端模型。又由于动态负载均衡的引入,让无缝服务器如虎添翼,容纳着超过上一代游戏服务器数倍的人数上限,并提供了更好的游戏体验,我们称其为第三代游戏服务端架构。网游以大型多人角色扮演为开端,RPG网游在相当长的时间里一度占据90%以上,使得基于 MMORPG的服务端架构得到了蓬勃的发展,然而随着玩家对RPG的疲惫,各种非MMORPG游戏如雨后春笋般的出现在人们眼前,受到市场的欢迎。&br&&br&&b&类型5:战网游戏服务器&/b&&br&&br&经典战网服务端和 RPG游戏有两个区别:RPG是分区分服的,北京区的用户和广州区的用户老死不相往来。而战网,虽然每局游戏一般都是 8人以内,但全国只有一套服务器,所有的玩家都可以在一起游戏,而玩家和玩家之使用 P2P的方式连接在一起,组成一局游戏:&figure&&img src=&https://pic2.zhimg.com/50/bfda3d0c5da7_b.jpg& data-rawwidth=&493& data-rawheight=&352& class=&origin_image zh-lightbox-thumb& width=&493& data-original=&https://pic2.zhimg.com/50/bfda3d0c5da7_r.jpg&&&/figure&玩家通过 Match Making 服务器使用:创建、加入、自动匹配、邀请 等方式组成一局游戏。服务器会选择一个人做 Host,其他人 P2P连接到做主的玩家上来。STUN是帮助玩家之间建立 P2P的牵引服务器,而由于 P2P联通情况大概只有 75%,实在联不通的玩家会通过 Forward进行转发。&br&&br&大量的连接对战,体育竞技游戏采用类似的结构。P2P有网状模型(所有玩家互相连接),和星状模型(所有玩家连接一个主玩家)。复杂的游戏状态在网状模型下难以形成一致,因此星状P2P模型经受住了历史的考验。除去游戏数据,支持语音的战网系统也会将所有人的语音数据发送到做主的那个玩家机器上,通过混音去重再编码的方式返回给所有用户。&br&&br&战网类游戏,以竞技、体育、动作等类型的游戏为主,较慢节奏的 RPG(包括ARPG)有本质上的区别,而激烈的游戏过程必然带来到较 RPG复杂的多的同步策略,这样的同步机制往往带来的是很多游戏结果由客户端直接计算得出,那在到处都是破解的今天,如何保证游戏结果的公正呢?&br&&br&主要方法就是投票法,所有客户端都会独立计算,然后传递给服务器。如果结果相同就更新记录,如果结果不一致,会采取类似投票的方式确定最终结果。同时记录本剧游戏的所有输入,在可能的情况下,找另外闲散的游戏客户端验算整局游戏是否为该结果。并且记录经常有作弊嫌疑的用户,供运营人员封号时参考。&br&&br&&b&类型7:休闲游戏服务器&/b&&br&&br&休闲游戏同战网服务器类似,都是全区架构,不同的是有房间服务器,还有具体的游戏服务器,游戏主体不再以玩家 P2P进行,而是连接到专门的游戏服务器处理:&br&&figure&&img src=&https://pic4.zhimg.com/50/bae1e94836cbb_b.jpg& data-rawwidth=&698& data-rawheight=&630& class=&origin_image zh-lightbox-thumb& width=&698& data-original=&https://pic4.zhimg.com/50/bae1e94836cbb_r.jpg&&&/figure&&br&和战网一样的全区架构,用户数据不能象分区的 RPG那样一次性load到内存,然后在内存里面直接修改。全区架构下,为了应对一个用户同时玩几个游戏,用户数据需要区分基本数据和不同的游戏数据,而游戏数据又需要区分积分数据、和文档数据。胜平负之类的积分可以直接提交增量修改,而更为普遍的文档类数据则需要提供读写令牌,写令牌只有一块,读令牌有很多块。同帐号同一个游戏同时在两台电脑上玩时,最先开始的那个游戏获得写令牌,可以操作任意的用户数据。而后开始的那个游戏除了可以提交胜平负积分的增量改变外,对用户数据采用只读的方式,保证游戏能运行下去,但是会提示用户,游戏数据锁定。&br&&br&&b&类型8:现代动作类网游&/b&&br&&br&从早期的韩国动作游戏开始,传统的战网动作类游戏和 RPG游戏开始尝试融合。单纯的动作游戏玩家容易疲倦,留存也没有 RPG那么高;而单纯 RPG战斗却又慢节奏的乏味,无法满足很多玩家激烈对抗的期望,于是二者开始融合成为新一代的:动作 + 城镇 模式。玩家在城镇中聚集,然后以开副本的方式几个人出去以动作游戏的玩法来完成各种 RPG任务。本质就是一套 RPG服务端+副本服务端。由于每次副本时人物可以控制在8人以内,因此可以获得更为实时的游戏体验,让玩家玩的更加爽快。&br&&br&说了那么多的游戏服务器类型,其实也差不多了,剩下的类型大家拼凑一下其实也就是这个样子而已。游戏服务端经历了那么多结构上的变迁,内部开发模式是否依然不变?究竟是继续延续传统的开发方式?还是有了更多突破性的方法?经历那么多次架构变迁,后面是否有共通的逻辑?未来的发展还会存在哪些困难?游戏服务端开发如何达到最终的彼岸?请看下节:技术的演进。&br&&br&&b&技术的演进&/b&&br&&br&(欢迎加入“游戏服务端架构交流” QQ群 ,共同讨论相关问题)&br&&br&(待续)
谢邀,手游页游和端游的服务端本质上没区别,区别的是游戏类型。 类型1:卡牌、跑酷等弱交互服务端 卡牌跑酷类因为交互弱,玩家和玩家之间不需要实时面对面PK,打一下对方的离线数据,计算下排行榜,买卖下道具即可,所以实现往往使用简单的 HTTP服务器: …
&figure&&img src=&https://pic3.zhimg.com/50/6b1a0d3b6f_b.jpg& data-rawwidth=&1233& data-rawheight=&209& class=&origin_image zh-lightbox-thumb& width=&1233& data-original=&https://pic3.zhimg.com/50/6b1a0d3b6f_r.jpg&&&/figure&我是这样看待的
我是这样看待的
&figure&&img src=&https://pic3.zhimg.com/v2-1d91c7d441dc71192b54_b.jpg& data-rawwidth=&800& data-rawheight=&450& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic3.zhimg.com/v2-1d91c7d441dc71192b54_r.jpg&&&/figure&&h4&引言&/h4&&p&有鉴于国内行业的不良状态,出国留学接触更为先进的游戏设计理念、切实提高游戏设计实力,并且为自己赢得更多可能成为了不少开发者的选择。当然,出国学习游戏设计与学习其他专业没什么不同,择校总是必不可少又纠结万分的环节,然而,当我们摊开学校列表的时候,的确会发现这样一个问题,即我们想象之中的游戏设计相关专业并没有那么多,而面对课程大纲与项目概要,我们很难真正了解一个学校之中的某个专业究竟是何种模样。&/p&&p&以上即是 indienova 策划这一系列专题的背景。我们希望通过与已经参与过专业学习的留学生的真实接触,帮助大家了解游戏设计专业海外留学的现状,不同学校偏重的特色,以及其他相关的问题。也欢迎对这个策划有兴趣的朋友与我们联系,分享你们的经历。&/p&&h4&问答&/h4&&p&&b&请简要介绍一下自己吧。&/b&&/p&&p&大家好,我是 SMU Guildhall,level design track 的在读研究生&a href=&https://www.zhihu.com/people/shi-er-bo-shi-er-bu& class=&internal&&徐陽&/a&。目前正在学习游戏设计的路上摸爬滚打。前年在暴雪大门口被赶走了不让照相,所以希望有一天能拿着员工证在里面照个够,哈哈。自我介绍就留点空白,通过后面的回答应该还是可以体会一下我是个怎样的人。我一般做严肃的事情的时候比较严肃,其实生活中是个挺逗的人,所以请自动叉掉后面答案中的严肃脸…好了,开始严肃了…&/p&&p&&b&为什么选择了游戏设计之路呢,看到你是由 CS 转入游戏设计?&/b&&/p&&p&做游戏算是我一直以来的梦想了。这个想法从初二就这么定下来然后一直执行到现在。之前学习 CS 专业也是因为在高中时候看到一些好文章分析游戏是由程序,设计和美术三大块构成的,于是自己做了一些幼稚的职业规划。我希望自己以后能走到游戏设计师(game designer)这一步,而好的游戏设计师又都需要在这三大块有好的基础,于是便决定先啃硬骨头学程序,之后找经验学设计,空余时间学习美术了。目前已经实现了第一步的程序背景,现在正在积累设计的知识,可惜自己比较懒,素描学了3个月就搁着了……总的来说还是按着自己当时定下的方向在走,也希望自己能一直走下去。&/p&&p&&b&为什么选择了 Guildhall of SMU 呢,看到你也被很多其他项目录取?&/b&&/p&&p&可能还是受到高中那个游戏构成的想法影响吧。在我被录取的学校专业中,很多都是偏向于程序方向的,例如 Utah, DigiPen, UCF 等。程序需要深入搞引擎那些图形渲染和优化,我学得比较吃力也不是特别感兴趣,不想当作终身的职业,所以就排除了。还有一些因为当时不了解情况,申请了 production 方向。本来以为它独立于程序和美术之外,可能就是设计相关了,但是后来了解到是偏重团队管理和规划的方向,于是也拒绝掉了。最后基本是在 SMU 和 CMU 两个里面选。虽然 CMU 藤校排名高名气大,但是研究了他们的课程之后还是觉得比较宽泛吧。相比之下 SMU 的课程很钻,而且专业划分基本就是按照业界规范来的。考虑到自己已经有了一个 master,想要学一下更钻的知识,就选择了 SMU。目前个人感觉这个选择还是很正确的。&/p&&p&&b&简单讲讲 Guildhall of SMU 区别于其他院校的特点吧?&/b&&/p&&p&我感觉每个开设游戏专业的学校都有自己的优势,选择的话就看适不适合自己了。SMU 特别强调的是和业界接轨,基本业界用什么好的开发流程我们就用什么,而且因为旁边就是 Gearbox 和 IDSoft,老师也有从那边过来的,所以经常和业界有交流,了解最新最广泛运用的知识。最好的一点就是即使明天就出去工作也不会遇到完全不熟悉的东西。&figure&&img src=&https://pic4.zhimg.com/v2-e1e6ffc26f2cd6e27f34d_b.jpg& data-rawwidth=&800& data-rawheight=&466& class=&origin_image zh-lightbox-thumb& width=&800& data-original=&https://pic4.zhimg.com/v2-e1e6ffc26f2cd6e27f34d_r.jpg&&&/figure&&/p&&br&&p&我记得前几年业界喜欢用物理 scrum(一种开发流程),我们第一年就一直边学边用,而今年业界开始流行一种云端的 scrum(叫做jira),我们这学期就切换到了这种开发流程。游戏公司流行的团队交流工具比如 slack 我们一直在用。其他的像 unity5, unreal4 的新功能老师都会让我们去自学,而对于 VR, AR 这些热门学校也都是鼎力支持。我们这一届的另一个小组现在就是针对 vive 开发一个游戏,而我之前参与的一个已经持续了 2 年的项目也是在 oculus rift DK2 上开发。&/p&&p&说到小组,我觉得这是我最喜欢的一个特点了,SMU 招人时会尽量让程序,设计和美术录取同样的人数(我们这一届30多个人分布基本是1:1:1,因为有同学退学所以记不清楚具体数字了…),然后 2 年里会分组做三个大项目。&/p&&p&第一个项目做一个 2D 游戏大概 5 人一组,会有一个 game designer,然后其他尽量均分。第二个项目做一个 3D FPS 游戏,大概 12 人一组,基本每个部分人数相当。第三个项目做一个自己立意的任意 3D 游戏,大概 18 人一组,也是人数相当。每次的项目又都有 game designer, producer, lead designer, lead programmer, lead artist (就是分级管理制度) 这样的等级。这样的分布基本就是业界里面现实的团队格局了,所以在项目中对于各个部门之间怎么交流,怎么团队合作,怎么领导他人,怎么配合 lead 都能有很好的理解,这也是为什么学校一直很自豪学生出门就能直接融入团队,不需要太长的适应期。对于每个项目,都是有一个小的面试,从而决定谁去做 lead 谁去做 game designer。觉得自己想试试这个角色的话也是可以自己毛遂自荐的,而且在面试中也是需要给老师说自己想做什么角色的。&/p&&p&&b&所谓的 level design track 对于 level design 的强调具体表现在什么地方?&/b&&/p&&p&具体来讲的话主要是在于强调根据 gameplay 来设计关卡和 level design document(LDD关卡设计文档)上的技能。&/p&&br&&p&Level designer(LD) 在公司里主要是扮演了一个设计加沟通的角色。整个游戏的 game vision 是由game designer(GD)来掌控的,但是这种 vision 的一个全局观,主导方向的概念,因此在 game design document(GDD游戏设计文档)里面很少会有具体各个关卡的细节。所以 LDD 就至关重要了。我们的每一个个人作业和团队作品,老师都是强行要求每个 LD 要写 LDD 的,而且需要这个文档实时更新,同时保证清晰明了的内容。开玩笑地讲就是如果明天这个 LD 死了,再也没人可以问他任何问题,靠着这个文档下一个 LD 也能做出同样的关卡。同时这个文档不仅是 LD 要看,artist 和 programmer 也是要根据它来制定自己的目标的,因此文档中的对于不同专业背景的沟通也很重要。Level design track 也因此会花很大一部分功夫学习练习 LDD。&/p&&p&另一个强调就是设计了,因为游戏永远是 gameplay 优先,art 和 program 都是为了实现 gameplay 来服务的,所以这个重担就压在了 LD 身上。GD 在 game vision 中会设计游戏主体的 gameplay,但是涉及到每一个关卡的 gameplay 和 game flow 时就全是 level designer 的工作了。例如 GD 会设计到要做一个 platformer 游戏,有 wall jump 和 double jump 这些机制,但是具体在每一关里怎么让这些机制变得好玩,怎么让这些机制组合不是太急躁也不是太缓慢就是需要 LD来设计了。这其中涉及到很多设计的 guideline 会在核心课里不断地练习。Ld track 基本每一个作业都会让我们用到这些 guideline 并且练习,直到它们已经成为 LD 潜意识中的知识而不需要特别去注意。&/p&&p&&b&能够简单讲讲具体的课程安排吗?&/b&&/p&&p&综合来讲的话,学校课程分为两类,综合课和核心课,然后加上很大一部分是分小组开发游戏。&/p&&p&综合课就是讲一些比较概括的设计要点和游戏演化之类的,就像是以前大学学的概述一样。虽然很笼统,但是对于一些背景文化的了解还是很重要。&/p&&p&综合课是所有人一起上,而核心课就是分开方向上,比如设计的核心课就只有设计方向的学生。核心课教的东西很偏向自己的方向,但是也是最为重要的。&/p&&p&团队项目课就像我上面说的,分组然后开发游戏。基本各个部门在自己的核心课学了东西,团队课就是使用和练习这些知识的时候了。&/p&&p&&b&还想具体了解一下核心课程的内容?&/b&&/p&&p&核心课主要就是像我上面讲到,学习 LDD 和设计。当然也有很多其他内容比如基础美术和 scripting 编程,但是这两个算是最重要的。&/p&&br&&p&LDD 算是最痛苦的一个,因为需要完全按照 technical writing 的标准,有很多严苛的要求,比如不能有被动语气、不能有第一二人称、必须是陈述语气这类。这跟日常文章差异非常大,如果之前在美国有学过文学评论,历史或是写过论文的应该会深有体会(我发现我同学里面这方面很好的都多少有上述的经验)。不过也不用担心,因为美国同学这方面也不占优势,毕竟不是写作文。&/p&&p&LDD 也需要言简意赅,用最少的字数表达最多的细节,这一点也是很需要练习的。很经常的事情就是用很多篇幅讲了一个很小的东西,最后 LDD 几十页,根本没有人愿意读。因为局限于第二语言的词汇量,和美国同学比差距还是很大,只能靠多练习了。&/p&&p&画地图也是很重要一点,一个好的地图基本决定了这个 LDD 是好是坏,线条要干净整洁,标注要用最少的数量传达最多的信息,然后 game flow 的路线也特别难让它看起来很干净。老师会要求我们第一遍必须用纸笔画,练习用最少的线条表达整体地图的能力,之后会让用 photoshop 或是 AI 电子化。好地图和坏地图基本一眼就能感受到,而 AI 真的是太方便了,可惜老师不会具体教这个,需要自己摸索。LDD 里面还有很多地方比如 reference 图片,gameplay minute 等等也会是课上要教的东西,有特别多的坑可以讲,限于篇幅就不细说了。&/p&&p&关卡中 gameplay 的设计虽然开始好玩,但是逐渐就会变成一个非常费脑子的事情。设计更像是一种,最麻烦的是没有具体的标准,永远都没有更好的上限,所以其实最后的 gameplay 都是在不断的 play test 之中改出来的,和最初的设计可能大相径庭,但是正是这个 polish(这个不像程序的

我要回帖

更多关于 万王之王腾讯 的文章

 

随机推荐