关于游戏:什么是游戏引擎程序

在探讨游戏引擎程序之前,咱们须要明确游戏开发的复杂性与多样性。游戏世界中,每一个细节的构建——从物理反馈的模仿到角色的动作,再到故事情节的倒退——都须要宏大的编程工作量。游戏引擎程序,或简称游戏引擎,就是为了简化这个过程,提供一套预制的解决方案,使得开发者可能更专一于游戏的创意与设计。 游戏引擎的外围价值在于它的重用性。通过提供一系列的工具与性能库,游戏引擎使开发者无需从零开始编写代码,从而减速了游戏开发的过程。这些工具和库涵盖了图形渲染、音频播放、物理引擎、输出解决、网络通讯等多个方面,根本笼罩了游戏开发中的大部分需要。 接下来,我将通过几个驰名的游戏引擎实例,来具体阐明它们如何在游戏开发中扮演着至关重要的角色。 Unreal EngineUnreal Engine 是由 Epic Games 开发的一款游戏引擎,广泛应用于各种平台上的游戏开发,包含 PC、游戏机、挪动设施,甚至是虚拟现实(VR)和加强事实(AR)设施。它以弱小的图形渲染能力著称,可能产生靠近实在的视觉效果,使得它成为开发高质量三维游戏的首选引擎之一。 Unreal Engine 的一个显著特点是其 Blueprint 视觉脚本零碎。这个零碎容许开发者通过视觉化编程,而非传统的代码编写,来实现游戏逻辑。这升高了游戏开发的门槛,使得非程序员也能参加到游戏的开发过程中。 UnityUnity 是另一个十分风行的游戏引擎,它的特点是跨平台性。Unity 容许开发者一次开发,就能部署到超过 20 个平台上,包含但不限于 iOS、Android、Windows、Mac、Linux、WebGL、PlayStation、Xbox 等。这使得 Unity 成为那些心愿其游戏可能笼罩尽可能多平台的开发者的现实抉择。 Unity 引擎对于 2D 和 3D 游戏都提供了良好的反对,装备有丰盛的资源和资料库。它还领有一个宏大的开发者社区,这意味着开发者能够很容易地找到解决问题的资源或者获取灵感。 GodotGodot 引擎是一个开源我的项目,它以灵活性和轻量级著称,非常适合独立游戏开发者。Godot 反对 2D 和 3D 游戏开发,而且它的设计哲学是“零老本”,意味着你能够应用所有性能而无需领取任何费用。 Godot 的特色之一是它的场景零碎,这是一种以节点为根底的架构,容许开发者通过组合不同的节点来构建游戏的各个局部。这种设计使得 Godot 在组织游戏我的项目方面非常灵活,易于治理。 CryEngineCryEngine 是一款以其先进的图形技术和物理模拟能力而闻名的游戏引擎。它最后由 Crytek 开发,用于创立《孤岛惊魂》系列游戏。CryEngine 提供了高度优化的渲染技术,可能产生令人印象粗浅的视觉效果,特地是在户外环境和大规模场景的渲染上。 CryEngine 的一个要害个性是它的沙盒编辑器,这是一个全功能的实时工具,容许开发者在游戏中间接创立和编辑内容。这大大提高了开发效率,使得开发者可能即时看到他们的更改如何影响游戏。 通过这些例子,咱们能够看到,游戏引擎不仅仅是开发游戏的工具汇合。它们是赋能开发者将创意转化为事实的平台。每款游戏引擎都有其独特的特点和劣势,适宜不同类型的游戏开发需要。抉择适合的游戏引擎,能够帮忙开发者更有效率地实现他们的游戏幻想,无论是创立一个简略的 2D 平台游戏,还是开发一个简单的 3D 虚拟现实体验。 在游戏开发的世界里,游戏引擎就像是构建大厦的脚手架,它不仅反对了整个修建的架构,还提供了达到每个高度和角落的门路。随着技术的提高和开发者需要的多样化,游戏引擎也在一直进化,引入新的性能和改良,以满足更宽泛的创意和技术需要。因而,理解并把握游戏引擎的应用,对于游戏开发者来说,是一项至关重要的技能。 一个典型的游戏引擎是由多个外围组件形成的简单零碎,这些组件独特工作,以反对游戏的开发和运行。上面,我将具体介绍这些外围组件及其性能。 图形渲染引擎(Rendering Engine)图形渲染引擎负责游戏中的视觉内容,包含场景、角色、光影成果等的绘制。它应用图形 API(如 OpenGL、DirectX 或 Vulkan)来与显卡交互,将游戏设计师和程序员发明的视觉资产转换为玩家屏幕上的图像。例如,Unity 应用它本人的渲染管线,而 Unreal Engine 则提供了基于物理的渲染(PBR),可能实现高度实在的光照和材质成果。 物理引擎(Physics Engine)物理引擎模仿事实世界的物理规定,解决游戏世界中的碰撞检测、刚体动力学、软体物理、液体模仿等。这些模仿为游戏世界提供了真实感,使玩家的互动更加天然。NVIDIA PhysX 是一个被宽泛应用的物理引擎,很多游戏引擎如 Unreal Engine 和 Unity 都集成了对它的反对。 ...

March 1, 2024 · 1 min · jiezi

关于游戏:开手游要选用怎么样的服务器

想要让玩家的游戏体验感好不仅须要好的游戏策动,画风,内容,更须要一款好的服务器来进行撑持,服务器就好比基石,而策动内容等等就是框架,如果基石不稳固,再好的游戏也很难给玩家良好的体验感。那么如何来抉择一款好的服务器来作为游戏的基石呢。 首先,依据玩家散布抉择线路 服务器线路多种多样,如电信、联通、挪动、BGP、CN2、海内等等。抉择好线路会让玩家的提早更低,游戏体验事倍功半,如果你的玩家次要是以国内为主的话,那必然是抉择国内线路来作为基石的。 而国内的三大次要网络运营商(电信、联通、挪动),所以国内的玩家都是以这三条线路为主的,所以在面临抉择的线路时倡议起码也是应用三线BGP线路。 在这里很多人可能会问什么是BGP,简略来说BGP就是把不同的运营商线路糅合在一起造成一个IP领有多条线路的能力,玩家通过IP链接就会主动调配到对应的线路上进行拜访啦。而三线BGP的话次要蕴含电信联通挪动线路的,如果还有其余教育网之类的,也能够抉择五线BGP,八线BGP。当然蕴含的线路越多天然价格也是越高的。 其次,依据本身程序状况抉择带宽 手游如果有大量的热更新、下载之类的那么带宽能够抉择100M独享带宽乃至更高,如果下载之类的比拟少的话50M以下也是够用的。 当然一个好的服务器硬件是必不可少的,就好比服务器是游戏的基石,那么硬件就是服务器的基石了,抉择高性能的硬件配置能够让本人的游戏承载的玩家也更多。 比方市场上常见的硬件配置,如E5-2670、E5-2697V2、I9-9900K、I9-14900K等,都是很不错的硬件抉择。当然在这边也是强烈推荐德迅I9-14900K,采纳了混合架构,领有24个外围和32个线程,默认睿频高达6.0GHz。同时装备大量缓存性能,用于进步处理器的整体性能。并且搭配划时代的强劲定制水冷,在满负荷运行下让机器不卡顿,不死机。 抉择好基石当前,那么游戏也能顺利开启来啦,而游戏开的好玩家人气足天然可能会受到同行的嫉妒,就会呈现被网络攻击的状况,如CC,流量攻打等等都是市场上比拟常见的攻打伎俩。为了防止网络攻击导致的玩家掉线,选用一款好的防护产品也是至关重要的。 德迅抗D盾,完满解决因网络攻击导致服务器陷入黑洞、玩家掉线等等问题。 采纳自主大数据和Anycast算法来实现只能调度,将“失常玩家”流量和“攻打流量”疾速分流至不同的节点,能够完满有序调度成千盈百个节点,达到TCP动静切换无感知、玩家不掉线、不黑洞无封禁等 在面对超大流量型DDoS攻打时,提供可弹性扩缩的分布式云防护节点,当产生超大流量攻打时,可依据影响范畴,迅速将业务摊派到未受影响的节点。 通过翻新的报文基因技术,在用户与防护节点之间建设加密的IP隧道,精确辨认非法报文,阻止非法流量进入,可彻底进攻CC攻打等资源消耗型攻打。 抗D盾反对多源机接入,可同时爱护不同服务器的游戏。线路上进行智能多线节点散布,配合独家研发的VPN隧道填补技术,保障每一条线路都是优质的网络。 反对EXE封装、SDK接入,反对Windows、iOS、Android零碎,分钟级集成。方便快捷接入进攻。

March 1, 2024 · 1 min · jiezi

关于游戏:抗D盾针对游戏业务有什么帮助

因为在虚拟世界中能够领会到事实世界所不能带来的激情,刺激等感触。现如今茶余饭后,大家都习惯关上电脑或者手机来进行娱乐,随着网络用户的增多,也让网络从业者疯狂涌入游戏市场,同时游戏行业也涌现出各种各样的问题,比方被攻打、掉线等等状况,这时候就要抉择一款防护产品去保障游戏业务的顺畅进行。最近,市面上呈现一款抗D盾产品,号称能够忽视DDoS、CC攻打,网络减速并且有断线重连等性能。 那么,抗D盾针对游戏业务有什么帮忙? 1、升高提早:游戏业务对实时性要求较高,提早会对游戏体验产生重大影响。通过抗D盾,能够将游戏内容和数据缓存到离用户更近的边缘节点,缩小数据传输的间隔和工夫,配合独家研发的隧道填补技术,使玩家进入的每条线路都是优质网络,从而升高提早,进步游戏的响应速度。 2、进步稳定性:抗D盾能够通过多节点散布和负载平衡技术,将用户申请扩散到多个服务器上解决,防止单点故障和过载状况产生,进步游戏的稳定性和可用性。 3、抗DDoS攻打:游戏业务经常成为DDoS攻打的指标,导致游戏服务器不可用。据不齐全统计市面上超百分之80的DDOS攻打都是来自于游戏业务,而抗D盾能够通过分布式进攻和流量荡涤技术,精准定位歹意攻击者并被动隔离,具备自动化溯源能力,无效抵挡DDoS攻打,保障游戏业务的失常运行。 4、寰球笼罩:抗D盾服务通常具备寰球散布的节点,能够将游戏内容和数据缓存到离用户更近的地位,提供更好的访问速度和体验,无论用户在世界的哪个中央。 5、防掉线零碎:研发新SocKet协定,补救WinSock链接失败会断开问题,链接失败主动无缝切换。 6、多种集成形式:抗D盾的接入应用也是相当便捷的,EXE封装、SDK接入、DLL援用等等多种集成形式,反对Windows、iOS、Android零碎,可做到分钟级集成。 抗D盾能够提供更好的游戏体验,升高提早、进步稳定性、抵挡攻打、节省成本,并且具备寰球笼罩的能力。这些劣势能够帮忙游戏企业晋升用户满意度、减少用户粘性,并进步游戏的竞争力。 德迅抗D盾是新一代的智能分布式云接入零碎,接入节点采纳多机房集群部署模式,暗藏实在服务器IP,相似于网站CDN的节点接入,然而“抗D盾”是比CDN利用范畴更广的接入形式,适宜任何TCP 端类利用包含(游戏、APP、微端、端类内嵌WEB等)。用户连贯状态在各机房之间实时同步,节点间切换过程中用户无感知,放弃TCP连贯不中断,轻松应答任何网络攻击。

February 18, 2024 · 1 min · jiezi

关于游戏:事后达尔文-游戏业务效果评估方法实践

作者:vivo 互联网数据分析团队 Luo Yandong、Zhang Lingchao本文介绍了互联网业务数据成果评估的几种常见问题及办法,并基于分层抽样的逻辑优化出一套可利用于解决用户不平均的“预先达尔文"分析法,可实用于无奈AB测试或人群不平均的AB测试等场景下的成果评估中,本文会基于理论利用案例,来给大家认真论述相干办法模型的思考过程,实现原理,利用后果,心愿可能帮忙大家,如果能对大家在各自畛域中的业务成果评估有所助益的话,那就更棒了! 一、引言游戏业务作为公司重点的创收团队,为了更好的达成营收后果,须要不定期地发展各类经营流动来促成玩家付费转化、晋升玩家付费程度,这就要求咱们游戏数据分析师采取迷信无效的分析模型,精确洞察剖析各类经营策略的价值与收益,及时管制危险与优化后续经营计划。 而在理论的剖析工作中,咱们通常会碰到各种各样的业务及数据上的问题,逼迫咱们一直迭代优化分析模型,产出更有价值更迷信无效的论断倡议。 如下案例,就是咱们已经碰到的一个典型问题——算是“辛普森悖论”[1]在游戏业务的一个理论体现:受不同月份游戏业务用户付费散布不平均变动的影响,业务成果评估重要指标利润率(利润/流水),在整体和分游戏类型的场景下的数据体现齐全互斥。 近三年来,咱们继续地开展业务成果评估,在发现并解决问题的过程中一直总结经验及数据论断,最终优化迭代出“预先达尔文”剖析方法论,从而无效解决游戏业务中成果评估的各项艰难。 本文将从游戏业务成果评估的诸多问题登程,论述分析方法的倒退历程及数据逻辑原理,以及在游戏业务中具体的解决方案实际,来残缺介绍“预先达尔文”的思考过程与利用落地,并瞻望更多利用场景。 二、游戏业务成果评估常见问题一览游戏业务成果评估中常见的问题有如下这些难点: 游戏业务受节假日天然因素影响大,如何剔除?比方十一、春节期间玩家自发的付费增长同流动影响的关系?局部流动存在参加门槛,如何保障钻研人群的一致性?比方返利流动中需生产达标能力获取礼券的参加门槛,未参加玩家人造付费能力弱一档的问题。整体与部分的成果差别的问题,如何解读?比方引言中网游单机利润率降落但整体利润率晋升的问题。vivo的游戏营销类流动,始终致力于偏心公正,相对禁止杀熟,因而都需放弃对立折扣力度,无奈实现AB测试,如何继续优化迭代?游戏业务中营销流动往往能冲刺短时间的付费增长,然而前期受玩家实际收入能力影响存在回落的危险,如何无效论证流动的长期正向价值?比方双11期间发展的电商流动,显著影响了前一个月及后一个月的用户失常消费水平。以上诸多难点问题,都衍生于业务的理论运行过程中,须要咱们分析师基于一套切实可行的方法论进行解决。 三、成果评估分析方法的倒退3.1 什么是成果评估业务团队为了晋升相干指标,如流水、利润等,而发展的如满减,返利,打折,促销等流动,在一段时间内让玩家、用户更多的参加、生产,来晋升对应的指标。 而咱们分析师就须要及时的钻研分明,这些业务动作带来了怎么的实质性的业务晋升,以及如何造成更多优化空间,这就是成果评估的核心内容与价值。 3.2 成果评估办法的倒退阶段判断业务成果,咱们通常会细分很多指标,比方参与率、投入产出比、流水、利润等。但咱们最关怀的往往是指标增量,这是一个绝对概念,外围就在于如何比照。为此,行业内通用的分析方法有如下几种: 时序比对法:通过观察流动前后的增长变动,如本周末发展的流动,那咱们看本周末的流水去比对上周末的流水,来判断流动的增量; 天然过滤法:受节假日等节令因素影响,本周和上周会有天然变动因素,为了过滤天然因素影响,咱们将流动参加人群与未参加人群拆解开,将天然工夫变动计算为未参加人群的本周流水比对上周流水的数值,最终按流动增量减去天然变动状况来作为最终增量; AB测试:基于平均分层状况下的严格AB测试试验,局部游戏/门店发展流动,局部不发展,以不发展流动的局部增长作为天然增长,这样也能够计算出最终的增量。 然而存在如下危险: ①无奈保障用户均匀分布; ②流动发展较简单,且存在客诉危险,玩家不易承受,且损失局部流动增量,不利于指标达成。 预先达尔文:汇合办法2、3的各自劣势,咱们将参加流动人群/未参加人群,基于平均分层的逻辑,按上周末arpu等指标拆解分层,保障比照对象的绝对偏心,计算各分层内参加人群的增长-天然增长(同分层未参加人群的增长),最终汇总整体后果。 如下示例: 3.3 各办法的优劣比照及实用场景阐明 注:“预先达尔文”由数据分析团队成员于2019年钻研出相干分析方法,并于2020年整顿并取名为“预先达尔文”。四、“预先达尔文”的剖析方法论在介绍数据方案设计前,先介绍一下“预先达尔文”的剖析思路和方法论,帮忙大家更好地了解本文。 4.1 确认钻研对象钻研对象分两局部——人群和指标。 (1)人群 蕴含参加流动的人群、未参加流动的人群。参加流动的人群受到流动、节令因素的综合影响;未参加流动的人群次要受节令因素的天然变动影响,如十一前和十一期间的天然付费增长。 (2)钻研指标 咱们个别抉择外围关注的如人均流水ARPU、人均礼券(游戏业务流动外围指标)。其余场景亦可按外围关注指标发展钻研,如产品测试场景的点击率等。 4.2 分人群工夫比照基于咱们的钻研人群(参加流动与未参加流动的人群),在流动前、活动期的钻研指标(流水、利润)体现状况,如下图: 其中: C1=A(A4-A3(B4/B3)); C2=A(A2-A1(B2/B1)); 因通常状况下,被动参加咱们流动的玩家会有更积极主动的沉闷、付费等行为特色,导致玩家A、B人群并不合乎均匀分布的特色,故B玩家人群的天然节令因素变动无奈齐全代表A玩家人群的天然变动,最终导致无奈齐全科学合理的体现出流动玩法对A人群的增量。 4.3 人群平均分层比照咱们为保障玩家人群B的天然变动能反映A玩家人群的程度,在外围钻研的指标逻辑下,将A、B玩家人群做平均的拆分,参考游戏业务流动中,依照流动前人均付费程度拆分(其余场景也可基于其外围指标拆分,如点击率散发效率等)。 其中: C1=A(A4-A3(B4/B3)); C2=A(A2-A1(B2/B1)); C=sum(C1:Cn);D=sum(D1:Dn); 为保障以上剖析后果真的平均,咱们会对每一分组做相应的验证,如上初始人群差别,若人群差别绝对值>=5%,则判断置信度有余,对应分组人群流动影响不独自做评估。 4.4 后果评估基于以上分层逻辑后,咱们即可失去对应相信分组下,参加人群的指标变化率,未参加人群的指标变化率,二者相减即失去流动策略影响的增量变动(可正可负),汇总之后,即可失去整体增量变动,即为整体的流动影响。 特地阐明: 通常状况下,置信度有余的分组人群,如果相干人群/流水比重过大,无奈疏忽影响的话(如超过10%),则会依照相信分组的总增量变化率来作为该分组的增量测算,此处仅供参考;参加流动人群规模较未参加差距过于迥异,如<1:10的状况下,可思考对B人群以抽样的形式来实现以上的成果。五、理论剖析案例5.1 某年端午流动数据成果剖析5.1.1 背景信息:端午期间发展了充值不同档位可支付不同礼品的流动,如100元档、1000元档、4000元档等。(非理论案例) 5.1.2 前置剖析:被动参加的玩家,有较强的充值能力和欲望,对应成果钻研需排除过滤这种充值能力上的差别;流动面向整体玩家,无奈发展ABtest,也不肯定合适差异化策略;游戏充值玩家存在活动期大幅拉收,流动后生产降级的危险,所以整体钻研中需思考流动中+流动后的总体增量状况;有流动曝光的用户外部仍有较大差别,未参加流动(即未领奖)用户表明这些用户对本次礼包流动没有趣味,自身付费偏向较低,而参加流动用户则有较强付费志愿。5.1.3 剖析后果:整体有无曝光比照:从整体看,有流动曝光用户的付费晋升显著高于无曝光用户,且在低付费档位的晋升效应更为显著;有曝光用户外部比照:有流动曝光但无领奖用户自身为游戏的低付费志愿用户,因而后向付费甚至不迭无曝光用户,而流动对参加的用户有显著的付费刺激作用。 5.2 某年游戏预约版本成果剖析5.2.1 背景信息:(1)受国家版号政策的压缩,游戏业务的稳定增长体现在老游戏的继续迭代上,而其拉新、回流、留存的节点,都围绕在重大版本更新节点上。所以咱们有产品通过版本更新性能,提前将游戏新的玩法/内容/流动传递给用户,以晋升游戏节点体现。 (2)咱们vivo的版本预约已做了有段时间,但始终没有一个较为谨严的试验比照和数据分析,验证做这件事为平台带来的增量价值。故咱们应用“预先达尔文”的分析方法对其开展了相应钻研。 版本页面款式参考如下: 5.2.2 前置剖析思考:预约与非预约用户,除了在预约行为上存在差别,还存在版本信息感知上的差别,次要体现在沉闷频次上,须要逐渐进行比照剖析;核心灰度放量提供了是否感知版本信息的两类人群比照,但灰度自身对用户的核心版本、手机性能和核心应用行为有要求,导致灰度用户在游戏内的沉闷付费人造优于非灰度用户。5.2.3 剖析后果:版本信息感知价值:提前感知版本信息的用户在版本更新后向付费有晋升,总体付费约高于无版本预约感知用户6%,且在高沉闷天频下付费与无感知用户拉开差距;被动预约行为的价值:版本更新后预约用户付费相比仅感知无预约用户,其晋升更为显著。 ...

June 25, 2023 · 1 min · jiezi

关于游戏:vivo-游戏黑产反作弊实践

作者:vivo 互联网安全团队 - Cai Yifan在数字化、挪动化的浪潮下,游戏产业迅速倒退,尤其疫情过后许多游戏公司业务迎来新的增长点。 游戏行业从端游开始始终是黑灰产沉闷的重要场景。近年来,随着互联网的倒退和手机市场的一直壮大,手游的用户规模一直增长,黑产在手游市场的沉闷水平一直晋升。 游戏行业的黑产问题个别指的是游戏开发者关注的游戏内的黑产问题,而vivo作为手机厂商,或者更精确地讲,作为游戏散发平台,咱们所关注的黑产问题与游戏开发者又有何不同呢?在黑产反抗上,vivo与游戏开发者相比,又有哪些优劣势? 本文将探讨vivo游戏黑产的舞弊动机和特色,并分享vivo互联网安全团队与黑产反抗的计划和案例。 一、vivo渠道服游戏黑产获利点剖析1.1 黑灰产定义和分工一般来说,彩色产业指的是从事具备违法性的流动且以此来牟取利润的产业。 而灰色产业则指的是不显著触犯法律和违反道德,游走于法律和道德边缘,为 “黑产” 提供辅助的争议行为。 黑灰产依照分工不同,大抵能够分为4类: (1)源头类黑产 把握号源信息或身份信息等的黑产。常见的有手机号、身份证、工商信息等信息,通过贩卖用户信息获利。 (2)平台类黑产 用于非法交易、交换的平台类黑灰产。如歹意网站、歹意论坛和歹意群组,以及相似提供接码、打码的平台。 (3)技术类黑产 为中下游技术性不强的黑灰产从业人员制作并提供各类软、硬件设施和服务,如木马植入、钓鱼网站及各类恶意软件。 (4) 施行类黑产 施行各类违法犯罪行为的黑灰产,基于中下游链路,黑灰产在施行环节经常体现为歹意行为、欺骗等模式。 1.2 游戏行业常见的黑灰产问题游戏行业常见的黑灰产问题次要蕴含:网络攻击、外挂、盗号、羊毛党、内容违规等。 1.2.1 网络攻击网络攻击次要以DDoS攻打为主,就是利用大量非法的分布式服务器对指标发送申请,从而导致失常非法用户无奈取得服务。 游戏行业的网络攻击次要来源于竞争者,通过网络攻击使攻打对象的用户无奈失常进行游戏,影响用户体验,并造成用户散失,从而使攻击者本身的利益不受威逼。 如2021年8月,一款合成类游戏在首发期间就蒙受黑客DDoS攻打,造成游戏玩家无奈登录和游戏内卡顿等问题,引起大量用户投诉。 1.2.2 外挂游戏外挂让大部分玩家、游戏公司疾恶如仇,却因有着源源不断的市场需求,外挂彩色产业链屡禁不止。游戏外挂通常指的是通过篡改游戏客户端代码,读取或者批改游戏运行过程中的数据来实现舞弊性能的插件。 外挂的获利形式有多种:间接发售外挂获利、外挂内散发广告获利、应用外挂刷游戏资产交易获利、外挂代练、外挂“带老板坐飞机”、外挂养号等。 外挂泛滥的起因次要有三:一是外挂开发的工业化一直拉低开发的门槛;二是国内成熟的外挂分销体系使外挂销售更加便捷;三是外挂广告行为等行为不足规制,助推了外挂生产和产业对接。 在上述三个因素的加持之下,随同游戏行业的火爆,游戏外挂的规模越来越大。 1.2.3 盗号盗号,是从端游时代起就存在于游戏业内的老问题了。一方面,账号的平安问题关系到游戏是否长期稳固经营,另一方面,账号被盗导致虚构财产散失,给玩家带来惨痛损失的同时,也侵害了游戏厂商的品牌形象。 盗取游戏账号信息,用行内黑话来说,又叫作“出信”。所谓“信”,指的就是游戏账号密码等信息。这个畛域又波及到撞库、拖库、钓鱼、种马(木马)等等伎俩。 盗号次要通过发售用户信息、售卖游戏帐号资产、欺骗等形式获利。 1.2.4 羊毛党羊毛党大都采取以量取胜的策略,比方养号、刷量、薅羊毛等。应用这种策略的黑灰产从业者,充分利用“长尾效应”,本着“苍蝇腿上也是肉”的准则,把蛋糕做大。 羊毛党通过批量注册帐号参加游戏厂商或者第三方平台的流动,支付礼包CDKey、充值礼券等,再通过交易平台发售给游戏玩家获利。 如某网游在交易猫上的交易价格为1元≈14金币,游戏内售价为1元=10金币,若不计算其余老本,如果黑产可能获取低于七折的礼券,则可能实现交易获利。 1.2.5 内容违规内容违规次要波及到游戏内发帖、发消息等文本内容灌水、涉黄、涉政、涉暴等违规危险。 内容违规的获利点比拟多,间接获利点通过接单刷帖获利,间接获利则是引流至三方网站或app,通过赌博、欺骗等伎俩获利。 不同类型的游戏所面临的黑产问题不同,具体可参考《2021游戏平安白皮书》,因篇幅无限,本文不再赘述。 图片起源:《2021游戏平安白皮书》 1.3 vivo游戏关注的黑产问题vivo游戏作为游戏渠道或者散发平台,关注的黑产问题和游戏开发者有所不同,游戏外挂等具体游戏内的黑产问题和平台无关,但游戏开发者和平台之间的利益调配就会成为开发者舞弊的动机,同时vivo平台为了减少渠道的用户黏性,也会为用户发展一系列流动,发放游戏礼包、礼券等福利礼品等,这也可能成为黑产的获利点。 咱们须要关注的黑产问题次要分为两类:游戏开发者相干的黑产问题和用户相干的黑产问题。 1.3.1 游戏开发者相干的黑产问题顾名思义,游戏开发者相干的黑产问题即以游戏开发者为主体发动的黑产行为,常见的黑产问题有散发刷量和自充值问题。 散发刷量指通过如刷预约、下载、评论、榜单、启动、时长、广告等形式帮忙游戏开发者在vivo平台取得用户流量或者广告收益; 自充值则是指游戏开发者通过自充值的形式晋升其在vivo平台的“流水”,以在融资、商业单干、流量获取等方面获取有利条件。 1.3.2 用户相干的黑产问题用户相干的黑产问题,次要指的是黑产利用批量注册的形式把握大量的vivo帐号,在游戏礼包、游戏礼券、营销流动等场景刷量获利。 二、vivo游戏黑产舞弊特色辨认和打击黑产危害之大,不得不引起平台的器重,对黑产问题予以打击,将其对平台的影响升高在可控的范畴内。 首先介绍黑产刷量形式及优缺点。 2.1 黑产刷量形式及优缺点黑产刷量形式大抵可分为三类:模仿真人刷、接口刷、真人刷。 2.1.1 模仿真人刷量模仿真人刷量,也称机刷,通常是应用群控设施,联合改机工具(批改设施参数)、秒拨机(切换ip)等来达到刷量的目标。 模仿刷量:Xposed模块导入手机,关上相应app,即开始hook设施信息,随后用自动化脚本实现下载、装置、卸载。Hook:手机装置xposed框架,剖析apk包,编写xposed模块。自动化脚本:装置appium,编写自动化脚本模仿进行关上、点击、滑动等操作。木马:通过“感化”实在设施,主动执行程序下载或者调起利用,达到下载的目标。模拟器:在设施无限的状况下,能够通过模拟器模仿简略的设施参数进行刷量。2.1.2 接口刷接口刷,即通过协定刷量,通常是通过破解申请中的加密算法从而来自在结构申请,联合http代理等来达到刷量的目标。 2.1.3 真人刷真人刷量,即通过真人真机刷量,常见的真人刷量形式蕴含积分墙,App畛域的试玩(激励)平台,通过处分玩家现金或者礼物的形式激励玩家到各种散发平台(次要是利用市场)去做工作: ...

June 19, 2023 · 1 min · jiezi

关于游戏:重回游戏公平向游戏打金工作室宣战

什么是打金工作室?近几年中国游戏市场继续倒退,国产自研精品游戏层出不穷,游戏产业精品化、高质量衰弱发展趋势稳固。依据中国音数协游戏工委(GPC)与中国游戏产业研究院公布的《2022年中国游戏产业报告》显示,2022 年,中国游戏市场理论销售收入 2658.84 亿元,自主研发游戏国内市场实销支出为 2223.77 亿元。 在游戏市场更加凋敝的同时,游戏安全形势也日益严厉。各类游戏外挂黑产危害游戏外部生态平衡,侵害宽广游戏玩家、厂商的利益。 在这一背景下,游戏厂商在专一游戏品质的同时,也亟需做好游戏平安防护。依据 2022 年网易易盾公布的游戏平安年度报告显示,网易易盾总体检测到外挂威逼 3,709,617,186 次,同比增长 104.2%,全年移动游戏检测到环境威逼 63,989,592 个,同比增长 296%。因为多款爆款游戏的上线,手游的对抗性、竞技性进一步增强,这使得游戏平安,尤其是外挂防护始终处于高反抗状态。 在细分品类中,角色扮演类、设计类、动作类游戏更容易受到外挂的攻打,其共计占比达 60%。依据游戏平安风控数据显示,在这些游戏中定制外挂仍然是各类游戏中最常见外挂状态,占比高达 83%。 这些外挂中的一个典型是“打金工作室”或称为“黑(灰)产工作室”。他们的指标通常是有交易机制或隐含资源转移机制的网络游戏,通过利用各种黑产工具和脚本,在游戏中实现同步器多开、脚本批量起号、主动实现工作、资源生产和转移等。这类外挂背地往往有宏大的产业,例如,网易暴雪曾多次联结警方打击《魔兽世界》外挂工作室,单次涉案金额均上千万。 打金工作室所管制的海量账号,从游戏中获取资源,这部分资源的产出是在游戏经济零碎原先的设计之外的,大量资源产出与发售将会挤压失常市场,造成游戏虚构经济解体,金价暴涨,最终导致玩家散失,服务器沦亡。游戏方为了进步游戏生命周期,只好一直开新服,但打金工作室会一直涌入新服,如此造成恶性循环,游戏方疲于奔命,却无奈从根本上解决利益散失的问题。 网易智企的游戏 AI 反作弊解决方案市场上游戏多种多样,品类、平台、数据条件也不尽相同。通过多年与打金工作室反抗的实际,网易智企游戏 AI 积攒了一套成熟的、数据驱动的游戏平安解决方案。这些计划可能无效地填补传统计划对业务数据利用率的有余,也能够防止游戏额定接入 SDK,保障跨端的计划通用性。 基于数据的计划能与玩家观测的景象更贴合,这种从景象切入游戏的技术计划不须要耗费精力感知外挂实现的伎俩。 检测计划能够从不同维度进行划分,从叙事的逻辑性上,咱们依照舞弊的生命周期和检测计划染指的工夫程序,将计划分为事先、事中、预先 3 种类型。 因为计划须要以数据进行驱动,在事先例如账号注册阶段,作弊者没有太多游戏内行为数据累计,咱们通常采纳设施维度的信息来进行初期的危险躲避。例如依据用户的硬件、IP 等信息,并与历史保护的黑名单库进行比对,来给用户打上标签。同时网易易盾的加固防破解、防调试等性能也将作弊者拦挡在初始环节外。 数据驱动的计划次要作用在事中和预先环节。在上游数据处理中,咱们采纳 kafka 接管游戏的音讯,并写入 HDFS/HBase 集群,上游会部署小时或日级别的离线数据 ETL 流程,实现数据写入 hive/impala 数仓用于满足离线的业务剖析或实现特定用户某工夫范畴内的全量数据疾速查问需要。 在 MMO 游戏中,作弊者在事中环节会进行主动采集/刷怪、主动实现工作/正本等工作,为解决这些问题咱们积淀了多种计划。例如: 基于游戏的日志数据:咱们结构了玩家在游戏中的行为序列,并利用表征学习和聚类算法辨认高嫌疑的簇群,从而实现异样工作室群体的检测。基于角色的轨迹类数据:咱们采纳时序算法来开掘具备显著模式和规律性的异样数据。局部前中期的计划不足足够的数据累计,或数据中所蕴含的信息力度不足以撑持证据,预先计划能作为良好补充,这也使整体计划更加残缺。例如 MMO 游戏中的真金交易(RMT)问题,在预先能察看到更残缺的牟利链路。从作弊者的角度思考,他们始终面临被处罚的危险,为了躲避危险会偏向于阶段性的变现。预先的计划可能无效地避免后续的游戏损失,同时减少作弊者的账号养成老本。 不同数据类型的防控计划日志/行为序列计划因为游戏原始日志蕴含了大量噪声(例如被动/被动,玩家信息/玩家动作,零碎环境,主动/手动等),并不能实在的反映玩家的操作,因而咱们设计了行为序列解决逻辑,对玩家的实在行为进行对立形容。 咱们采纳了 where-what-how-when 的思路来表白一个玩家的行为,例如在 MMO 游戏上玩家的行为能够表白为(map_id, action_id, detail_id, ts)这样的四元组序列。随后序列数据会进行分段、采样等数据加强解决并存储,供上游服务拜访。 在解决序列数据上,Transformer 和 RNN 都是适宜的工具,尤其是前者,它是基于自注意力机制的神经网络架构,对于序列数据建模有着优异的成果,宽泛用于 NLP 等深度学习畛域中,近期大火的 ChatGPT 等大规模语言模型,都是基于 Transformer 架构的。 咱们采纳 Transformer 的 Encoder 局部,对玩家的行为序列进行表征建模,捕获角色在游戏中的事件信息、工夫信息、程序和上下文信息。 ...

June 14, 2023 · 1 min · jiezi

关于游戏:新斗罗大陆游戏详细图文架设教程

前言“我叫小舞,跳舞的舞”,唐三不晓得的是,这个叫做小舞的十万年魂兽会成为他毕生的羁绊。在星辰大森林被武魂殿追杀生死存亡之际,小舞毅然决然进行了死亡献祭,将魂环魂骨和灵魂毫无保献祭留给了唐三,这是我听斗罗大陆小说最感人虐泪也是最不违心二刷的一段。就像唐三的母亲蓝银皇阿银献祭给了唐昊一样,将生的机会留给了最爱的人。 斗罗大陆的魅力远远不止于此,领有蓝银皇和昊天锤双生武魂、超强魂环魂骨实力强悍的千手修罗唐三;领有各种怪物一样天才,默契配合进阶的史莱克七怪;为能领有爱护爱人的能力,单独苦行历练十年的第一位食物系封号斗罗奥斯卡;深信“没有废物的武魂,只有废物的魂师”毕生致力于武魂实践钻研,却没逃过柳二龙与比比东感情纠葛的巨匠... 还有忘年之交以性命包庇唐三的老毒物独孤博;为炼制暴雨梨花针投身熔炉的神将楼高;一起经验屠戮之都,苦楚爱上唐三的武魂殿圣女胡列娜;实力深不可测崇尚势力,却苦命爱而不得的反派大Boss比比东... 在唐家三少的笔下,斗罗大陆的每个人物、每个故事都是那么动人心魄,感人落泪。强烈建议大家听听喜马拉雅紫禁的《斗罗大陆》和腾讯视频的动漫版《斗罗大陆》。 咳咳,不好意思,跑题了,那个本文介绍新斗罗大陆手游架设教程,这也是我第二次架设客户端的游戏,游戏长期保护,欢送来玩~ 游戏安卓客户端 APK 链接:https://www.123pan.com/s/7goZVv-Utkl.html,如登录界面有广告遮挡,退出重进或清下数据即可,暂无 IOS 客户端。后盾 GM 请关注我的公众号 echeverra 回复“斗罗大陆GM”获取。 同样举荐另外几款我架设的H5游戏:H5游戏整顿汇总,欢送来游玩~ 游戏截图: 架设1. 架设条件阿拉德之怒架设须要筹备: linux服务器,倡议CentOs 7.6版本,举荐轻量应用服务器,性价比高。游戏源码,关注我的公众号 echeverra,发送 “斗罗大陆” 获取。服务器配置能够是2H4G,但最好选用4H8G,免得内存起因引发架设玄学问题,因游戏启动后会占用超大的内存。 2. 装置宝塔及环境宝塔是一个服务器运维管理软件,装置命令: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh装置完后,依照提示信息登录宝塔(如果无法访问可能是因为服务器没有凋谢8888端口,参考步骤凋谢端口),并在宝塔软件商店中搜寻以下软件装置: web服务器:Nginx1.18数据库:Mysql 5.6编程语言:PHP 5.6数据库管理工具:phpMyAdmin 4.4工具:Linux工具箱 2.1关上Linux工具箱,设置 swap/虚拟内存 4096MB,swap 是 Linux 下的虚拟内存,设置适当的 swap 可减少服务器稳定性。如果你应用的是 4G 内存的服务器,那么 swap 肯定要设置能力胜利启动游戏。 3. 敞开防火墙通过宝塔菜单终端,执行敞开防火墙命令: systemctl stop firewalld.servicesystemctl disable firewalld.service4. 凋谢端口咱们间接凋谢所有端口1-65535,阿里云服务器在平安组中配置规定。 ...

June 9, 2023 · 2 min · jiezi

关于游戏:如何避免游戏炸服游戏上线的RoadMap

写在后面本文我想写一下,一款游戏上线前须要做哪些事件,以保障我的项目上线后的稳定性。若你们公司之前没有大DAU游戏上线和运维教训,当初筹备上线一款新游戏,能够依照这个RoadMap去做或者查看一遍本人游戏的上线筹备工作。 本文不会写具体的操作,只是提供一个RoadMap,具体如何做大家能够自行查找相干文档。 所有的工作,都会存在一个工作量和收益的衡量。一般来说,对于大部分游戏,不须要做到100w以上的同时在线,也不须要做到100%的可用性。具体工作做到哪一步,我的项目依据本人的状况衡量即可,我在文中会介绍须要重点关注的中央。 这些工作,至多须要提前6个月以上的工夫筹备,至多须要一个资深服务端和一个靠谱的执行服务端。 1. 游戏服务器架构1.1 抉择适宜本人我的项目和团队的服务器架构游戏行业的服务器架构真的是百花齐放,什么计划都有。传统的MMO(顺水寒)和近年来常见的开房间游戏(王者光荣)的关注重点和技术计划也不一样了。 设计游戏服务器架构时,所有的技术计划都不是一个选择题,没有说哪种肯定是好的,哪种肯定是不好的(我很厌恶脱离业务背景探讨技术计划优劣的事件。) 若团队业余,人力短缺,能够不思考架构的复杂性,微服务、K8S等技术用起来,能够做到互联网级别的程度扩大和高并发高可用。这个思路会导致写代码比较复杂,带来很大的工作量和人力需要,做的好下限很高,做的差上限很低。 然而若团队较小,教训也不多,倡议不要选特地简单的架构,尽量让架构优雅、简略。尽量不要用各种互联网的各种新技术,也没必要谋求百万级的同时在线和高级别的可用性。 这里举荐一下Skynet,很稳。上限够高,下限也够高。 1.2 反对程度扩大的架构从服务器架构上来看,对于次要逻辑,肯定要反对程度扩大。游戏上线后大量玩家涌入,第一个考验就是,服务器是否承载这么多玩家。 比方一款MOBA或者吃鸡这种游戏,它的次要逻辑是大厅和战斗,那么对于大厅和战斗就肯定要反对程度扩大。而对于登录、匹配这种非次要逻辑,是否反对程度扩大是可选项(尽管也不难)。 然而,不反对程度扩大的逻辑单点,往往就是游戏承载下限的瓶颈。找到成为承载瓶颈的单点,并且把它们革新为反对程度扩大,是晋升游戏服务器承载量的次要办法。大家能够依据本人我的项目的人力、游戏预期玩家量、游戏服务器部署形式等方面进行衡量。 程度扩大包含过程级别的,也包含线程级别的。对于一个多线程的服务器过程,也尽量不要呈现某个线程成为瓶颈。这可能会导致这个线程跑满了一个CPU,而后阻塞住了其它线程。压测的时候能够看一下,是否存在某些机器某一个CPU跑满了,其它CPU还空着。 2. 容灾服务器环境是简单的,不免机器、过程、网络等出现异常的状况。尽管这种几率较低,然而对于大集群来说,机器很多,环境简单,概率就不低了。 2.1 服务器机器宕机首先思考游戏服务器机器宕机的状况,在某些状况下游戏过程被杀死也相似于这种状况。 对于这种状况,咱们要尽量保障大部分过程被杀死,不会影响到集群整体的可用性。比方,游戏中的大厅服和战斗服过程被杀死,若只会影响到此过程的玩家和战斗,并且玩家和战斗能主动地转移到可用的过程上持续游戏,那么,问题的影响范畴就会小很多。 而对于有些要害的过程,比方治理过程,这种过程数量少,且写容灾逻辑的难度更大一些,能够不做容灾。 2.2 业务容灾为了做到某些业务节点呈现问题时,不会造成整个集群的不可用,须要在业务层面做一些容灾解决。 1)重要模块和高风险模块的解耦比方,某些单点服务(高风险模块)若出现异常,最好只是这些服务不可用,不要影响到登录(重要模块)。 2)非重要模块能够做到敞开/重启有些边缘服务,比方录像服,即便呈现问题或敞开,也要保障对业务主流程不造成阻塞影响。 3)客户端、服务端综合思考业务的容灾须要从玩家体验的角度关注,而不只是服务端须要关注的事件。在很多游戏我的项目,客户端服务端是两个人离开写的,而思考业务容灾时须要综合思考(个别由服务端负责)。 在做业务容灾解决的时候,肯定要和客户端一起做,比方,要保障客户端在登录时,不会调用一些没有必要的接口。 4)排队零碎倡议所有游戏都做一个简单或者简略的排队零碎,当服务端呈现问题时,或者当玩家在线量超过预期时,能够让玩家去排队,而不是登录报错或卡住无反馈。 对于可横向扩大的游戏,排队零碎不必做的太简单,因为比拟容易进步承载量,只有在呈现问题的时候启用即可;对于传统MMO这种分区游戏,每个区的承载量是有下限的,这种须要把排队好好做一下。排队零碎也不必搞得太简单,显示信息没必要特地精确实时,尽量不要出Bug,参考明日之后百万阴兵排队。 2.3 第三方服务异样游戏服务器个别都会应用一些云厂商提供的SaaS服务,比方最常见的数据库。 一般来说,这些服务是有容灾机制的,所以不会呈现齐全不可用。然而,DB的异样往往会导致网络闪断,那么数据库网络连接的断线重连,以及在这种状况下如何尽量保障信息部失落且保序,就是项目组要做的事件了。 除了网络闪断,也可能有其余异常情况,比方咱们曾遇到数据库分钟级别的不可用。大家能够依据本人游戏应用的服务进行评估。 2.4 容灾测试容灾做好了,游戏上线前要测试一遍,看看在异常情况下, 集群的体现是否合乎预期。 倡议对每类服务、每类过程都测试一下不可用时游戏整个集群的体现,以及对玩家的游戏体验的影响。玩家游戏体验要从客户端的角度评估,能力确认实在环境下的游戏体验影响。 此外,在测试的过程中,对于每类故障,也要给出故障复原伎俩的倡议和演练。比方,是须要重启整个游戏服务器;还是只须要重启该过程;还是不须要做任何解决。 3. 日志服务器日志肯定要写得尽量具体,包含日志级别、提示信息、运行状态等。 不要因为感觉日志写多了,会节约日志服务的机器老本。只有别输入齐全没有意义和价值的Debug日志,以及那种循环外面的海量日志,日志多多益善,不然到了线上,会呈现“日志用时方恨少”的状况。 若日志切实太多,能够在游戏压测时察看一下,个别是因为有太多的有效日志导致的。 倡议应用云厂商提供的日志服务,比方,阿里云日志服务SLS。AWS没有相似的服务,咱们用的OpenSearch。 4. 压测压测不是万能的,没有压测是万万不能的。上线前压测的目标: 验证架构的承载能力。我集体倡议在架构层面要能反对100w的PCU。架构承载和业务承载不是一个货色,某个业务不肯定能撑持这么高的量级,然而当玩家扩散到各个玩法后,你的架构要能撑持这个量级。评估各业务模块的性能体现,关注CPU、内存、网络带宽,对于超出预期的,针对性优化。依据性能数据和硬件指标,为开服资源评估提供数据撑持。查看玩家在服务器高并发状况下的体现。4.1 压测框架和压测脚本游戏服务器不像WEB都是用HTTP,所以一般来说,须要本人写一套本人游戏服务器对应的压测框架或平台,基于这套框架,能够写压测脚本。 开发完了框架,就能够基于框架写脚本了。写脚本是一个工作量比拟大的工作,最好上线测试前三个月到半年的工夫开始写。写压测脚本就是模仿玩家操作,包含登录、购买物品、降级、匹配、加好友、加帮派、进入战斗、战斗内的各种操作等等。 一般来说,大厅里的压测脚本比拟容易写,但战斗外面会麻烦一些。不过一般来说,当初常见的开房间类游戏的玩家下限是无限的,个别不必压力测试,反而是须要性能测试。传统的MMO简单很多。 写脚本的时候,尽量模仿玩家的实在操作。比方,测试背包,能够隔三秒取得一个物品,而后隔三秒应用一个物品。不要写成一秒钟执行100次获取物品和应用物品的逻辑。 4.2 压测流程压测脚本写完了,就能够进行压测了。 对于压测承载指标,倡议依照策动/发行评估的同时在线乘以3~5倍的量级进行压测,或者间接依照100w同时在线去压测。一方面因为压测脚本往往和玩家线上操作有肯定的差异,另一方面游戏也可能超出预期嘛。 压测过程倡议四轮:1.小规模压测:把压测脚本和流程跑通,确定框架和压测脚本的正确性。 2.分模块中规模压测:针对某个零碎/功能模块进行压测,能够定量地剖析某个模块的承载量。这种形式能够评估某些单点过程/服务的最大承载量,避免这些单点成为瓶颈。比方登录,能够剖析每秒钟最多能反对多少玩家登录,若QPS太低,能够去找性能瓶颈针对性的优化。 3.大规模压测:这时候,依照承载指标(100W同时在线)同时上线这么多玩家,而后随机或者依照法则把所有的脚本都跑起来,模仿玩家的各种操作。此外,在大规模压测期间,也能够用这个集群作为外部体验测试集群,查看玩家在服务器高并发状况下的体现。留神,对于小公司,这个压测工夫倡议管制在2~3天,,服务器费用的破费就像烧钱一样。 4.线上集群压测:上线之前,针对筹备用于线上部署的集群再进行一次整体压测,依照预期的承载量去压测,同时确定线上集群部署的正确性。游戏开服之前,把数据清档。 4.3 定位瓶颈1)架构瓶颈压测期间,若没有达到要求,则要去寻找性能瓶颈。比方登录的时候,发现登录速度上不去了,就去找问题出在哪里。是数据库的问题,还是某个逻辑节点曾经跑满了一个CPU外围。 2)代码性能瓶颈压测的时候,也能够通过Profile工具,去找到逻辑中的性能热点,针对性的对代码进行性能优化。 4.4 周边服务压测除了游戏业务自身须要压测,游戏业务应用的周边业务,也要进行压测。比方账号平台、领取平台、或者本人部署的日志服务等。 若应用了第三方SaaS服务,有些能够本人压测一下,比方DB;有些能够跟第三方明确本人游戏可能达到的量级,让他们做好筹备。 5. 热更要尽量保障绝大部分代码能够反对热更或者滚动更新。 游戏上线后,不可能没有Bug,也不可能通过重启服务器来修复Bug。 要做好热更流程的演练和测试,对于各类模块和服务,都要测试一下热更是正确的。 6. 数据库相干6.1 数据库选型游戏服务器罕用的数据库包含:Mysql、Mongo、Redis。抉择适合的并且本人团队相熟的数据库。 ...

March 28, 2023 · 1 min · jiezi

关于游戏:1-个案例读懂游戏产品如何用-AB-测试做增长

更多技术交换、求职机会,欢送关注字节跳动数据平台微信公众号,回复【1】进入官网交换群随着国内游戏用户数量趋于饱和,中国游戏产业也从高速成长期逐步转型,市场成熟度晋升,竞争趋于精细化。 随着游戏出海以及私域流量经营的挑战,游戏企业对数据分析的应用需要和依赖度进一步提高。而在游戏研发立项、验证、开发、测试、上线和经营等阶段 A/B 测试均能施展重要作用。 本文讲述一个通过 A/B 测试取得“数据驱动增长”能力的游戏产品故事。并介绍在游戏的研发推广的全流程中,A/B 测试都能利用于哪些场景。 疾速试错,A/B 测试打磨爆款游戏游戏行业倒退至今,先后经验了主机游戏时代、网页游戏时代、移动游戏时代等多个阶段,现在移动游戏支出占国内游戏支出的 7 成以上,许多传统游戏公司正面临着转型压力。 而随着游戏技术的日趋成熟,少量新兴公司涌入该行业,进一步加剧了竞争压力。游戏研发流程大抵分为立项、验证、开发、测试、上线筹备和经营六个阶段,每个阶段往往都随同着许多批改。 批改的成果如何?对于外围指标是否会有负面的影响?传统的思路,是将新个性上线后验证成果,但这也往往存在上线周期长,过分依赖教训,影响面广等问题。A/B 测试可能完满地解决上述痛点。 它通过在线上流量中取出一小部分,齐全随机地分给原策略 A(对照组)和新策略 B(实验组),再联合迷信的统计办法 ,失去对于两种策略绝对成果的精确预计。A/B 测试应用线上小流量即可验证成果,并可能无效地掂量不同策略的收益。 "全民弹弹弹"的 A/B 测试故事在发行时曾荣获“年度最佳休闲游戏”大奖的《全民弹弹弹》,是超休闲游戏类的爆款产品代表。它是一款操作简略、极易上手的球跳塔类休闲游戏,玩家既能够让弹球一层一层地击穿黑白砖块,享受纯正的弹射快感,也能够解锁更多未知的球球,体验合成的养成乐趣。 在这款游戏研发和推广过程中,借鉴了字节跳动的增长教训,接入了字节自研出品的 A/B 测试产品——火山引擎 DataTester,对游戏的多个环节进行了 A/B 测试。 在《全民弹弹弹》的游戏经营环节,为验证游戏首页对玩家留存和广告数据的影响,设计了两款首页计划通过 A/B 测试进行玩家留存数据的比照:跳塔页(左图)、合成页面(右图)。 通过在 DataTester 中运行 2 周的试验测试,结果显示,首页为合成页(右图)的页面在用户 3 日留存、用户 7 日留存以及广告成果等外围指标中,均显著优于对照组跳塔页(左图)的计划。在 A/B 测试的数据后果撑持下,《全民弹弹弹》最终全量上线了合成页面的计划,并获得了优异的成果。 一款游戏从研发到打磨,再到上线后的一直调优,全链路均可通过 A/B 测试晋升效率和决策准确度。除上述场景外,DataTester 还能在游戏产品中,利用于以下场景: 1.验证老手疏导改变,老手工作难度调整,初始资源调整等2.验证关卡难度、配备爆率、宝箱中奖率调整等影响游戏体验的的改变3.验证商城界面,积分零碎,公告栏、banner、按钮、图标等功能性区域的改变4.验证匹配零碎、好友零碎、聊天零碎等社交性功能改变5.验证游戏 IP、NPC、游戏场景、剧情的改变 试验分层,可有限拓展试验流量在游戏内测阶段,经常会遇到须要多个 A/B 测试并行的场景: 小 A 要验证新的武器零碎,须要 50%的流量验证;小 B 批改商城界面,也须要 50%的流量;小 C 对老手工作进行了欠缺,同样须要 50%的流量验证。此时同时进行 3 个试验,须要 150%的流量。 线上流量不够用,只能对试验进行优先级排序,让几个试验先后进行,但这会导致效率低下。 火山引擎 A/B 测试 DataTester 流量分层技术,将总体流量复制“无数遍”,造成”无数个”流量层。流量层两两之间互相正交,再加之运行在雷同层的试验流量互斥,从而保障同时运行多个试验不会相互烦扰。 ...

March 17, 2023 · 1 min · jiezi

关于游戏:mac策略游戏三国志汉末霸业Three-Kingdoms-The-Last-Warlord-中文原生版

三国志汉末霸业Three Kingdoms: The Last Warlord 中文原生版一款十分好玩的mac策略游戏,玩家须要表演一名领主来治理本人的领地并与其余权势进行和平。在游戏中,玩家能够通过招募英雄、倒退经济、建设城池、组建军队等形式来晋升本人的实力。 同时,玩家须要思考到各种因素如天气变动、资源储备、政治局势等对游戏的影响,并做出相应的决策。此外,游戏还蕴含了丰盛的历史事件和工作,玩家能够通过实现这些工作来取得额定的处分和进步本人的声望。 三国志汉末霸业Three Kingdoms: The Last Warlord 中文原生版下载点此 在回归传统策略类的根底上深度刻画了三国各城市之间地区的差别以及每个武将本身能力和个性的异同,而在战斗方面突出联合天时地利人和的调配来进行策略作战的特色。力求出现给玩家一个具备中国人的新思维和新角度的不一样的三国游戏体验!

March 17, 2023 · 1 min · jiezi

关于游戏:好玩的赛车游戏反重力赛车游戏flashout-3-中文激活版

FLASHOUT 3 为您提供超快的船只、循环、跳跃和忽然的急转弯!在最令人印象粗浅的科幻赛道上测试你的技能,尽量不要落后!然而,如果产生这种状况,请不要出汗!开释火箭、枪支、炸弹和地雷的力量,帮忙您升高竞争程度! 反重力赛车游戏flashout 3 中文激活版点此获取 分屏模式一个永远不会过期的选项,但在许多游戏中都短少这个模式。在一个显示器上与敌人一起玩游戏会很乏味! FLASHOUT 3 反对程度和垂直分屏模式。抉择最适宜您的一种模式! 反对虚拟现实FLASHOUT 3 通过 OpenXR 反对所有风行的 VR 耳机!戴上头盔,舒服地坐下,拿起游戏手柄,让本人齐全沉迷在游戏中! 在 VR 模式下运行游戏之前,请确保关上耳机。 反对静止模拟器FLASHOUT 3 是市场上第一款反对静止模拟器的 AG 赛车类游戏!系好安全带,用本人的身材感触速度、旋转和循环!戴上您的 VR 头盔,纵情体验 FLASHOUT 3!

March 15, 2023 · 1 min · jiezi

关于游戏:太空射击游戏红视太空突击-Redout-Space-Assault-mac中文

红视:太空突击 Redout: Space Assault 游戏中你将操控一架超级轨道侦察战斗机,在2395年的火星殖民中纵情驰骋:通过Apple设施,沉浸于最为迅速、最具史诗感也最为刺激的街机式太空战斗里!在电光石火、血脉贲张的单人太空战斗中智取、妙算、压抑与超过你的对手! 太空突击 Redout: Space Assault mac中文点此 你将操控一架超级轨道侦察战斗机,在2395年的火星殖民中纵情驰骋:通过Apple设施,沉浸于最为迅速、最具史诗感也最为刺激的街机式太空战斗里!在电光石火、血脉贲张的单人太空战斗中智取、妙算、压抑与超过你的对手! 你将表演利昂·巴雷特,一名波塞冬安全部队的王牌战斗机飞行员。此时人类正在生死存亡的关头挣扎。他们决裂成了两个营垒:酷热而资源耗尽的地球,以及凛冽而幽森密闭的月球殖民地。而波塞冬公司的宗旨则是为殖民火星闯出一条路线来。你的工作就是保护秩序:毁灭叛军和太空海盗,帮助咱们的科学家的钻研并保障他们的平安,以及爱护咱们的全体人员免受数不清的内部威逼。

March 14, 2023 · 1 min · jiezi

关于游戏:动作冒险游戏热血无赖-终极版Mac中文全dlc

热血无赖 终极版Mac中文版更新了,游戏剧情也如同港剧般跌宕起伏,让人沉迷不已。而面对次世代平台的《热血无赖:最终版》不仅保留了这两点优良元素,精良的画面更会让你耳目一新,它和过来一样好玩,引人入胜的故事情节,令人印象粗浅的人物刻画,拳拳到肉的近战搏击,火爆的枪火交锋,速度感爆棚的驾驶体验使得这款多面体游戏在各方面都非常优良。 热血无赖 终极版Mac中文全dlc点此下载

March 13, 2023 · 1 min · jiezi

关于游戏:好玩的射击游戏浴火银河2-Galaxy-on-Fire-2™-Full-HD-中文版

mac上哪款射击游戏好玩呢?浴火河汉2 Galaxy on Fire 2™ Full HD 中文版是个很好的抉择,一次超光速引擎的故障导致 Keith T. Maxwell 穿梭了宇宙空间,为了生存他与一支肆虐河汉的神秘外星舰队开展了抗争。 随着刚发佈的《浴火河汉2》全高清版,魔鱼屡获殊荣的的太空科幻神作现已降重登上Windows电脑上。寰球销售量冲破千万,玩家及媒体给予的宽泛好评及赞叹,使《浴火河汉2》成为移动游戏中太空射击游戏的榜样。游戏带有十分吸引的剧情、高画质的3D影像及丰盛的音乐及音效,这充斥动作性的科幻游戏将在电脑单机游戏市场上掀起热潮。 浴火河汉2 Galaxy on Fire 2™ Full HD 中文版点此

March 11, 2023 · 1 min · jiezi

关于游戏:英雄互娱-提升-300-一次性能优化实战记录

案例背景英雄互娱是国内出名游戏研发商和发行商,常常遇到热门线上游戏,在某霎时呈现大量登录申请,须要长期扩容资源的场景。为了让服务更好的应答突增并发申请压力,客户尝试通过把应用服务容器化部署,能通过 HPA(Horizontal Pod Autoscaling)的性能,疾速弹性主动扩容利用正本数来进步承载能力。 以下数据均从某已发行游戏的实在环境所得,其应用服务次要基于 Java 技术栈开发。 问题形容该游戏利用部署在某私有云厂商的托管 K8S 环境中,通过一次更新后,将减少新服节点。以过往教训看,同时跑 6 个雷同利用的 Pod,服务的承载能力能够稳固达到每秒 5 万次的 RPS(Request per Second)。但在上线前压力测试后发现,同时跑 6 个 Pod 的 RPS 的承载峰值仅为 2 万出头。减少到 12 个 Pod 时(雷同资源配置),RPS 的承载峰值为 2.4 万左右,增长并不显著。进一步减少到 18 个 Pod(雷同资源配置),RPS 不再晋升,仍停留在 2.4 万左右。这就呈现问题了,该服务的承载能力无奈随着资源扩容线性增长,将会在高峰期极大影响游戏用户体验。显然瓶颈点会在服务自身,须要配合利用性能监测剖析伎俩来进一步追踪,找出瓶颈点并执行优化。 绿线为 RPS,峰值为 2.4 万黄线为响应工夫(Response Time),峰值约为 1000ms 应用观测云定位问题的过程观测云是零碎全链路数据可观测平台,非常适合高效定位上述问题根因。观测云利用性能监测反对应用 OpenTracing 协定的采集器,实现对分布式架构的利用进行端到端的链路剖析,并能与基础设施、日志、用户拜访监测进行关联剖析,疾速感知故障表象和定位故障根因,进步用户体验。 通过链路观测疾速定位问题方向在容器服务环境中部署观测云的数据采集器 - DataKit,接入利用链路和日志数据。服务在 21:00 到 22:00 点间进行压测,压测开始后,观测云利用性能监测的服务概览页面立刻显示出零碎实时运行状态,通过对 Pxx 的响应工夫做排序,疾速找到了响应工夫较长的服务。如下图所示: 点击该服务做进一步下钻,能够看到更具体的调用相干信息。如下图所示,发现「POST /xxx/v1/login/checklgn.lg」的响应工夫较长,并且随着压力的增大,均匀响应工夫会逐步减少。定位到该条服务链路须要做进一步的排查。 点击该服务调用,进一步下钻去探查资源详情,咱们留神到该服务执行会十分频繁的去调用 Redis(56 次),如下图所示。如果并发量增大,频繁调用该服务的时候,很可能会造成 Redis 上的微小压力。 从火焰图中,咱们能够看到有些 Redis 调用之间存在可疑的提早(留神红圈局部)。尽管,Redis 自身执行的工夫十分快,但因为调用间的提早拖慢了整体性能。 ...

January 13, 2023 · 1 min · jiezi

关于游戏:H5游戏架设经验分享

前言首先,我不是业余做游戏的,只是在一些机缘巧合下,发现能够本人架设游戏做GM,后盾收费发送游戏中的各种充值和道具,而后在游戏里随心所欲,各种榜一秒杀,几乎不要太爽,于是便一发不可收拾开始了游戏架设的钻研... 本文分享我对游戏架设的教训心得,如果你也喜爱架设游戏,那么这篇文章必定会对你有所帮忙。 我目前架设运行的游戏都汇总在文章:好玩的收费GM游戏整顿汇总,所有游戏架设教程,蕴含已下架的都在我博客的 游戏分类 中,网上大多是视频教程,而像我这种耗时耗力写具体图文教程根本是没有的。 新世界游戏架设对我来说就像关上了一个新世界,原来游戏还能够这么玩~ 趣味使然最开始我是在某宝上发现有后盾的游戏,能够任意充值和发送道具,感觉很爽,尽管还当不了榜一,然而能够体验满级VIP和各种道具带来的快感,不过这种游戏根本不会经营太长时间就会关服。 起初我就想到是不是能够本人搭建个游戏,正好本人是做前端的,也很想钻研下游戏界面是如何实现的,所以就开始钻研,各种查找材料,直到本人搭建胜利了第一款游戏《大天使之剑》,关上了新世界。 游戏类型我搭建的游戏根本都是Linux环境的H5游戏,只搭建过一款客户端类型的《阿拉德之怒》,因为本人是做前端的,所以对H5比拟相熟,而且因为本人应用的苹果手机,App须要签名会比拟麻烦,而H5只有有浏览器就能够。 至于为什么不必windows环境和一键端,则是因为我买的服务器配置都比拟低,windows会占用过多内存,而一键端的集成个性会使得一台服务器根本只能搭建一个游戏,很不划算。 博客与公众号我的 博客 和 公众号 初衷是分享一些IT技术文章,起初也把游戏架设写了进去,发现浏览关注人数减少了不少- -,占到百分之7、80,这让我啼笑皆非,总感觉背离了初衷。 当初博客的点击量是10W+,根本每天会有150的访客和300的点击量。 公众号目前关注人数6千,嗯,大部分都是因为游戏关注的- -。 而后还有12个游戏群...次要是给大家游戏受权和交换用。 架设教训服务器架设游戏首先须要一台服务器,市面上的云服务器很多,倡议选大厂的,246(2核4G内存6M宽带)的配置个别游戏足矣,H5游戏比拟吃宽带,因为须要加载的网络资源比拟多。 集体举荐腾讯云的轻量应用服务器,性价比高,释怀我不是打广告,我不配- -,新人、双十一或者新年流动比拟适合,一年不到200,有条件的能够多买几年,腾讯云轻量应用服务器还有个益处是能够收费创立两个快照,这点很实用。 资源网站网上的资源网站其实很多,我整顿了几个我罕用的资源网站,有免费的也有收费的。 ST暗藏空间:这个是我最开始接触的资源网站。小皮源码网:资源丰盛,每个游戏都有视频教程。35博客圈:博客网站能够发帖交换,有修复BUG帖子。以上网站有挂掉或者进行经营的危险,请审慎购买。还有很多其余的资源网站,大部分都是搬砖的资源,很容易搜到。如果还找不到,能够看看以上这些资源网的友情链接。 大部分资源网站用的都是Zibll、CeoMax或者Ripro主题网站,本人也曾想过搞一个的念头,奈何工夫精力有限,就放弃了。我架设过的游戏资源都会收费分享在公众号上,大家能够通过公众号echeverra回复游戏名获取。 架设事项架设游戏有时候是一件很玄妙的事件,《阿拉德之怒》我第一次架设还算顺利,当初曾经间断运行了200多天没有产生过异样重启,然而第二次换服务器架设却死活也不胜利,我狐疑很大概率是因为服务器自身的问题。 架设就好比你看说明书组装家具一样,只有装置指定的环境,依照步骤一步步来根本都会胜利的,我写的图文教程都很具体,很多人都架设胜利并在群里分享。如果环境步骤都没问题屡次尝试还是不胜利,那很有可能是遇到我上文提到的服务器本身问题。 这里列举一些游戏群里大家架设大概率会遇到的问题: 游戏无法访问,端口未启动监听:服务器和宝塔都须要放开端口或CentOs版本谬误《阿拉德之怒》网络异样:源码IP没有批改胜利或有架设步骤脱漏《阿拉德之怒》配置PM2管理器失败:更换Node版本v16.14.2再配置《梦幻西游》创立角色失败:数据库未指定字符集UTF-8,排序规定 utf8_unicode_ci《冰雪传奇》《雷霆传奇》拜访失败:浏览器缓存数据异样,革除缓存或换浏览器《冰雪传奇》创立角色名反复:重启服务器在启动游戏服务拜访即可域名问题游戏是能够应用域名的,最开始我应用域名有两个起因,第一域名比间接IP拜访更直观且高大上,第二如果服务器到期了,尽管要更换服务器IP,然而拜访游戏的域名是不变的。 但应用域名是有危险和限度的,域名备案须要填写网站类型,集体是没有经营游戏资质的,所以废了九牛二虎之力我又将域名模式改回了IP,如果你有相似想法就不要踩坑了- -。 多游戏搭建常常有人会问我一个服务器上能不能同时搭建多个游戏,答案是必定的,我基本上每个服务器都会搭建2-3个游戏,还有博客网站等,这也导致我的服务器根本没有闲暇的时候,始终有网络申请。 想要一个服务器搭建多个游戏有几个比拟刻薄的前提: 第一是几款游戏搭建环境统一或兼容,如CentOs的版本,数据库的类型和版本等,只有环境都合乎搭建的几个游戏能力都胜利运行起来,比拟好的一点是个别游戏对环境要求都比拟通用,大部分应用CentOs 7 和mysql 5 都能够。 第二内存足够,个别一个H5游戏会占用小2G左右的内存,所有4G内存的配置只能搭建两个游戏,须要留神的是应用内存超过90%会有大概率端口异样挂掉的状况。这时候能够写个脚本监测端口,挂掉再重新启动即可。 第三是端口不能抵触,几款游戏如果占用了同一个端口,那么必定会有抵触,之前我搭建《冰雪传奇》和《雷霆传奇》就产生过抵触的端口,起初将《冰雪传奇》的端口进行了批改才解决。 第四是数据库表名不能抵触,和端口抵触同理,只能批改数据库和源码中的表名解决,但这种状况并不常见,除非你搭建的几款游戏是换皮的。 具体是否搭建多个游戏还须要理论去操作,多多尝试~ 游戏修复拿到一款游戏源码我都会强迫症的全局搜寻源码中的广告,而后去除掉,因为很影响玩游戏的情绪。 思考平安问题,源码中的数据库明码和GM码我也会更改,倡议大家也改掉。 架设好之后我会试玩一段时间,有一些简略的BUG我会尝试修复下,如果比较严重修复不了,影响整体游戏体验的那就只能放弃了,这种坑我也踩了不少。 我分享的游戏根本不会有大问题,而且都是我优化过的,像《梦幻西游》我就花了很长的工夫去修复欠缺,直到称心为止。 数据备份数据是无价的,所以数据要及时备份,不要等数据失落了才后悔莫及,我会应用两种形式对数据进行备份解决。 第一种是应用服务器快照,腾讯云轻量服务器有两个收费的快照,定期创立快照备份好,一旦有异样可对快照进行回滚复原数据。阿里云的快照会依照容量免费,价格也很便宜。 第二种是应用宝塔的打算工作,能够定时每天执行备份数据库和文件,产生异样能够导入备份的数据库,记得每隔一段时间把备份的数据下载到本地保留好,以防万一。 版权问题尽管这些游戏源码或者端在网上很多,但或多或少都有版权问题,如果是架设的私服游戏以营利为目标那必定是守法的。所以我架设的游戏都是无奈内充的,也不容许群里探讨内充问题。 具体的法律条文大家感兴趣能够查查,营利数额较大或者有其余重大情节的会被有期徒刑或者拘役,所以揭示大家肯定肯定不要有这种守法的念头。 后续总结钻研架设游戏半年多的工夫我意识很多游戏相干的敌人,有游戏资源网的站长,也有开发游戏的技术高手,还有一些酷爱架设游戏的玩家。有几个对架设游戏特地感兴趣的玩家,架设遇到问题会钻研很久,架设很屡次直到胜利。 ...

January 13, 2023 · 1 min · jiezi

关于游戏:腾讯安全联合发布2022游戏安全白皮书外挂对抗仍然激烈

2022年以来,各类游戏安全事件的产生给一直影响着游戏生态的衰弱倒退。同时,随着游戏行业数字化过程的放慢,以及游戏全球化布局的一直推动,游戏厂商对于游戏平安的投入越来越大,把握最新的行业平安态势有利于其平安防护和治理。 为帮忙企业更好地理解安全形势,提供攻防参考,腾讯平安联结腾讯游戏平安、广东省游戏产业协会公布《2022游戏平安白皮书》,从外挂、内容平安、游戏经济平安等18个维度,全方位地向行业揭示以后游戏面临的各类平安问题,挑战和趋势,助力企业在平安防护窘境中找到突破点。 同时,对于游戏平安,《白皮书》指出了七大信息点: 2022年腾讯PC游戏外挂反抗强烈,样本量仍在高位,性能量比照2021年增多12%;近2年移动游戏外挂中,定制挂占比超过68%;2022年游戏黑产处罚量减少显著;游戏内的违规内容从从文本逐步往图片和语音迁徙;游戏帐号平安问题严厉,木马盗号量上涨300%;游戏行业DDoS攻打为全行业最高;玩家知情权意识以及对玩家服务水平的要求疾速晋升,平安服务建设进入快车道。游戏平安问题频发,外挂反抗尤为强烈2022年前三季度,中国游戏市场理论销售收入呈现迟缓降落的趋势,随着国内市场增速放缓,黑产随着市场的变动而出现稳定。在利益收紧的局势下,黑产账号仍旧沉闷、盗号行为翻倍、DDoS攻打检测量达全行业最高,表明游戏平安问题仍不容小觑。 其中最令玩家头痛的外挂景象依然重大。《白皮书》显示,2022年端游外挂反抗强烈,样本量按月均值达到2017款,同比增长1.8%,性能数量按月均值达3282个,同比增长12%。移动游戏端的外挂性能数量增长更为显著,是外挂样本量的4.28倍。这意味着同一款外挂所具备的性能更为多样,检测和反抗的难度回升。 除了外挂问题,游戏账号平安问题也更趋严厉,呈现出盗号渠道多、形式多样的特色。木马、钓鱼欺诈、撞库、租号借号成为黑产荫蔽施行盗号行为的次要伎俩。此外,腾讯平安公布的《2022上半年游戏平安洞察报告》指出,2022年日均中马量级较2021年上涨逾300%,单日最高超过15万。游戏账号通常与实名信息关联,盗号问题不仅仅关乎单个账号的得失,在盗号团伙的动作下,用户隐衷信息被黑产利用的危险将显著回升。 始终以来,游戏行业都是DDoS攻打的高发地,也是蒙受DDoS攻打最多的行业,2022年体现尤甚,所占全行业总攻击比例由2021年的26%回升至42%。其中,出海游戏在简单的海内环境下成为黑产攻打热点,所占全行业总攻击比例在2022年上半年占到了40%,其中手游包揽近50%的DDoS攻打,占据较高比例的攻打份额。 黑产攻打伎俩多样,功能性、隐匿性降级面对游戏厂商和平安厂商的攻防反抗,黑产的攻打伎俩和形式也在降级更新,比方通过攻打产品的多功能交融、违规信息的更新迭代来晋升攻打成果,绕开游戏平安检测和防护策略。 在技术方面,报告显示,随着新技术的呈现和利用,黑产团伙将更多眼光放到外挂的更新、自主学习、规避检测上,通过云更新、AI、机器学习等技术实现外挂主动变种、云更新、内核化、主动瞄准和击杀;同时,舞弊性能多效一体的定制挂在近两年频繁呈现,占比均超过了68%。攻防人员须要消耗更多的精力来辨别并打击,给游戏防护带来极大挑战。 在隐匿性方面,随着违规文本信息打击力度的的增强,游戏内歹意敏感内容逐步转移至图片和语音,使得违规内容难以被发现,截至往年10月份,违规语音检测量达7.37亿条,违规图片拦挡量达1617万张,同比回升了10%和56%;其次,外挂销售也正在摸索更严格、荫蔽的销售形式,13%外挂转为外部、私域渠道流传。违规伎俩的隐匿性使得监测难度增大,促使游戏厂商和平安厂商进一步降级监查技术和计划。 玩家平安服务新摸索,多维度进步平安治理力面对仍旧猖狂的黑产和泛滥平安问题,游戏厂商不仅要以增强本身技术能力,更要建设起高效的经营体系,晋升游戏平安治理程度,清朗游戏环境。据《白皮书》显示,腾讯平安联合本身攻防实际,以及在玩家平安服务畛域的摸索,提供了游戏平安经营的新思路——玩家行为干涉、游戏信用服务、“实时巡逻”服务。 基于游戏内的玩家行为,腾讯平安摸索相应的干涉形式,同时引入“巡逻”机制,间接晋升游戏内玩家对于打击违规的参与度,从外围和内侧造成包围圈,晋升游戏违规发现效率,加重歹意行为对于游戏环境的毁坏。 此外,《2022游戏平安白皮书》还指出游戏行业存在的其余问题,包含游戏资源发售、广告费用散失、游戏盗版等;并提出进步平安警觉、被动干涉、增强监测与管控对保障游戏业务顺利进行至关重要,同时基于腾讯平安本身攻防教训和能力提供了相应的应答办法。 腾讯平安一站式防护,助力游戏行业行稳致远以后,腾讯平安将在平安畛域耕耘二十多年的业务实际和黑灰产反抗教训融入游戏平安攻防场景中,为游戏厂商提供系统化的平安解决方案,包含反外挂、加固、内容平安、经济平安、数字平安爱护等,为游戏提供一站式平安防护。 同时,腾讯平安一直摸索与游戏厂商的单干互联形式,独特推动实现平安产业链上的协同互补,护航产业互联网安全新生态,助力行业数字化转型降级。 在游戏行业正稳步向前迈进的过程中,平安问题始终是各大游戏厂商的头等难题之一,腾讯平安心愿通过《白皮书》为游戏厂商们带来踊跃的参考价值,一起攻克游戏平安难题,打造更加清朗的游戏环境、更加优质的游戏体验,携手推动行业衰弱久远倒退。

December 19, 2022 · 1 min · jiezi

关于游戏:CSO面对面|对话因陀罗共话游戏行业安全防护之路

近年来,随着游戏行业一直倒退,行业面临的平安威逼也层出不穷,外挂问题、内容平安问题、帐号问题等给各大厂商仍带来微小困扰,策略类游戏作为当下热门的游戏类型之一,面临的平安问题也同样严厉。 游戏厂商的平安防护之路任重道远,业余的游戏平安防护解决方案对游戏厂商来说则至为重要。作为打造过多款热门手游的厂商,因陀罗与腾讯平安深刻单干,依靠腾讯平安多年的能力积淀和实战经验,为清朗的游戏环境一直致力。 本期腾讯平安《CSO面对面》栏目,邀请腾讯游戏平安专家乔亲 对话 广州因陀罗软件有限公司CTO杨金平,以策略类手游的平安防护为例,分享游戏厂商面临的游戏平安问题及解决对策。 杨金平:广州因陀罗软件有限公司CTO,多年游戏行业教训,负责《环形和平》等多款游戏研发和游戏平安建设,对游戏外挂反抗、内容平安、服务器平安有丰盛教训。乔亲:腾讯游戏平安专家,Anti-Cheat Expert交付经理。多年游戏平安产品经营教训,目前负责ACE游戏平安的交付单干。以下为本期《CSO面对面》文字实录。 Q1:因陀罗公司过来在平安建设方面有哪些积攒? 杨金平:因陀罗公司始终非常重视游戏平安问题,个别是通过内外联合的形式来去解决游戏平安问题。“内”指的是咱们技术团队外部会有一些计划来去避免玩家舞弊,例如代码校验、前后端校验、协定加密这类型的计划。“外”指的是咱们会通过内部的一些平安产品,去解决玩家应用外挂及破解客户端等问题。 Q2:几款游戏面临的平安问题有哪些类似或不同之处? 杨金平:作为手游,广泛都会遇到一些外挂、客户端破解和服务器平安攻打的问题。针对不同类型的游戏跟玩法,可能又会遇到一些非凡的问题。例如《拉结尔》,外面会有交易系统,就要避免打金的工作室这类问题;如果像《环形和平》这类有评论的跟上传头像性能的游戏,就要重点去关注内容平安这一块的问题。 Q3:《环形和平》作为一款策略型手游,将面临哪些平安问题? 杨金平:《环形和平》公布能够预感的一些平安问题: 第一是内容平安,只有是玩家输出文本、图片,都须要通过内容平安的检测,否则危险是十分大的。 第二是外挂方面,玩家能够通过外挂去批改他本身的数值、资源来达到舞弊的成果,这是咱们不违心看到的。 第三是客户端的破解,如果客户端被破解了,就能够通过批改游戏的逻辑代码、批改游戏的资源来达到舞弊的成果。 第四就是服务器的攻打问题,如果是服务器蒙受了黑客的攻打的话,整个服务器都会瘫痪,所有的玩家都无奈进行游戏。 Q4:此次与腾讯次要在哪些畛域开展单干,出于怎么的契机? 杨金平:次要是内容平安、手游加固、反外挂这些畛域。从老本跟效率方面思考,咱们自建平安团队都不是最优解,应用第三方的平安产品会是更好的抉择,这也是咱们跟腾讯单干的契机。 Q5:之前是否应用过腾讯游戏平安的产品? 杨金平:之前在一些我的项目上跟腾讯的单干使咱们感触到了腾讯平安团队的能力之强,特地是在反外挂这一块,给了咱们比拟大的信念,所以这一次咱们找到了腾讯的ACE团队,单方一拍即合,持续开展单干。 Q6:策略类手游个别会面临哪些具体的平安问题,会产生什么结果,可否举例说明? 乔亲:首先在外挂方面,战旗类的游戏可能有一些辅助类的外挂,还有像客户端破解包这类外挂,失常玩家的游戏体验会变得极差,会导致游戏的沉闷用户的散失。内容平安方面,文本、图片这些用户本人去上传的货色,如果不去进行检测、监控的话,很有可能会造成玩家在游戏社区内体验极差。在强监管的环境下,这些问题可能会导致游戏被要求整改甚至下架。此外,也有新兴的歹意游戏行为问题,像消极较量或者是演员、送敌人上分等状况。 Q7:腾讯在游戏平安问题上有哪些解决方案? 乔亲:腾讯在游戏平安方面其实有一套十分残缺针对手游端游的计划。 首先,最根底的是对于游戏包体的加固,能够加密游戏的外围代码,校验整体的游戏包体资源,来避免破解版的问题,同时也能对后续的一些反外挂的平安计划自身造成爱护。 第二,反抗外挂方面,腾讯平安分为根底版和专家版。根底版能够去反抗市面上绝大多数的、通用的外挂,也是绝大多数游戏的抉择。专家版反抗定制类外挂,在反抗比拟强烈的场景当中可能利用到腾讯最顶级的反外挂服务。 第三,内容平安方面的服务,能够反对文本、图片、视频、音频等载体,波及唾骂、色情、广告等等内容问题的检测。 如果游戏内有经济黑产、打金工作室,咱们也有经济平安的服务,整体护航游戏的平安。这些计划都是基于腾讯20余年在游戏反抗上积攒下来的、一直迭代降级的教训而来。 Q8:针对《环形和平》的平安问题,单方如何开展单干? 杨金平:整体上,咱们基于腾讯平安团队提供的平安能力,做好游戏经营平安。第一个是内容平安方面,咱们接入了腾讯的内容平安之后,也会关注时事,如果有重大事件产生,咱们能够利用ACE团队提供给的回溯零碎做回扫,这样就可能最大水平地升高危险。第二个是反外挂方面,咱们应用ACE的反外挂检测,可能笼罩到市面上大部分的通用外挂。如果有未知外挂呈现,咱们游戏团队跟腾讯专家会再进行对于怎么解决这类型问题的深度探讨。第三个是游戏客户端的破解问题,咱们能够应用腾讯ACE的手游加固,这可能最大水平地爱护咱们的游戏客户端,给了咱们很多信念。在内容平安治理方面,咱们会继续地关注,致力打造一个清朗的游戏环境。 在反外挂方面,将来一年会有更显著的成果。除了应用ACE的技术反抗,游戏团队也会增强代码平安,往年会通过游戏设计的资源产出限度做出预警,只有玩家资源产出异样,就会马上收到预警信息,这样就能够对外挂进行解决。将来,咱们也会致力于营造良好的游戏环境,秉承匠心的理念给玩家出现一个精品游戏。

August 23, 2022 · 1 min · jiezi

关于游戏:腾讯安全联合发布2022年上半年DDoS攻击威胁报告游戏和视频直播行业是重灾区

2022年上半年,寰球重大网络安全事件频发,以DDoS为代表的攻打态势愈演愈烈,要害信息基础设施面临的网络安全局势日趋严厉,对企业平安造成严重威胁。 近日,腾讯平安联结绿盟科技、电信平安公布《2022年上半年DDoS攻打威逼报告》,从攻打频率、强度、复杂度、行业、地区等多个维度剖析了DDoS攻打的倒退态势与防护思路。《报告》指出,只管当下各国经济都经验了不同的艰难,但在工业互联网、大数据等新兴产业倒退下,DDoS攻打威逼不仅持续增长,甚至变得无处不在。 《报告》显示2022年上半年DDoS攻打威逼创历年新高,已达去年同期的3倍。针对局部业务老本受限等场景,《报告》认为端云一体防护成为抗D新思路,可解决部署在公有云或自有机房的业务蒙受大型DDoS攻打的问题。 一图读懂DDoS威逼六大趋势↓ 关注腾讯平安(公众号TXAQ2019)回复DDoS威逼报告获取原报告 DDoS攻打威逼创历年新高,游戏和视频直播行业是重灾区 近年来,新兴产业蓬勃发展,产生大量的设施接入以及带宽需要,局部资源容易沦为攻打资源,从而呈现微小危险。报告显示,2022年上半年DDoS攻打次数达到近4年新高,是去年同期的3倍,同比21年上半年增幅达到205%,七成攻打持续时间在30分钟以内。上半年,百G以上大流量攻打每天超过40次。 此外,Tb级攻打也变得更加频繁。往年4月开始,间断3个月都有Tb级攻打呈现。同时,在Tb级攻打最多的6月,腾讯云某客户甚至在1天之内蒙受了2次攻打峰值均超过1Tb的超大型DDoS攻打。这意味着,Tb级攻打已从“一年数遇”变成“一月数遇”,企业将面临更加严厉的Tb级大流量DDoS攻打威逼。 在热门行业中,游戏行业始终是蒙受DDoS攻打的重灾区,往年的游戏行业的攻打占比依然高居第一,而且相比去年占比还略有晋升。视频直播行业蒙受的DDoS攻打占比则大幅晋升并达到历史新高并高居第二,仅次于游戏行业。另一方面,教培和互联网金融等受到严格监管的行业不仅DDoS攻打比例呈现降落,攻打次数也呈现非常明显的膨胀。 在次数趋势上,海内DDoS攻打继续攀升,22年上半年增幅靠近70%。从地区看,因为东南亚区域网民数量泛滥,近年来经济倒退也较为迅猛,成为这两年DDoS攻打的热点区域。此外,日韩区域的DDoS攻打占比也较高,超过北美和欧洲,成为海内的攻打热点区域。同时因为中国企业相继扬帆出海,出海业务的凋敝也引来了黑产团伙的觊觎。 DDoS攻打伎俩一直进化,新型UDP反射攻打再度降级 随着反抗的继续进行,攻击者的攻打手法也在一直进化,领有较多攻打资源,可自主掌控攻打程序的中级和高级团伙发动的攻打占比靠近四分之一。为了进一步绕过防护方的防护策略,晋升攻打成果,DDoS攻击者将更多注意力投向了和业务流量更为靠近,辨别攻打流量更为艰巨的TCP反射/PSHACK等攻打手法中,给防护带来极大挑战。 UDP反射能够用较小的初始流量,通过反射源放大数十倍乃至上万倍,取得海量的攻打流量,因而始终以来深受DDoS攻打团伙的“青眼”。往年3月份,业界发现一部分配置存在缺点的Mitel设施,被DDoS攻打团伙用于发动DDoS攻打,其放大倍数可达数十亿倍,成为迄今为止放大倍数最大的UDP反射放大手法。 《报告》还认为,无论是攻打指令的角度,还是发动的DDoS攻打次数的角度,Mirai僵尸网络都是上半年威逼最大的僵尸网络。2022上半年Mirai僵尸网络发动了超过6成的DDoS攻打,对近两年TOP20高危破绽的利用率靠近100%。同时,Mirai还领有占据整体4成左右数量的肉鸡,比排在第二位的BillGates和排在第三位的Gafgyt的总和还要多。 重要基础设施更需器重DDoS防护,端云一体防护成抗D新思路寰球DDoS大事记 银行及金融机构、运营商及通信、机场及港口等基础设施部门,一方面,和人们的工作生存非亲非故,一旦蒙受攻打影响重大;另一方面,其攻打频率没有游戏和视频直播行业高,因而相干机构往往不足必要的平安建设和应答预案。因而,政府部门和重要基础设施更需器重DDoS防护,必要时可借助于云原生的DDoS防护产品,疾速补齐短板,轻松应答高级攻打团伙和Tb级攻打。 数字经济时代,企业纷纷上云,然而在很多场景下,出于业务合规、数据隐衷、零碎架构等方面的起因,防护产品只能部署在公有云或者自有机房上,同时因为老本估算或者技术能力的起因,本地很难建设与以后DDoS威逼相匹配的抗D能力,一旦遭逢大型DDoS攻打,就会产生微小的危险。 在此背景下,依靠端云一体DDoS防护服务平台解决方案应运而生。其脱胎于云计算的云原生平安产品,在海量业务驱动下已实现高性能高效率测验,各行各业、各种规模用户下催生了丰盛的场景反对,以及多用户共享状态下的老本劣势海量带宽储备,能均衡业务连续性、可操作性和所需老本,有效应对一直降级的DDoS攻打。 将来,DDoS攻打威逼不仅将持续增长,而且会变得无处不在。企业亟需提前部署平安体系做好防护。腾讯平安也将一直技术创新,输入“腾讯级”DDoS防护能力给到各行各业,携手生态搭档保障企业业务平安、高效、顺利运行。 寰球DDoS大事记 2022年2月腾讯平安DDoS防护团队屡次胜利防护针对DNS业务超大型应用层DDoS攻打,其中最大的一次攻打峰值达2.3亿qps,为腾讯云历史上最大的应用层DDoS攻打。 东欧多个国家的政务网站,银行和金融机构、新闻媒体等站点蒙受大规模DDoS攻打。 2022年3月业内钻研人员帮忙考察并裸露了Mitel商业电话零碎中的一个零日破绽,该破绽与也能被攻击者利用发动放大式DDoS攻打。这种类型的攻打从存在破绽的Mitel服务器将流量反射到受害者,在此过程中将发送的流量放大了22亿倍。 2022年6月腾讯云某客户蒙受2次攻打峰值均超过1Tb的攻打,最大攻打流量达到1.03Tbps,为往年上半年腾讯云上最大的DDoS攻打。

August 17, 2022 · 1 min · jiezi

关于游戏:休闲手旗游戏-大富翁-10-中文破解版

大富翁 10 分为故事模式和传记模式两种模式,热斗模式是大富翁10中退出的新模式,对应传统模式,传统模式既是大家都相熟的掷点数、买房产等游戏内容! 《大富翁10》游戏采纳回合制,初始所有玩家有肯定的贷款、现金、卡片。通过投骰子决定挪动步数。踩中无主的地产能够购买,踩中敌人的地产须要交过路费。除了地产格,地图中还有银行、新闻、商店、魔法屋等事件格,使游戏充斥变数,富裕娱乐性。正当的利用手中的卡片能够被动干涉随机性,加强策略性,使本人的利益最大化,为最终的胜利打下良好的根底。 下载:https://www.macz.com/mac/8225...

August 6, 2022 · 1 min · jiezi

关于游戏:游戏测试-游戏工具做一个可以即时修改卡牌属性的工具方便测试

本文由特尔斯特发表于TesterHome论坛,点击原文链接可查看作者的更多文章并与ta在线交换。场景:在测试战斗的过程中常常须要调数值来不便测试。比方要测某张卡牌的法术技能,间接测要等这张卡牌满蓝了放法术看成果,这样不是很不便,因为它可能在放法术之前被杀了,又或者放法术的机会不是本人想要的机会,等下次放法术时CD又比拟长,遇到这类状况都是通过改配置表后重启游戏再进行测试。这样会有两个问题:一是改配置后须要重启游戏能力失效比拟耗时;二是改了配置表测完后又必须改回去不然svn会有抵触,如果忘了改回又会出莫名微妙的BUG。 解决方案:游戏启动后工程会把配置表读取过去并赋值给对应配置对象中的各属性(对应着配置表中的各字段),之后进入战斗后又会取对应的值进行战斗计算,我在我的项目中找到了开发写的能够get 和批改各属性的办法,基于这两点在unity里写了一个工具能够即时批改各卡牌的属性并在下一场战斗中失效(局部属性能够立刻失效),重启游戏后以后批改生效,也不必改变配置表,这样能够晋升测试团队的效率。 成果展现:用EditorWindow GUI 实现的最终效果图,右边列表显示的是所有的英雄,左边显示的是对应卡牌的所有属性列表,前面的输入框中能够批改,点击下面“利用批改”按钮就可失效。 利用举例:1.比方我要测试蝙蝠的技能,我心愿它能始终放技能,只须要批改magicRestore(法力复原)改成100点击“利用批改”即可。2.再比方,我把summonCost(号召费用)和summonCd(号召CD)都改成0,这样就能够有限放蝙蝠这张卡牌。3.假如蝙蝠的一般技能normalSkill每次攻打有0.1的概率让敌人中毒,这个参数会以string模式写在normalSkill这个字段中(相似:101001;0.1),只须要把0.1改成1就能够让敌人100%中毒不便测试。 工具拓展:拓展1:基于这套思路,把一些通用的办法封装在一个基类中,而后把修建、配备、Buff、技能等等继承自这个基类也做出上述的工具,这样很多中央的测试都不便了很多。 拓展2:遍历所有的卡牌做雷同的属性批改,能够实现另外一套比拟不便的战斗测试工具,如:所有卡牌血量很大(这样根本不会死),所有卡牌攻打=100(不便测试一些按比例减少攻打的道具或BUFF)所有卡牌攻打=0(这样能够排除掉普通攻击的成果,不便间接看技能打了多少挫伤)不一一举例,大抵如图: 本文由特尔斯特发表于TesterHome论坛,点击原文链接可查看作者的更多文章并与ta在线交换。 想要学习更多对于测试/测试开发技术、测试治理和品质保障的干货常识?想要结识品质行业大牛和业界精英?欢送关注第十届中国互联网测试开发大会·深圳站 >>

July 8, 2022 · 1 min · jiezi

关于游戏:好玩的免费GM游戏整理汇总

前言我所有架设的游戏公布和更新都会实时整顿到本文 https://echeverra.cn/h5game ,倡议珍藏。 游戏全副收费带GM后盾(能够收费充值发送游戏道具),且长期保护,其中大天使之剑和梦幻西游我会始终始终保护上来。 有人问我为什么投入大量精力搞这些却不免费,我想有两个起因: 趣味使然,对游戏的青睐(但不想花钱),还有程序猿对游戏代码的探索。苦中求乐,生存原本就那么苦,我想给大家带来些许高兴,哪怕一丝也好。好啦,纵情享受游戏的高兴吧~ 游戏汇总1、【阿拉德之怒】截图: 账号注册:http://43.138.22.71/index/Reg... 安卓APK:https://cowtransfer.com/s/53f... 苹果IPA:https://pan.baidu.com/s/1vXRr... (需自行签名) GM:http://43.138.22.71/gmcdk/gm/ (受权应用) 教程:https://echeverra.cn/alade 2、【大天使之剑】截图: 链接:http://101.43.194.154:81/ GM:http://101.43.194.154:81/gm/ (游戏内置) 教程:https://echeverra.cn/angel 3、【冰雪传奇】截图: 链接:http://101.43.145.211:82/ GM:http://101.43.145.211:82/gm/ (需GM码) 教程:https://echeverra.cn/bxcq 4、【梦幻西游】截图: 链接:http://101.43.194.154:52/ GM:http://101.43.194.154:54/ (受权应用) 教程:https://echeverra.cn/xyh5 5、【雷霆传奇】截图: 链接:http://101.43.145.211:81/ GM:http://101.43.145.211:81/gm/ (受权应用) 教程:https://echeverra.cn/ltcq 6、【魔域来了】截图: 链接:http://39.105.134.68:84/ GM:http://39.105.134.68:84/gm/ (需GM码) 教程:https://echeverra.cn/myll 7、【魔塔+伏魔记+三国霸业】截图: 魔塔链接:http://101.43.194.154:84/ 伏魔记链接:http://101.43.194.154:85/ 三国霸业链接:http://101.43.194.154:86/ 教程:https://echeverra.cn/hjyx 游戏阐明所有游戏源码均可关注公众号 echeverra 回复游戏名收费获取;关注公众号可获取游戏交换群二维码,进群@群主会为你受权GM;尊重大家劳动成果,长期保护游戏,修复BUG,不会篡改游戏数据;有架设的问题同样能够找我,只有有工夫,我肯定急躁帮你答疑解惑;(⊙o⊙)…最初欢送游戏里来砍我,如果你能超过我的话,哈哈~ (完) 文章首发于我的博客 https://echeverra.cn/h5game,原创文章,转载请注明出处。 欢送关注我的微信公众号 echeverra,一起学习提高!不定时会有资源和福利相送哦!

July 2, 2022 · 1 min · jiezi

关于游戏:浅谈游戏安全

原文由陈子昂发表于TesterHome社区,点击原文链接中转原帖与作者在线交换。前言平安和测试尽管有局部重合,但因为关注方向和技术栈差别还是蛮大的。在郑重得吃完一盆货色后,写下这个对于游戏平安的帖子。当然游戏在平安方向上方方面面,只接触了其余一部分,这里浅谈下这些年的一些小储备,但只讲品种,当初翻新的很快,也不确定是否还实用了。上面很多都建设在对游戏性能业务非常理解。 客户端反编译游戏反编译意义有很多,比方是对提取资源,代码以及从新打包。个别公司没有平安防护的找第三方公司,或者公司自身会有平安防护的都会根底的防护伎俩加壳和资源混同,用非官方的伎俩进行编译,并且壳的品种很多,版本也在更新。如果不加壳,被破解难度会大幅度降低,当初局部壳对游戏影响很小,还有外挂白名单的监测性能。这里次要防护了代码和资源被破解以及二次打包危险,要取得更多信息得和理解游戏打包的形式,从下文来看,会发现这条作用又多大。 反调式模式次要是避免进行逆向剖析,目前用附加到对应游戏过程上,依据理解去花追踪的辅助工具和IDA非常弱小,只有有足够的急躁没有什么是不能够调式的。如果说有的话,能够在断点胜利时让游戏间接挂起后退出,so是否能够抉择只被特定过程加载不确定。为啥要反调式,因为有这个的存在能够实现游戏脱机破解和嗅探出游戏外部的一些关联。 游戏脱机破解先得确保游戏不被脱壳,得晓得协定类型,游戏数据包包头构造和音讯体组成,个别进行抓包剖析,当初把抓包一段段猜和拼出来的。 逻辑问题应用游戏设计或者不是实时和数据库和服务器进行同步的性能。前者比方一些流动设计不合理,被小号撸了羊毛转给大号上,靠封小号不是一回事啊,一开始就得想分明。后者比方不要被联合协定一起给做了或者脱离网络实现破绽的重要环节。 协定平安也是封包测试的一种,这个也是测试会做的,能够抓包去改,也能够写框架来测试,次要进步协定稳定性和查看服务端校验忽略,首先也是得避免脱壳。这里做起来有二个层面和一个和其余用户交互项,判断畸形边界和依据游戏数据类型设计非凡溢出的数字查看回包一个层面。第二个层面是屡次发送后,确定服务端是否有不影响宕机的谬误日志,如果谬误日志足够多也是能够影响服务器稳定性。批改数据结构有几种组合(这外面说起来简略,做起来收集数据要积淀)fuzz畸形数据+历史问题数据 ;有符号无符号数字的边界和浮点数精度问题;下个协定字段不变,参数和上个协定替换数据(须要动静才行)最初交互是最难的一种(这个模式手动搞过,但想了下开发到框架外部也不是不行)交互性实现的协定封包,1对n,进行发送不非法播送和发送非法但不该呈现的音讯,对其余n个用户的影响。 内存批改当初字面值类型在内存中分段曾经没啥用了,次要是验证客户端体现和客户端体现问题后是否会影响服务器。因为有些时候确实批改内存会让金钱数量显示上变成很多或者背包道具叠加异样,服务器不会齐全信赖客户端。之前moba游戏就有游戏呈现批改某个附加配备后,会导致1级能够打死3级野怪的状况。 硬件变速减速和变慢速,只有对其他人不偏心的都是有影响的,这部分通常是策动层面进行防护,开减速跑路,只能靠检查用户间隔最近几次坐标变换速度大于失常全buff速度的肯定倍数就踢号。 将来须要关注的1.第一个如同这个和游戏业务确没啥关系,但不得不做啊,随着等保规范的呈现有7大类,50+的查看,对于app包做一系列扫描查看工具根本是箭在弦上不得不发。能够延长开发出7-10个左右的小工具,在定序用继续集成串联起来,下个文章会介绍这些小工具的简要需要和几个点的思路。 2.压测混合会让服务器失常条件下呈现错误信息(前提是大部分状况下会return null回绝的) 3.利用失常网络回包的时候批改发包频率的工具,接口或者工具项 4.拿一款批改工具好好二次开发,跟着他人的版本走。 5.关注舆情,查看自家游戏是否被盯上了。 原文由陈子昂发表于TesterHome社区,点击原文链接中转原帖与作者在线交换。 今日份的常识已摄入!想要学习更多干货常识、结识品质行业大牛和业界精英?第十届中国互联网测试开发大会·深圳,理解下 >>

June 24, 2022 · 1 min · jiezi

关于游戏:网络游戏协议测试接口测试的一些总结

原文由碧晓寒枫发表于TesterHome社区,点击原文链接可与作者间接交换。什么是游戏协定? 协定是网络游戏前后端交互的实现形式。 游戏中协定的收发过程是怎么的? 当咱们在进行游戏的时候,咱们点击了某个按钮进行某一种游戏行为,这个时候,客户端会依照跟服务器约定好的一些规定,将咱们的游戏行为对应的申请和参数通过网络封包发送给服务器,服务端在收到这个申请后会对申请内容进行解析,以确定客户端进行的是什么游戏行为,并获取到对应的申请参数,之后服务端会依据代码逻辑来对这些数据进行相应的解决,并将处理结果同样以封包的模式返回给客户端,客户端在接管到封包之后,也会依照约定好的规定进行解析,并将解析后的后果展现给玩家。 不同的游戏有不同的协定类型和实现形式,有可能客户端发送的申请服务器并不会响应(有效申请),也有可能服务器会被动推送协定给客户端(如整点流动的开启) 常见协定1.TCP协定(传输控制协议) 市面上大部分的游戏都是应用的TCP协定,当游戏不须要十分强的实时性,可能容忍肯定水平提早的时候,举荐应用TCP协定,但如果是强实时性的游戏(如moba和fps类型的游戏),就须要应用UDP协定来尽量减少提早 长处:面向连贯(一对一,相似于打电话),传输牢靠(可能保证数据的正确性),有序(能保证数据的程序),能够传输大量数据(流模式),简略间接,无需再次开发 毛病:对系统资源的要求多,程序结构较简单,丢包重传时提早较大 2.UDP协定(用户数据报协定) 下面讲到了,一些实时性强的竞技类游戏,个别是应用UDP协定 长处:速度快,对系统资源的要求少,程序结构简略,反对一对一,一对多和多对多的交互通信 毛病:传输不牢靠(可能丢包)、无序(不能保证数据的程序),传输数据量小,可能须要二次开发来保障实时性 3.websocket协定 websocket是基于HTML5语言而诞生的一种协定,websocket跟socket不同,websocket是一个残缺的应用层协定,蕴含一套规范的API,多利用于H5和微信小游戏 而socket是对TCP/IP协定的封装和利用,它并不是一种协定,而是为了不便大家间接应用更底层协定而存在的一个形象层,将应用层之间的网络通信简单化,当socket连贯创立时,通过参数指定应用的传输层协定类型,当应用TCP协定进行连贯时,该socket就是一个TCP连贯 在websocket中,须要服务器和客户端(或浏览器)通过http协定进行一次握手动作,而后独自创立一条TCP通信通道进行数据传输 PS:如果不须要写机器人的话,其实不太须要关怀协定的实现形式,不论是TCP协定,还是websocket等等,咱们须要关注的其实是服务器对协定参数的验证。 常见的游戏协定封包形成 一般来说,一个通过socket传输的残缺的游戏协定封包,通常由包长、协定号、验证码、协定参数形成(具体我的项目可能实现形式略有不同,具体可跟开发人员求证) 包长:以后封包的字节流长度,用来判断收到的字节流是否是一个残缺的封包 协定号:客户端与服务端之间定义的具体的事件编号,通过协定号,咱们能够晓得客户端是进行了哪种操作 验证码:客户端跟服务端之间定义的一套封包有效性验证机制 协定参数:客户端与服务端进行协定传输的时候附带的理论协定内容,是某种游戏行为的具体实现,协定参数又分为多种类型,有int型,str型,list型,甚至是某种自定义的对象,这个个别须要参照具体的游戏协定文档。 ps:因为TCP非凡的流模式,某些状况下,咱们收到的封包可能是由多个封包黏连在一起的,那么在进行封包解决的时候如何判断是否是一个残缺的封包呢?就须要通过包长来判断,如果以后封包的长度等于包长的值,那么就是一个残缺的封包,否则就须要对封包进行截取拆分 为什么要测协定? 游戏中很多行为限度,是在客户端层面的,在咱们进行某些非正常游戏行为的时候,客户端曾经在逻辑层面阻止了咱们的这种行为(比方,在金钱有余的时候我去买一件物品,客户端会判断你的钱是否足够买这件物品,如果有余则会提醒金钱有余,并阻止你这次行为),但之前咱们讲了,客户端与服务端之间是通过协定封包来进行交互的,客户端阻止你的行为,只是阻止客户端本人来发送这个行为封包,那么服务端对于这种非正常状况是否有做判断呢?如果我伪造一个这样的封包,或者在网络不顺畅的时候,屡次点击购买来反复发送封包,是否能够在金钱有余的时候购买胜利呢?是否存在刷钱刷道具的破绽呢? 这个就是咱们进行协定测试的目标:验证服务器逻辑的正确性! 抓包和发包1.抓包 既然要剖析协定,那么首先就须要看到协定,看到协定那么就须要监听服务端与客户端之间的通信,并抓取游戏封包 市面上目前有很多抓包工具,罕用的游戏抓包神器WPE、其余的还有fiddler、wireshark等,应用办法这里不做过多介绍,网上很多应用教程。 2.发包 以WPE为例,在咱们抓到包之后,右键其中的一条封包抉择发送,就能够在新弹出来的界面批改封包内容,在批改好对应的参数之后,点击发送按钮,这条批改后的封包就会发送给服务端了。 开发人员个别也会留一个GM指令的接口或者其余的发包形式,通过预留接口也能够实现对服务器进行发包测试。 但一般来讲,WPE的可读性太差,GM指令的操作便利性也比拟差,倡议有能力的测试人员或开发人员,能本人写一套发包工具(相似下图),不便进行协定测试。 如何剖析协定? 咱们在协定测试的时候,次要是针对客户端对服务端发送的协定进行测试,因为游戏数据的解决大部分都是在服务器上进行的,咱们须要验证的是服务器的逻辑解决环节,而服务器返回的封包,是曾经在服务器逻辑解决实现之后的,咱们就算对这些封包进行了批改,也只是批改了客户端的显示而已,并不会对服务器的数据造成任何影响。 那么怎么样去剖析呢?请看上面这张图: 咱们玩游戏时进行的游戏行为,都是具备行为前置条件的,比方咱们买货色,那么就须要有足够的钱,想要挑战某个正本,就须要有足够的等级和挑战次数,咱们要做的,就是颠覆前置条件,在条件不满足的状况下,来发送一个失常的游戏封包。前置条件大略整顿了以下几种类型:1.等级有效 对于某些具备等级限度的玩法,在等级有余的时候进行发包验证2.工夫有效 对于某些具备时效性的玩法,在工夫范畴之外进行发包验证3.货币有效 对于须要耗费货币的玩法,在货币数量有余的时候发包验证(这里的货币指的是狭义的货币,不单指金钱,还包含正本次数等等)4.次数有效 这里指的是一些有次数限度的玩法,在次数有余的时候发包验证,如某个流动处分,每个角色只能支付1次,那么在支付完处分之后,再发送一次支付处分的封包,看服务器的解决逻辑5.前置条件有效 这个比拟非凡,举个例子:帮派每日礼包,帮派成员每日能够支付1次,前置条件就是角色必须曾经退出帮派成为帮派成员,在角色未退出帮派的时候,这个处分通过发包是否能够支付?6.参数范畴有效 这个也有点非凡,还是通过一个例子来阐明:游戏内的7天登录协定,协定参数为对应处分的天数,如玩家要支付第一天的处分,在发送协定的时候参数为1,第二天为2……第七天为7,那么0和8就是范畴外的有效参数7.非凡限度 未在上述条件中的可能存在的一些其余的限度,如在跟NPC提交工作和支付处分的时候,须要在一个无效交互范畴之内,在这里非凡限度就是交互间隔 协定测试用例设计 测试用例并没有一个固定的格局,看集体爱好,但倡议蕴含协定信息以及无效有效条件等,下图是个示例,供参考: 写在最初 协定的剖析与测试,到这里就讲的差不多了,不过还有一点须要关注的,就是协定的有效性和冗余性,这个不属于单条协定测试的领域,但却是游戏体验和性能方面很重要的一个方向。 咱们游戏的协定是通过网络模式发送的,网络是有流量老本和传输压力的,缩小有效协定和反复协定、缩小非必要的协定参数,在肯定水平上可能进步协定的传输效率,给游戏带来更好的体验。 有些公司还须要负值校验(将参数批改为正数),以及不残缺封包校验(删除局部字段),因为咱们公司后端在这块验证做的比较完善,所以我没有写,感兴趣的同学能够跟后端开发人员确认一下。 原文由碧晓寒枫发表于TesterHome社区,点击原文链接可与作者间接交换。 今日份的常识已摄入!想要学习更多干货常识、结识品质行业大牛和业界精英?第十届中国互联网测试开发大会理解下 >>

June 15, 2022 · 1 min · jiezi

关于游戏:游戏兼容性测试通用方案

原文由5t5发表于TesterHome社区,点击原文链接可与作者间接交换。本次帖子单刀直入,间接说点。 兼容性存在的意义很简略,就是为了把笼罩遍及公众的机型上我的项目裸露进去的问题全副扼杀掉,无效的改善/防止用户散失。 兼容性解决哪些问题解决适配问题适配产生的问题有很多,如:1、屏幕适配,迭代过程中的测试机显示失常,过大或过小的屏幕带来UI上可能存在较为显著的噪点/黑线,很影响好看;2、分辨率适配,诶?这跟屏幕适配不一个意思?必定不是一个意思了啦,分辨率适配,是笼罩咱们常说的(1920x1080)这一类的,次要是裸露咱们常说的锚点问题,因为当初的我的项目都做了UI自适应/等比例适配的性能,查看在各不同的分辨率下显示是否失常,影响好看,改,影响应用,更得改;3、零碎适配,此零碎适配次要针对适配的是较新/最新的平台零碎(Android/iOS/鸿蒙)等,各大厂商基于android魔改的定制零碎有时降级后/原生Android降级之后也会存在一系列的问题,裸露crash,anr,闪退等问题,发现均列为高优先级进行解决,它代表的是一众此类机型应用均存在问题的;4、屏显适配,也有其余叫法,次要意思就是当初的屏幕显示规格存在水滴屏,折叠屏,刘海屏等等一系列奇形怪状的屏幕,他们的分辨率可能很正统,没有分辨率问题,然而却因为非凡的屏显形式对应UI自身有遮挡,显示不全对操作/好看影响较大会针对性机型去进行定制解决;5、品牌适配,这块多少有一些跟零碎适配有相耦合的中央,笼罩当初尽可能多的手机品牌,这个不过多解释,依据公司需要还有当初的市场份额酌情去笼罩品牌方,【华为,vivo,oppo,魅族,小米...】;6、网络适配,联网形式的适配,没听错,联网形式按当初来说有2G/3G/4G/5G/wifi等等,一系列的网络链接形式,而挪动平台自身网络器件也存在差别,会碰到一些手机存在同4G/运营商雷同然而网络提早比照之后有较大差别,重大的手机还有断流等问题,也能发现一些乌七八糟的问题,晓得即可,个别不染指,因为迭代过程中,弱网测试还有运营商抉择时会消化挺多。 兼容性计划如何选型接下来咱们来看看如何进兼容性计划的选型,又是测试善于的兼容性测试场景设计。针对下面要解决的问题咱们一一针对性的抉择指标机器而后执行即可;但不同的是咱们要考量到企业/部门投入的精力来进行,部门测试机选型不可能把下面的问题全副笼罩掉,那咱们就要按照现有的市场份额去把所有的机器摘出来作为测试机来做部门内的兼容性测试机;能够了解为: 参考的一些市场份额查问链接:百度流量研究院当然不止这一个,感兴趣的也能够贴一些在评论里,感激分享了哈; 兼容性计划传统计划:测试部门选了一堆测试机 → 拿来跑兼容性(手动跑)→ 挨个儿跑完当前 → 我的项目都能跑起来并且没有崩或者打不开的状况 → 实现,写报告。而后报告外面写一下测了哪些机器,体现如何,通过,搪塞,极其的搪塞; 中规中矩:有理有据的选了测试机 → 手动跑兼容性测试(手动跑)并且专门要了挺长的周期去进行兼容测试 → 周期内认真跑每个机器 → 有对应的兼容性通过准则(场景设计,跑通本人设计的场景之后才算该机器通过兼容性测试) → 实现,写报告。这样比照进去以上的长处突出的是:1、有正当的兼容性测试场景来束缚测试机上的体现;2、有正当的周期去安顿兼容性测试,颗粒度能放小,能够了解为每个机器能跑肯定长的工夫,保障肯定的品质;3、测试机的选型也能够体现报告中,显得更业余; 芜湖腾飞:这个就高级一些了,当初有条件的企业会外部部门通过一轮兼容性测试之后上云,无论是自研云/三方云/公司搭建近程机柜均可,来主动跑兼容性测试,这样会更高效,这个就不多解释了。 延长兼容性测试过程中:1、有新机器上市/新零碎大版本更新的机器,能买则买,不要给公司省钱;2、平时的兼容性测试计划毕竟是通用执行,开始就做好部门本身的兼容性计划执行形式,不要长期抱佛脚,虽说花不了多少工夫,然而这种每次跑个兼容慌乱的感觉并不好;3、平时的零碎能不降级不要降级,不要root,root之后的权限已与平时用户应用的机器不同,进行兼容测试时前面测试过程权限提醒体现会有不同,会失真;4、公司没有资管组的话,就要做好平时测试机的爱护还有进行测试前一天尽可能的保障手机的电量充盈; 想一想大略就这些,还有什么没想到的欢送大家在TesterHome原贴沟通哈。

June 13, 2022 · 1 min · jiezi

关于游戏:手游前端性能测试

原文由黑子发表于TesterHome社区,点击原文链接可与作者间接交换。导读目前游戏行业曾经出现精品化状态,行业对测试岗位的要求也越来越高,前端性能测试仅仅是用工具测试出相干数据(自动化测试即可满足,包含自动化脚本,或者自动化录像),并告知研发,曾经不能满足测试要求。所以性能测试岗同学须要具备更多硬性技能,本篇文章适宜性能测试老手;别离从测试场景,测试工具,而后测试数据概念,之后到和开发、美术同学在优化中的沟通,以及最初罕用的优化办法策略,逐个开展介绍。 一、测试场景1.导读前端性能测试,关注用户在玩游戏过程中的性能方面的体验,包含是否卡顿,是否crash,是否手机发热,是否耗电过快等,不论用户的手机是高配机,中配机器,还是很渣的低配机器,都须要关注用户性能体验(有同学问,为什么还这么关注低配机用户的感触,他们能充钱吗?游戏是一个生态,比方5%的RMB用户须要残余95%的屌丝用户来烘托;另外游戏口碑等都须要思考所有用户的体验等)。 2.卡顿游戏晦涩是游戏比拟根本的性能指标,尤其在外围玩法的时候。从测试角度看,更多关注游戏的fps数据、卡帧率、bigjank值等 3.crash用户不心愿游戏过程中呈现crash状况,测试关注crash率数据 4.发热手机发热之后除了体感不好,另外不同的手机厂商会抉择降频或者锁核,从而导致游戏卡顿。手机发热起因较多(比方运行高功耗app、在充电中、不良电池、爱护壳不能散热、所处环境温度低等),这里关注的是怎么升高游戏的功耗,其实更多是怎么升高GPU和CPU的使用率 耗电过快手机电池毫安数自身就是手机的重要指标,耗电快无疑是硬伤。 二、测试工具介绍1.perfdog腾讯出品的性能工具,无需root或者越狱。PerfDog反对挪动平台所有应用程序(游戏、APP利用、浏览器、小程序、小游戏、H5、后盾零碎过程等)装置,应用教程等参考官网具体介绍:https://bbs.perfdog.qq.com/ar... 2.UWA针对unity和unreal引擎的游戏或者VR产品提供服务,包含资源监测(动静和动态,收费),性能诊断和优化(免费),lua性能剖析,自动化测试,社区问答等UWA GOT是UWA推出的本地性能测评工具,须要装对应sdk,无需越狱或者root。UWA成立2015年,目前积攒了不少用户和测试数据,是目前比拟支流的测试工具和社区。装置和应用,官网具体介绍:https://uwa-public.oss-cn-bei... 3.UPRUPR开始于这两年(2019开始,wetest的性能之前和untiy配合,起初wetest自研了Perfdog,游戏性能移交给unity本人做了),目前UPR在积攒用户中,所以是收费的,而且技术支持比拟好(有什么问题反馈比拟及时,甚至会现场解决),UPR的一些性能还在欠缺和开发中URP分手机和桌面版,能够带sdk和不带sdk,当然,没有继承UPR sdk的测试数据会少。装置和应用,参考官网介绍:https://upr.unity.cn/instruct... 4.其余测试工具比方腾讯GT,网易的Emmagee,以及google的工具等等 5.自研测试工具对应一些厂商,比方调用引擎给的接口等办法,来获取相干性能数据,来实现工具的目标。 三、测试数据概念介绍1.内存个别关注:①pss内存(理论应用的物理内存)的大小(ios和andriod机器个别都是分三档机器,每档机器的pss内存规范不一样,规范数值随着硬件设施晋升也在逐步而变高)②内存透露(内存透露后,内存越来越大,可能会因为申请分配内存越来越慢导致的卡顿,或者crash等)③内存资源重复率:资源重复是指内存中同一时刻,存在两份或以上雷同的纹理、网格、动画、音频等资源。个别是雷同的一份资源被打包到多个AB包中,如果这些AB都被加载进内存,内存中就会存在多份雷同的资源 2.bigjankPerfDog计算方法:同时满足两条件,则认为是一次卡顿Jank.1、 以后帧耗时>前三帧均匀耗时2倍。2、 以后帧耗时>两帧电影帧耗时(1000ms/24*2=84ms)。同时满足两条件,则认为是一次重大卡顿BigJank.1、 以后帧耗时>前三帧均匀耗时2倍。2、 以后帧耗时>三帧电影帧耗时(1000ms/24*3=125ms)。 3.FPS帧率,规范要求比方:外围游戏场景默认要求90%数值都不低于25FPS; 晦涩度比方:外围游戏场景,默认要求卡顿率不高于2% 4.CPU比方:综合CPU均匀占用(90%)小于60%,单核CPU峰值占用(90%)小于90%另外要关注单核CPU使用率,以及是否所有内核都在应用,以及应用是否均匀等还有CPU的曲线是绝对平滑,还是锯齿重大 5.工具中罕用数据cpu:①frameTime:同一帧的耗时②Rendering Time:以后帧渲染耗时;drawcall越高,这部分开销越大③ScriptTime:以后帧函数耗时④PhysicsTime:以后帧物理耗时内存:代码中的内存 –Mono内存(mono内存,内存池,只增不减);资源中的内存占用 –Native内存①ReservedMono:个别是脚本调配的内存②pss内存:个别用于定位多局战斗、场景跳转、关上敞开UI中是否有内存透露③total_reserved内存:unity_reserved内存+GFX内存+FMOD内存+Mono内存+Profiler内存④mono reserved:调配的mono内存(绿线局部),只升不降,须要严格控制。mono内存示意游戏中脚本调配的内存⑤gfxdriver_reserved:示意渲染模块的内存,如果比拟高须要对纹理资源和Shader进行优化。⑥fmod_reserved:示意音频模块的内存,如果比拟高须要对音频资源进行优化⑦内存资源重复率:资源重复是指内存中同一时刻,存在两份或以上雷同的纹理、网格、动画、音频等资源。个别是雷同的一份资源被打包到多个AB包中,如果这些AB都被加载进内存,内存中就会存在多份雷同的资源 其余数据能够参考:https://segmentfault.com/a/11... 四、研发(开发和美术)概念介绍1.导读在和研发同学沟通时,须要对研发上的一些概念,以及罕用的优化思路,办法有所理解,能够依据问题数据,提供一些优化倡议。 2.图集atlas是通过专门的工具,将多张图片合并成一张大图,并通过 plist 等格局的文件索引的资源NGUI强调图集,图集要布局好,否则常常会呈现图集不够用等问题;UGUI弱化用户对图集的概念,在打包的时候主动生成图集。各有优缺点目前研发团队中次要应用的则是Unity本身的 UGUI零碎 和Asset Store上的 NGUI插件 3.画布canvasCanvas画布是承载所有UI元素的区域。Canvas实际上是一个游戏对象上绑定了Canvas组件。所有的UI元素都必须是Canvas的自对象。如果场景中没有画布,那么咱们创立任何一个UI元素,都会主动创立画布,并且将新元素置于其下 4.Collider碰撞体 5.网格meshmesh就是咱们所说的三角网格。三角网格就是由一系列三角形组成的多边形网格,次要用于模仿简单物体的外表,事实上游戏开发过程中美术给咱们的人体、车辆模型都是由一个或多个三角网络(mesh)组成的。工具:mash baker,可能无效合并网格以及网格所应用的材质,来无效缩小渲染批次所带来的开销 6.纹理Texture纹理即“纹路”,每个物体外表上不同的样子,譬如说木头的木纹状。纹理就是一段有法则、可反复的图像 7.贴图 Map贴图是图,最简略的模式是ps之类的软件做进去的一张图,这些图在3D中用来贴到物体的外表,用来体现物体的“纹理”最有名的是lighting map,即光照贴图, 光照贴图是生成或者绘制进去,用于物体外表模仿光照成果的 8.材质Material材质次要是用来体现物体对光的交互(反射、折射等)性质的。譬如金属对光的反射和毛毯对光的反射性质齐全不一样,那么对3D程序来说,这样的差异就通过材质这个属性来计算出不同的色彩。材质,实质是数据集:体现物体对光的交互,供渲染器读取的数据,包含贴图,纹理,光照算法等 9.着色器shader实际上就是一小段程序,它负责将输出的Mesh(网格)以指定的形式和输出的贴图或者色彩等组合作用,而后输入,模仿真实世界中的光影成果,这个成果是由物体外表材质、灯光、观察者的视角等多种因素独特决定的Unity中所有的渲染都应用着色器实现 10.材质球U3D引擎中材质的预览形式为一个球体,材质球是什么样子,通常由贴图决定纹理---贴图--->通过shader---->材质球--->材质球贴到具体的模型上,生成模型1,模型2...... 11.Alpha通道指一张图片的通明和半透明度对于16bit存储的位图,每5个bit别离示意红黄蓝,最初一个bit是示意阿尔法通道,0或1,所以要么通明要么不通明;对于32位存储的位图,每8个bit别离示意红黄蓝,最初8位示意阿尔法通道,就有256种通明可能 12.draw call简称DC,由CPU收集美术的资源信息,传递给GPU,告诉GPU进行一次渲染过程叫DrawCall。是cpu告诉gpu干活的一种命令 为什么drawcall多了会影响帧率 在每次调用Draw Call之前,CPU须要向GPU发送很多内容,包含数据,状态,命令等。在这一阶段,CPU须要实现很多工作,例如查看渲染状态等而一旦CPU实现了这些筹备工作,GPU就能够开始本次的渲染。 GPU的渲染能力是很强的,渲染300个和3000个三角网格通常没有什么区别,因而渲染速度往往快于CPU提交命令的速度。如果Draw Call的数量太多,CPU就会把大量工夫破费在提交Draw Call命令上,造成CPU的过载。因而造成Draw Call性能问题的首恶是CPU提交大量很小的Draw Call会造成CPU的性能瓶颈,即CPU把工夫都破费在筹备Draw Call的工作上了。把很多小的Draw Call合并成一个大的Draw Call,这就是批处理的思维。 13.渲染通道pass每个pass都会耗费一个drawcall,在满足渲染成果的状况下,尽可能减少渲染通道的数量 14.Lightmap其实就是打了灯光的贴图,通常是对游戏场景中动态物体上,贴了一层带灯光效果的贴图长处:省去了很大光照相干的计算,缩小了性能的耗费毛病:多了一层纹理,咱们应用了灯光贴图必定多了一层纹理。另外动态贴图无奈扭转灯光的方向,比方灯泡被用户打碎了,灯光效果还在,理论要干掉 15.mipmap也是贴图。应用Mipmap后,贴图会依据摄像机间隔的远近,抉择应用不同精度的贴图Mipmap技术有点相似于LOD技术,然而不同的是,LOD针对的是模型资源,而Mipmap针对的纹理贴图资源毛病:会占用内存,因为mipmap会依据摄像机远近不同而生成对应的八个贴图,所以必然占内存!长处:会优化显存带宽,用来缩小渲染,因为能够依据理论状况,会抉择适宜的贴图来渲染 16.LOD在游戏场景中,依据摄像机与模型的间隔,来决定显示哪一个模型,个别间隔近的时候显示高精度多细节模型,距离远的时候显示低精度低细节模型。长处:可依据间隔动静地抉择渲染不同细节的模型,从而进步渲染的效率毛病:减轻美工的累赘,要筹备不同细节的同一模型,同样的会略微减少游戏的容量 17.烘焙物体外表的反光或者暗影,记录到模型里,造成新的贴图,运行的时候,显卡和CPU不须要进行对环境光成果的运算了。实际上就是lightmap的生成过程 18.面数Tris模型上的三角形面数,对应不同类型的模型,个别有不同的规范,比方小怪多少面,精英怪多少面,boss多少面,随着游戏制作精度和硬件的进步,面数的规范也随着变多 19.bloomBloom放在前期特效中,是实现光线绽开,灯光溢出的成果特效有有2个最常见的前期:Color Grading(调色) 和 Bloom(泛光/辉光)参考链接:https://zhuanlan.zhihu.com/p/... ...

May 18, 2022 · 1 min · jiezi

关于游戏:游戏行业弹性计算最佳实践

简介:本篇次要介绍三大游戏场景:游戏服务、大数据经营、云游戏的架构特点,以及基于这些场景下的阿里云游戏行业计算基础设施选型与部署计划。 文丨寻野,阿里云弹性计算产品解决方案架构师 摘要:游戏始终以来是互联网畛域的一大热门行业,随着挪动互联网的衰亡,手机和Pad的遍及,游戏从晚期PC时代的页游、端游,逐步倒退到手游占据次要趋势。近几年,游戏厂商在一直摸索云游戏,心愿为玩家带来更顺滑的体验,而上云曾经成为游戏行业的不二抉择。 如何让游戏在云上运行得更稳固、晦涩、高效和经济?作为国内最大的云厂商,阿里云为游戏厂商提供最佳上云解决方案。本篇次要介绍三大游戏场景:游戏服务、大数据经营、云游戏的架构特点,以及基于这些场景下的阿里云游戏行业计算基础设施选型与部署计划。 一、 游戏行业的重计算场景游戏行业是重算力耗费的场景,其中三个算力需要比较突出的场景是:游戏服、游戏经营、云游戏。 l 游戏服 游戏品类繁多,本文将重点介绍游戏服中计算密集的两大类型:MMORPG类型和MOBA/FPS类型。 l 游戏经营 目前游戏行业的几大趋势包含:品类交融玩法一直叠加、社交类大DAU类游戏的趋势、以及精品化游戏趋势,这其中都须要大量的数据经营剖析工作,以及帮忙游戏公司晋升用户留存、优化游戏中的玩法策略等。 l 云游戏 本篇将会联合以上三个场景具体介绍弹性计算产品的实际。 二、 游戏服业务与技术特点1. 游戏服业务特点从游戏品类层面,有RPG、FPS、MOBA、SLG等品类,每一个品类从游戏自身的玩法来讲都有各自的特点。 从技术架构角度登程,因为游戏的强交互性特点,游戏技术架构与其它互联网利用有肯定区别: a. 长连贯 游戏通常是须要长连贯的,也就是从一个客户端到服务端的长连贯,不便对玩家的行为进行及时的反馈和推送; b. 低提早 因为游戏的強交互性特点,无论在PVE还是PVP中,都须要及时的反馈,相似FPS、MOBA类等多人对战类游戏就是典型的PVP,对网络提早和抖动的容忍度很低,所以要求低提早; c. 频繁写 因为游戏中须要高频率记录玩家信息、操作的特点,这些记录在玩家数量大的时候比方典型的MMO游戏,须要频繁写入数据,并发的读写就十分高,这类场景须要较强的IO性能; d. 高性能 游戏强交互性、低提早的特点,在当今逐步分层解耦架构的同时,也须要保障游戏玩家的交互成果,会进一步依赖到底层服务器的強计算能力; e. 高弹性 游戏业务的周期特点和峰谷特点,往往须要十分高的弹性能力。 2. MMORPG弹性计算产品实际RPG(角色扮演游戏)是游戏的一个大品类,玩家模仿一个虚构人物在游戏中体验和玩耍。 a. MMORPG游戏服的特点 MMO:海量玩家高并发场景,高计算性能、强稳定性;网关服:网络包转发、高吞吐,高网络PPS;核心服:分钟级异步入库,写频繁、高IOPS; b. 弹性计算产品实际 基于以上特点,MMORPG弹性计算产品的选型也要依据场景来辨别: MMO:高计算性能,七代Ice Lake ECS实例,晋升性能体验;网关服:高网络PPS,倡议6代加强、7代实例;异步入库与日志:对于磁盘读写性能要求高的场景,应用不同级别ESSD云盘,防止磁盘读写瓶颈;高效运维:对于有分辨别服,须要疾速的开服合服等场景,可通过CADT云速达、ESS弹性伸缩、OOS编排等工具(3)可通过CADT云速达、弹性伸缩、运维编排等云上运维工具搭配产品应用可能晋升运维效率。3. FPS、MOBA弹性计算产品实际像FPS/MOBA这类竞技游戏,交互更强,提早更敏感。 a. 对战类游戏特点 低提早:游戏中大量密集计算场景;超高性能:大地图战斗、小房间战斗;弹性房间:战斗房间滚动式开关。b. 弹性计算产品实际 部署状态:平台性能核心,战斗服区域部署;低提早高性能:高主频7代、7代计算型实例,更高的单核性能提供更好的战斗成果;弹性房间:战斗房间类游戏,因为业务自身峰谷个性,灵便的应用云上资源的弹性能力,往往会较好的优化整体的资源应用老本,ESS弹性伸缩+云监控CMS+节俭打算,达到老本最优解;容器化:ACK容器服务+ECI弹性容器实例,更进一步开释了根底资源的灵活性和弹性能力;平台业务:这部分更靠近于通用的互联网技术架构,如精彩实时录制场景是典型的高清画质+实时录制的需要,往往会基于GPU能力构建,抉择弹性vGPU/cCPU产品,实现更细粒度的应用云上的GPU资源。三、 游戏大数据弹性计算实际 游戏全生命周期的业务体现,如用户留存、经营转化、游戏内玩法策略等都是游戏厂商十分关注的业务撑持数据。 大数据是以后游戏业务经营、经营等次要的技术手段,得益于大数据开源社区技术栈的丰盛度,大数据的技术抉择十分多,可选计划需依据本身我的项目就地取材。 1. 游戏大数据业务特点数据场景:业务经营数据、游戏内容数据、平台技术数据、平安经营数据;技术栈抉择:技术抉择、部署抉择、运维压力;效力问题:业务性能、老本累赘、弹性需要。 2. 弹性计算实际a. 基于云上产品 不同的游戏公司处在不同的数据建设阶段,会有不同的抉择偏向,包含在IDC自建、基于云根底资源自建、云上EMR套件托管、以及利用更多云上大数据类产品,进步业务效率升高运维累赘,比方:抉择SLS数据采集;Kafka数据网关通道;通过Flink做实时计算;通过Elasticsearch或Clickhouse做数据的聚合剖析; b. 选型思路开释效力 具体计算存储的产品选型也须要在业务需要、性能、效率、老本多方面做均衡。如实时计算/近实时计算场景,Flink具备高性能、低提早特点,须要计算和网络性能,优先举荐选型七代主售实例或6代加强实例;而对于Remote Shuffle Service两头处理结果多的场景,须要大量的join类场景,能够抉择局部通过内存去解决;离线数据计算和存储可能会抉择SATA本地盘实例;至于SSD本地盘、SATA本地盘、ESSD云盘,须要综合来看计算、网络、存储性能和容量以及综合老本来抉择; ...

May 16, 2022 · 1 min · jiezi

关于游戏:做个猜拳小游戏

摸鱼无聊,于是做了个猜拳小游戏,这个游戏,大家肯定不会生疏,“剪刀石头布”。 思路如下:咱们简略整顿思路如下: 游戏玩家是用户,对手是咱们的计算机。用户先出,计算机后出,而后比拟后果,输入答案,思考能够始终玩上来,而不是只玩一局就终止,因而咱们设计一个循环,完结本局后,持续从新开始。 int main(){ char gamer; // 玩家出拳 int computer; // 电脑出拳 int result; // 比赛结果 // 为了防止玩一次游戏就退出程序,能够将代码放在循环中 while (1) { printf("这是一个猜拳的小游戏,请输出你要出的拳头:\n"); printf("A:剪刀\nB:石头\nC:布\nD:不玩了\n"); scanf("%c%*c", &gamer);这里咱们采纳的scanf输出的模式,之所以用abcd示意是为了不便计算机了解。到了这一步,咱们天然思考应用swtitch函数对后果输入,同时,咱们也要思考,既然是剪刀石头布游戏,咱们须要让游戏偏心,这时候,咱们须要用srand函数取随机值srand((unsigned)time(NULL)); 好了,有了这个函数的帮忙,咱们就能够很好的失去电脑的输入后果。这时候,咱们遇到一个问题,还记得咱们最开始是用的char示意咱们的出拳吗,而出拳后果是数值,因而咱们须要用(int)对它强制转换。 最初,别忘了用system(cls)函数清屏,这样不便下次游戏。 咱们的残缺代码如下: include <stdio.h>#include <stdlib.h>#include <time.h>int main(){ char gamer; // 玩家出拳 int computer; // 电脑出拳 int result; // 比赛结果 // 为了防止玩一次游戏就退出程序,能够将代码放在循环中 while (1) { printf("这是一个猜拳的小游戏,请输出你要出的拳头:\n"); printf("A:剪刀\nB:石头\nC:布\nD:不玩了\n"); scanf("%c%*c", &gamer); switch (gamer) { case 65: //A case 97: //a gamer = 4; break; case 66: //B case 98: //b gamer = 7; break; case 67: //C case 99: //c gamer = 10; break; case 68: //D case 100: //d return 0; default: printf("你的抉择为 %c 抉择谬误,退出...\n", gamer); getchar(); system("cls"); // 清屏 return 0; break; } srand((unsigned)time(NULL)); // 随机数种子 computer = rand() % 3; // 产生随机数并取余,失去电脑出拳 result = (int)gamer + computer; // gamer 为 char 类型,数学运算时要强制转换类型 printf("电脑出了"); switch (computer) { case 0:printf("剪刀\n"); break; //4 1 case 1:printf("石头\n"); break; //7 2 case 2:printf("布\n"); break; //10 3 } printf("你出了"); switch (gamer) { case 4:printf("剪刀\n"); break; case 7:printf("石头\n"); break; case 10:printf("布\n"); break; } if (result == 6 || result == 7 || result == 11) printf("你赢了!"); else if (result == 5 || result == 9 || result == 10) printf("电脑赢了!"); else printf("平手"); system("pause>nul&&cls"); // 暂停并清屏 } return 0;}

May 11, 2022 · 1 min · jiezi

关于游戏:阿里云架构师解读四大主流游戏架构

简介:游戏行业是阿里云最早聚焦的行业之一,近年来游戏行业的变动、云计算产品技术的变动都与日俱进。随着行业业务的变动、技术架构的演进以及阿里云产品的迭代演进,整体的产品技术选型在不同的游戏场景、业务场景也不尽相同。本文将聚焦阿里云弹性计算产品在游戏行业的计划实践经验。 一、概述游戏行业是阿里云最早聚焦的行业之一,近年来游戏行业的变动、云计算产品技术的变动都与日俱进。随着行业业务的变动、技术架构的演进以及阿里云产品的迭代演进,整体的产品技术选型在不同的游戏场景、业务场景也不尽相同。本文将聚焦阿里云弹性计算产品在游戏行业的计划实践经验。 二、游戏行业场景介绍以后,游戏行业的各种场景和行业倒退密不可分。简略回顾电子游戏的倒退,80年代的黑白机,90年代的PC单机游戏,00年代前夕随着互联网的倒退网络游戏开始流行,2010年后随着挪动设施的逐步遍及,手游在国内开始衰亡。 从游戏终端来区别,次要有:主机游戏(往往是3A游戏)、PC游戏、移动游戏和网页游戏等。目前呈现跨平台多端游戏,以及云游戏化的趋势。 对于游戏的品类区别会有十分多的维度:RPG(角色扮演)、MOBA类、竞技类、FPS(射击类)、休闲类、卡牌类、棋牌类、SLG(策略类)等等。目前有多品类交融玩法裂变的趋势。 随着国内防沉迷、版号因素,近年来游戏行业诞生了越来越多的精品游戏,出海全球化乃至区域化,以及整体存量用户增速放缓,长线经营、精密经营以及私域社区等经营形式也在悄悄变动。 三、游戏行业技术架构介绍不同的业务场景技术架构不尽相同,如竞技类游戏和卡牌类游戏对计算的需要就有所区别,云游戏与惯例的网络游戏架构也有所区别。这里次要从游戏服和游戏平台、大数据、云游戏这四个目前常见的场景简略介绍其架构。 1 游戏服架构与产品实际业务场景 游戏服,从游戏类型来看有RPG、FPS、MOBA、SLG、棋牌、休闲等等;从游戏平台来看通常有主机、手机、PC等;从业务发行来看有寰球、国内、海内,从部署架构来看有集中部署和分区部署;从技术架构来看,游戏行业也有逐步分层解耦的趋势,但与互联网利用相比,有肯定其独特性。 技术特点 因为游戏的强交互性特点,游戏技术架构与其余互联网利用相比有肯定独特性。游戏须要放弃会话连贯,也就是从一个客户端到服务端的长连贯,便于对客户端中玩家的操作、行为等进行及时的反馈以及推送给独特游戏或对战的其余玩家,所以游戏广泛对网络品质更加敏感,网络品质较差的状况会使长连贯断开或重连,引起玩家掉线。游戏也须要放弃会话的状态,既服务端会放弃一份玩家的实体,当玩家进行操作时,下次通信的数据会依赖之前的通信的数据,这也是一些MMO(多人在线)大型游戏对网络吞吐性能要求较高的起因之一。再比方FPS、MOBA类等多人对战类游戏,交互性更强,对网络提早容忍度更低,要求低提早。因为游戏须要比拟高密度的记录玩家的操作以及后果,所以有频繁写入数据的特点,这类场景须要较强的IO性能。因为游戏强交互性、低提早的特点,其技术架构也和互联网利用不同,在逐步分层解耦的同时,须要保障游戏玩家的交互成果,同时也会依赖到底层服务器的计算能力。 这些都是游戏场景普遍存在的特点:长连贯放弃会话、放弃状态、低提早网络、高IO吞吐、高计算性能。 部署计划 游戏的部署架构会联合游戏业务特点、游戏经营需要来制订游戏服务,有分辨别服、全区全服业务逻辑,分辨别服还是全区全服,最大的架构差别在于数据是不是一套。而从部署形式看,次要是集中式部署和分区域部署。 集中部署就是不管游戏玩家在哪里,游戏服务集中在一个区域,适宜对网络提早要求通常不高的游戏类型,如休闲类;分区部署是指游戏服务器依据游戏玩家地区散布,分区域部署,不便就近接入,适宜对网络提早要求较高的游戏类型,如MOBA、FPS类。 典型架构 i. MMORPG类游戏架构介绍 MMO类有高并发特点,大量玩家并发的高计算量负载对服务器的计算能力和稳定性有着极高的要求。同时MMO类游戏有着比拟强的PVE或PVP个性,对网络提早的容忍度较低。 其中网关服务器负责所有网络数据包的转发,通常是网络负载较集中的点,对于网络吞吐能力要求较高。单个游戏区承载玩家数量高,逻辑服务器通常依照场景地图来划分,规模再大会通过分区的形式实现。 数据中心服务器负责缓存玩家数据并异步入库,保障玩家客户疾速获取和写入数据,对于可用性要求较高,须要配合应用层实现数据容错机制。 日志服务器承载了大区所有业务行为的日志收集及解决的压力,对磁盘写入性能要求较高,通常采纳多台分组形式实现。 弹性计算产品倡议: (1)MMO游戏服性能与稳固需要,倡议应用最第7代ECS实例,依据理论需要选型c计算型(CPU与内存配比1:2)/g通用型(1:4)/r内存型(1:8),Intel Ice Lake 2.9GHz基频3.5GHz睿频提供超高性能,能更好地优化游戏体验。 (2)异步落库以及日志服务器,对于磁盘读写性能要求高的场景,倡议云上应用ESSD PL 0/1/2/3依据业务性能须要抉择,防止磁盘读写瓶颈。 (3)在游戏日常版本更新中,须要各个地区Region镜像的疾速复制,基于ESSD快照异地复制的能力,可能晋升镜像复制效率。 (4)分辨别服等场景往往须要疾速地开服滚服合服,通过CADT云速搭、ESS弹性伸缩、OOS运维编排、ROS资源编排等云上运维工具搭配产品应用,可能晋升云上运维效率。 ii. FPS、MOBA类游戏架构介绍 MOBA类游戏次要包含PVP零碎、PVE零碎、游戏平台等几个次要局部,其中PVP战斗是MOBA/FPS游戏的外围。 PVP、PVE、游戏平台性能部署于同一VPC中,形成游戏大区;战斗服务器(往往)独自跨地区部署。 游戏客户端首先接入到登录服务器中,实现登录认证、计费等游戏平台逻辑。为防止单点问题,所以游戏平台服务往往须要高可用计划。可利用云上高可用计划,包含便捷的运维工具满足业务高可用需要。 FPS/MOBA竞技游戏,往往对提早特地敏感,能够设想,竞技类游戏中对战的游戏场景:玩家操控人物,在地图里步调飘逸,枪声密集,每一颗子弹都是一次工夫加上空间的矢量计算,而且须要在主过程中实现计算,那么算力需要就随着房间玩家数量回升而指数爆炸,5V5的房间和大房间100人(吃鸡)对算力的需要齐全不同。 游戏这部分重算力场景,举荐阿里云7代高主频或七代实例,更高的单核性能提供更好的战斗成果。 战斗房间类游戏,因为业务自身峰谷个性,灵便地应用云上资源的弹性能力,往往会较好地优化整体的资源应用老本。阿里云弹性计算自身提供了非常灵活的付费形式,包含惯例的按量实例、包月包年实例、以及通过节俭打算/预留实例券去抵扣按量实例资源,兼顾资源灵便应用的同时达到更优的老本。 此外,为更进一步开释开发运维的效率,以后一些游戏也采纳了容器化技术架构,阿里云的ACK+ECS/ECI弹性容器实例组合搭配应用,更进一步开释了根底资源的灵活性和弹性能力。 2 游戏平台业务场景 游戏平台(不限于FPS、MOBA类)次要提供的服务:官网、客服、注册、登录、充值、兑换、商城、推送、布告、社区、SDK及邮件、短信等公共服务;包含内容审核、视频录制、弹幕、转码、剪辑、RTC这些业务须要的根底服务,以及运维监控、公布平台、测试平台这些运维等平台服务。 这部分更靠近于通用的互联网技术架构,以服务为颗粒度解耦,接入->网关->利用->数据库。 技术特点 这往往通常须要构建高可用基础架构来晋升稳定性,业务突发期往往须要肯定的弹性能力。相比于游戏服务这部分容器化就更加遍及,也更容易通过云上的比方弹性容器实例去应答流量峰值场景。在视频录制场景,对实时性要求较高时,往往会基于GPU能力构建,这部分阿里云也提供了vGPU/cGPU能力,开释GPU的灵活性。 3 大数据架构与产品实际业务场景 游戏全生命周期的业务体现,用户留存、经营转化、包含游戏内玩法策略等都是游戏厂商十分关注的业务撑持数据。 大数据是以后游戏业务经营、游戏经营次要的技术手段,次要面向平台数据经营、游戏数据分析、广告转化剖析、平安经营剖析等游戏外围经营场景。不同的场景对实时性要求不同,实时查问检索通常是经营剖析、客户受理、玩家监测、在线等场景;离线报表通常是玩家行为剖析、用户画像、特色开掘等场景。 总体而言,实时性业务更多是业务查问类、简略计算类工作,比方买量转化的剖析;离线类根本是剖析类、预测类工作,比方游戏玩法剖析。 架构特点 从技术架构来看,得益于开源社区技术栈的高丰盛度,大数据具体的技术抉择十分之多,整体从存算一体到存算拆散,也诞生像数据仓库、数据湖乃至湖仓一体等概念。 从数据架构流程来看,从数据源->数据采集、传输->数据计算、存储->数据利用,其中可选看技术计划也须要就地取材。 从部署架构来看,不同的游戏公司处在不同的数据建设阶段,会有不同的抉择偏向,包含齐全自建、基于云自建大数据、基于云上托管、以及利用更多云上成熟的产品技术去丰盛整体的大数据能力集,而后者也成为越来越多客户的抉择。 拿云上大数据计划举例来讲,比方实时计算局部,抉择SLS采集、Kafka数据网关通道,通过Flink做数据计算,通过ES或CK做数据分析,通过ADB以及QuickBI做数据利用展现。离线计划通过OSS做冷数据存储,Spark、Hive、HDFS等组件做数据计算存储,通过CK汇聚剖析,通过Dataworks做数据利用。 产品选型 具体计算存储的产品选型,次要依据不同的业务个性以及大数据利用个性来辨别,依据数据容量、IOPS、吞吐、读写特点以及性价比来抉择。 如刚刚举例的实时计算/近实时计算场景,Flink具备高性能、低提早特点,所以是计算密集、网络性能高场景,举荐选型七代ECS实例或6代加强实例;如HDFS须要超大存储容量,高吞吐,举荐D系列本地盘实例,如D2S存储型本地盘实例。Remote Shuffle Service等处理结果多的场景,读写解决频繁如大量的join计算,须要综合来看计算、网络、存储性能以及综合老本来抉择通用实例(如第7代ECS实例)或i系列本地盘实例。所以,最终在云上的资源选型,在性能满足的后期下,须要评估通过网络传输数据老本高(云盘),还是就地取材计算成本高(本地盘),不同模型、不同量级抉择不同。 从内存解决(老本最高、性能最好、存储容量最小)、SSD本地盘、HDD本地盘、ESSD云盘、OSS对象存储(老本最优、性能个别、存储容量最大),逐步分层解耦,还带来一个益处:充沛开释了云上弹性的能力,能够利用更笨重的弹性计算产品(如SPOT抢占式实例形式,或ECI容器实例)进行大数据计算,达到更好的弹性能力去满足业务需要的同时也能节约更多的老本。 4 云游戏架构与产品实际业务场景 ...

April 20, 2022 · 1 min · jiezi

关于游戏:游戏测试游戏兼容性测试通用方案

本文由5t5发表于TesterHome社区网站,点击原文链接可与作者间接交换。本次帖子单刀直入,间接说点,审慎查阅。 兼容性存在的意义很简略,就是为了把笼罩遍及公众的机型上我的项目裸露进去的问题全副扼杀掉,无效的改善/防止用户散失。 兼容性解决哪些问题解决适配问题适配产生的问题有很多,如:1、屏幕适配,迭代过程中的测试机显示失常,过大或过小的屏幕带来UI上可能存在较为显著的噪点/黑线,很影响好看;2、分辨率适配,诶?这跟屏幕适配不一个意思?必定不是一个意思了啦,分辨率适配,是笼罩咱们常说的(1920x1080)这一类的,次要是裸露咱们常说的锚点问题,因为当初的我的项目都做了UI自适应/等比例适配的性能,查看在各不同的分辨率下显示是否失常,影响好看,改,影响应用,更得改;3、零碎适配,此零碎适配次要针对适配的是较新/最新的平台零碎(Android/iOS/鸿蒙)等,各大厂商基于android魔改的定制零碎有时降级后/原生Android降级之后也会存在一系列的问题,裸露crash,anr,闪退等问题,发现均列为高优先级进行解决,它代表的是一众此类机型应用均存在问题的;4、屏显适配,也有其余叫法,次要意思就是当初的屏幕显示规格存在水滴屏,折叠屏,刘海屏等等一系列奇形怪状的屏幕,他们的分辨率可能很正统,没有分辨率问题,然而却因为非凡的屏显形式对应UI自身有遮挡,显示不全对操作/好看影响较大会针对性机型去进行定制解决;5、品牌适配,这块多少有一些跟零碎适配有相耦合的中央,笼罩当初尽可能多的手机品牌,这个不过多解释,依据公司需要还有当初的市场份额酌情去笼罩品牌方,【华为,vivo,oppo,魅族,小米...】;6、网络适配,联网形式的适配,没听错,联网形式按当初来说有2G/3G/4G/5G/wifi等等,一系列的网络链接形式,而挪动平台自身网络器件也存在差别,会碰到一些手机存在同4G/运营商雷同然而网络提早比照之后有较大差别,重大的手机还有断流等问题,也能发现一些乌七八糟的问题,晓得即可,个别不染指,因为迭代过程中,弱网测试还有运营商抉择时会消化挺多。 兼容性计划如何选型接下来咱们来看看如何进兼容性计划的选型,又是测试善于的兼容性测试场景设计。针对下面要解决的问题咱们一一针对性的抉择指标机器而后执行即可;但不同的是咱们要考量到企业/部门投入的精力来进行,部门测试机选型不可能把下面的问题全副笼罩掉,那咱们就要按照现有的市场份额去把所有的机器摘出来作为测试机来做部门内的兼容性测试机;能够了解为: 参考的一些市场份额查问链接:百度流量研究院当然不止这一个,感兴趣的也能够贴一些在评论里,感激分享了哈; 兼容性计划【传统形式】传统计划:测试部门选了一堆测试机 → 拿来跑兼容性(手动跑)→ 挨个儿跑完当前 → 我的项目都能跑起来并且没有崩或者打不开的状况 → 实现,写报告。而后报告外面写一下测了哪些机器,体现如何,通过,搪塞,极其的搪塞; 中规中矩:有理有据的选了测试机 → 手动跑兼容性测试(手动跑)并且专门要了挺长的周期去进行兼容测试 → 周期内认真跑每个机器 → 有对应的兼容性通过准则(场景设计,跑通本人设计的场景之后才算该机器通过兼容性测试) → 实现,写报告。这样比照进去以上的长处突出的是:1、有正当的兼容性测试场景来束缚测试机上的体现;2、有正当的周期去安顿兼容性测试,颗粒度能放小,能够了解为每个机器能跑肯定长的工夫,保障肯定的品质;3、测试机的选型也能够体现报告中,显得更业余; 芜湖腾飞:这个就高级一些了,当初有条件的企业会外部部门通过一轮兼容性测试之后上云,无论是自研云/三方云/公司搭建近程机柜均可,来主动跑兼容性测试,这样会更高效,这个就不多解释了。 延长兼容性测试过程中:1、有新机器上市/新零碎大版本更新的机器,能买则买,不要给公司省钱;2、平时的兼容性测试计划毕竟是通用执行,开始就做好部门本身的兼容性计划执行形式,不要长期抱佛脚,虽说花不了多少工夫,然而这种每次跑个兼容慌乱的感觉并不好;3、平时的零碎能不降级不要降级,不要root,root之后的权限已与平时用户应用的机器不同,进行兼容测试时前面测试过程权限提醒体现会有不同,会失真;4、公司没有资管组的话,就要做好平时测试机的爱护还有进行测试前一天尽可能的保障手机的电量充盈;想一想大略就这些,还有什么没想到的欢送大家沟通哈,就这样,go home~ 本文由5t5发表于TesterHome社区网站,点击原文链接可与作者间接交换。 今日份的常识已摄入~想理解更多前沿测试开发技术:欢送关注「第十届MTSC大会·上海」>>>1个主会场+12大专场,大咖星散精英齐聚12个专场包含:知乎、物流、开源、游戏、酷家乐、音视频、客户端服务端、数字经济、效力晋升、品质保障、智能化测试

March 25, 2022 · 1 min · jiezi

关于游戏:游戏测试客户端性能-寻路采集热点图

原文由资深游戏测试开发工程师 陈子昂,发表于TesterHome社区,点击原文链接可与作者交换。导读写这个类型文章的起因是,很多时候会写代码的很多,然而如何少走弯路,做出一些有价值工具产出奉献一点绵薄之力。在入职第二年也打算大力发展做这块(依据过往积攒和教训写下了这个文章),然而前面平台化后,这件事会推研到 2022 年。过来也是把这个工具开发方式小范畴共享过,在对方公司也取得了好评和认可。导读,能够先读这个drawcall 工具链 ,更有养分。 适宜类型3D 引擎或者 2.5D 引擎,测试时锁视角(确保每次测试的准确性和摄像机文言来说所见即所得)游戏和个别引擎互联网都适宜用。 适宜条件阶段条件 1.和 TA 有肯定的共识后才去做,搭配分工明确。条件 2.有肯定建设水平以及稳定性自动化框架,以附件的模式。条件 3.1 有小地图雷达并且有坐标的游戏,能够点开地图主动寻路的 条件 3.2 有 GM 指令能够输出:move 场景地图 Id 坐标,进行瞬移的。 应用条件疏导只有不满足条件 3.1 和条件 3.2 的,也能够持续看个冷落,满足条件 3.1 或者条件 3.2 就能够进行上来。去对接 TA 单干的流程,当满足条件 1 之后,加强对条件 2 的建设。 文章外围1.性能测试为啥要用热点图热点图提供了一个对整个测试的场景(色彩的深浅来标记性能哪里更重大)。 客户端性能优化是一个比服务器优化更耗时的工作,通过热点图全局的发现场景性能最差的区域。 点的起因精华在存储什么数据结构好提供前面复现和平台化。 绘制热点图和疑似问题一点是须要绑定 1.UI 自动化,2.引擎内置自动化来做的,前者通用性比后者强,后者 unity 须要 c# 的编程能力,在很多年前的 testerhome 社区 - 游戏测试白皮书上有作者写过 unity 内置自动化。 2.如何确定热点图的准确性色彩深度的局部四周色彩个别会逐步变浅(大部分状况),比方这种就是例外,前面就是一面墙,齐全隔离了四周场景,游戏也只能从低往上看,啥也看不到。热点图的存储的属性是正确的。 3.剖析后果形式抉择场景内热点图色彩深度的坐标,飞过去看那块区域,而后用官网 profile 去看具体问题,都是和那块区域场景间接挂钩的,比方那边有一个深陷的大峡谷和一个瀑布,瀑布后果是用齐全是用粒子成果实现的,大峡谷摄像机景深没有做解决。能够用空白场景还原性能最差区域,新建一个空白场景,把那个区域的场景素材导入到新场景。对场景很相熟的人,能够更快的猜到是哪里问题,来源于教训,有抱负的能够学习常识图谱,而后每个游戏一个,把屏幕坐标-->世界坐标存在分 type,性能偏向 (比方一些 npc 强烈战斗的场景,飞过去剖析某块资源是失常的) 存储属性图外面,这个都是后话。 UI 自动化的建设抉择用什么框架不重要,然而须要把这部分做成插件,用 pypiserver 搭建公有 pypi,而后改源后就能够应用。 ...

March 7, 2022 · 1 min · jiezi

关于游戏:游戏测试客户端性能-drawcall-工具链

原文由资深游戏测试开发工程师 陈子昂,发表于TesterHome社区,点击原文链接可与作者交换。个别 drawCall 能够了解成是调用次数,到底是调用了什么,个别性能测试外面会关注哪些。提交给程序,Good 程序会说:这个中央可能是真有问题,我有空时看看。Bad 后果 程序:这真没法修,肯定让我对着这个修,我就原地下线了。那么应该怎么做,本文会去掉公式和一些学术词汇。 简述下基本概念挪动端目前支流还是 OpenGL,drawCall 是 OpenGL 的绘制次数,也是优化参考指标,能够占到 4 分之一。每次 Cpu 演算好,预设好顶点数据,在绘图前,会把顶点数据,地位,法线,色彩,纹理坐标,切线告诉 Gpu 进行渲染绘制drawcall 数量越多就别离进行对不同的顶点数据进行下面一样的渲染绘制的次数越多,次数等于 drawcall 数量。drawcall 数越多,Cpu 不会解决不过去(有些文章会说堵在 Cpu,于是 Cpu 笑了),这样 Gpu 渲染承当的就更多。drawcall 会对物件进行分类,不同分类类似度高的,drawcall 会缓存一部分,因为能够批量解决。 切入点咱们说下 drawcall 过高,能够找到一处切入点的 1.设置场景内粒子,然而只有发射,没有销毁。游戏测试会怎么做,首先编写好用例,tag=客户端性能测试关键性:执行重复操作一个特定事务,操作行为个别为 准备就绪-A-B-A-B,不会掺杂到其余的操作。事务特定性留神是不能用关上敞开背包这种,须要对场景进行实际操作的,如果 2D 游戏,去通过关上敞开把背景界面升高到下一层做遮挡也是能够的。 3D 游戏事务实例: 准备就绪-挪动到水波淋漓的湖边(A可见水波淋漓的湖边),B-丢出了一个特效技能比方6级不规则体冰球,A-可见水波淋漓的湖边,B-丢出了一个特效技能6级不规则体冰球。操作形式:绑定自动化测试框架优于人工测试,起因是机器每次的执行步骤是严格统一的,而人不肯定会严格依照操作步骤。启动一个新的过程对自动化测试框架做监听服务,由这个进行收集 drawcall,最好的形式是由该过程是一个接收数据的过程,程序 rpc 用字节流模式进入接收数据的管道。 准备就绪环境 - 最好是有一个 mock 服务,因为 gm 指令能够挪动到指定地位,然而造号失常状况下须要先过疏导,达成技能冰球条件,比方满足某个等级冰球。在跑自动化的时候,能够通过 mock 服务 (聚合多个接口,反对组合条件生成的创号规定) 返回造号胜利后,主动连接自动化进行采集。程序或者调用引擎收集形式都应该能够取得以下数据。 {"type":"湖面","triangles":200,"Instance":2,"total_triangle":400} {"type":"冰球","triangles":1200,"Instance":2,"total_triangle":2400} 1 个湖面会有好多个湖面,1 个冰球也会不止 1 个 type=冰球的,所以下面数据是一个对象,应该是一个对象数组的模式,数组的个数也就是 drawCall 次数。 数据敏感度:1.屡次操作能够关注 Instance 实例数。2.类型是否正当,如果视线内湖面很大,然而冰球数很多,也是须要记录的以上自动化脚本是能够预设的,数据敏感度的断言也是一样的。 自动化采集的话,会在同一个地位做二次复查,才会定位 Bug,这个作用是查看复现步骤。 ...

March 3, 2022 · 1 min · jiezi

关于游戏:游戏客户端性能内存后篇

原文由5t5发表于TesterHome社区,原文链接深度内存摸索上篇讲了对应的内存简略介绍后,咱们对内存的根本体现有了肯定理解,晓得一些内存直观上的体现,本篇就针对上篇未提及的内容进行补充,并且其中会耦合一部分深度剖析思路,心愿能帮忙到大家,另外该篇内容首次提交后后续会陆续提交一部分流程制图,不便大家了解,拖更挺久了,所以就临时大家冤屈一下,看看码的字,制图太麻烦了,望了解!~ 展现形式1、补充之前脱漏的内存上涨不肯定是内存透露的栗子;2、补充具体的内存透露问题如何定位及思路?3、补充内存申请过程中会产生的问题以及影响;4、补充内存不足时,硬件设施底层调度会怎么去做?5、补充对于内存替换(swap)内容流程介绍;6、补充透过显存去延长性能问题;7、拓展延长其余内存体现 —— 缓存; 1. 内存上涨不肯定就是内存透露上篇提到内存透露问题的定位,却少了对于内存上涨肯定是内存透露的佐证了。接下来就来补充下,内存上涨还有可能是什么起因?内存透露的起因曾经在上篇陈说了,遗记的回顾下。内存上涨的失常体现,最间接就是缓存,当有一些 RPG 游戏,你在某个地图中流动就会把碰到的所有怪物,人物,等等一系列资源加载进去,内存最间接体现就是内存始终上涨,这种状况是内存透露么?不肯定,当你更换了其余地图之后,之前加载的内存就失常卸载掉了,并且从新开始加载以后你这张地图的内容,一样会持续减少内存。这属于加载策略上的抉择,是正当的,因而后续在测试过程中产生了对应的疑难之后你就能够跟开发聊聊,他们做了什么样的策略,防止产生误判。 2. 内存透露定位思路这边就间接拿 Unity 的内存透露定位去解说了,比如说,当咱们判断确定以后正本存在内存透露,那咱们就开始剖析是资源透露还是 mono 堆透露,亦或者是都透露,Unity 目前这块可抉择的工具还是挺多的,不论是 UPR 还是 UWA 都有对于内存透露解决中有对应的 diff 解决,解决进去的内容中就含有对应卸载的资源信息与堆栈信息,这样的话,应用工具就成了咱们最间接并且疾速深度定位的无力伎俩。同理,软件客户端性能测试一样,有现成工具应用的话就应用对应的工具去疾速定位,比方罕用的 leaks,由开发染指加个口子,会记录你对应的操作产生的透露,你只须要把对应的记录发送给开发即可,资源透露个别在软件侧很少见,不过也能够定位,还记得上篇形容的内存类型么?native pss 派上了用场,所以,dddd。嘿嘿再同理,如果你晓得了这些,你还是测开项的话,你就晓得想理解这些内容的话,就找能获取对应数据信息的接口本人造轮子也不是不可。所以,加油,打工人。 3. 内存申请/回收的破事内存申请的内容也属于陈词滥调的内容了,开发在编译脚本的时候,尤其是面向对象编程,大家听到的最多得就是 new 个对象,殊不知 new 对象这个创立变量的操作,底层编译时,是会去申请内存的,向谁申请?向内存的管理者去申请,上篇的内容图中也有提及过,申请内存时的体现。 仍然以 Unity 我的项目举例,mono 是 Unity 用来治理行为数据的对立接口,所有执行行为都继承 mono,因而编写脚本时,每次 new 的时候都会向 mono 堆去申请内存,每次申请 mono 都会进行扩容,后续不应用时再把申请的回收回来。这样就能有个正当的循环。 mono 内存实际上也有内存透露的状况,而最骚的是 mono 的内存透露会导致内存碎片化,如:每次申请 10M 的内存,后果回收了 8M 回来,始终有 2M 漏在里面,然而堆治理又管不着,这样的话就会呈现下次再用该堆去申请时,须要 10M 内存时,人堆治理只回收 8M 回来,而你又不够用,就会从新申请 10M 过去,后果周而复始,就会越来越过分,越申请越多,因为没做出图,可能大家不好了解,就是你借了 10 块,我还你 8 块,你想再借我 10 块的时,我没钱了,只能把你还我 8 块给你,你差钱,我就得从新给你搞个 10 块钱给你,场景是有点不合理,然而理论内存体现的确是这样的。 ...

March 2, 2022 · 1 min · jiezi

关于游戏:游戏客户端性能内存前篇

原文由5t5发表于TesterHome社区,原文链接内存问题——落叶归根内存,大家最相熟不过的一块内容,也可能最不理解的一块内容,相熟是因为听到这个词的频率十分高,【啊,我内存不够了,手机好卡啊】这是我听到过最多的吐槽,不相熟是,内存怎么工作,内存的数据交换过程中都谁参加了,内存对于设施来说,如果呈现极其场景的话,设施会有什么影响?等等..等等..一堆的问题都如同跟内存相干,明天就依照测试向去了解探讨下内存在客户端性能中的一面。 展现形式1、内存的迷信解释(摘百度)哈哈;2、内存在性能测试中的表现形式;3、内存的类型以及含意;4、内存的非凡体现有哪些?5、内存数据在版本迭代过程中表演的角色以及重要性; 迷信解释内存 (Memory) 是计算机的重要部件之一,也称内存储器和主存储器,它用于临时寄存 CPU 中的运算数据,与硬盘等内部存储器替换的数据。它是外存与 CPU 进行沟通的桥梁,计算机中所有程序的运行都在内存中进行,内存性能的强弱影响计算机整体施展的程度。只有计算机开始运行,操作系统就会把须要运算的数据从内存调到 CPU 中进行运算,当运算实现,CPU 将后果传送进去。 内存在性能中的体现内存透露【重点关注】首当其冲,内存透露问题堪称是听的最多,导致挪动端解体闪退的状况最多的首恶之一,内存透露问题上,初步接触性能测试的人员始终存在一个误区,那就是在测试过程中,内存始终处于回升状态是不是就是产生了内存透露问题?答案是否定的,咱们先来看看游戏客户端性能的过程中产生内存透露时,如何正确判断产生了透露。 解释下失常透露时的起因图中能够看出在特定的某个场景,内存申请是绝对固定的状况,却每次应用该场景时援用的资源脚本,有固定的几个内存对象脱漏,随着应用该场景次数的减少,内存的值会有轻微/重大的增长,并且不会被革除,这部分内存就是透露造成的。图中的 5MB 就是透露的内存。 透露时测试的执行伎俩以及罕用场景举个栗子,正本透露测试,能够发现每次从正本返回之后内存的基准值在一直的回升,这就意味着正本中有资源/代码堆未卸载洁净,有透露,这样的话,正本的透露测试问题就定位进去,而具体的内存透露是什么?见下一章 延长:正本透露测试如此,触类旁通,其余的透露问题同样实用,如:UI 透露测试,频繁关上敞开 UI 跳转界面,查看体现,跑马灯测试,频繁的唤起跑马灯内容,查看内存变动,都是能够的。 内存基数高内存基数过高就很简略了,是针对于内存调配极度不合理的情详情去看的。举个栗子,查看下图,咱们发现在登录界面时,内存就曾经飙升到 500MB,而进入外围的场景后才 650MB,重大阐明,登录阶段存在重大的内存调配不合理的状况。须要优化,后续须要针对性的把资源占用较大的内容优化或者删除。 内存峰值内存峰值也绝对简略,然而又属于比拟重要的局部,因为它是评估我的项目在设施上是否存在解体危险的一个指标。举个栗子,咱们来看一下,每个我的项目咱们在跑完外围流程的过程中,内存值都会存在一个最大值,这个值就是内存峰值,内存峰值的呈现意味着我的项目可能达到的一个极限值,上回咱们也说到,硬件决定我的项目的下限,如果内存过高超过下限,设施就会干掉我的项目,峰值的意义就是如此。 延长:比方 iOS 设施就是 1G 运存机型,645~649MB 就会杀掉过程,2G 运存机型,1400MB 就会杀掉过程。Android 设施也存在相似的景象,然而当初机型都解禁,底层内存不足会优先杀掉未应用队列过程,波及底层调度问题后续介绍。 内存冗余顾名思义,就是这部分的内存是多余的,而且它大多会响应在开发中最罕用的池利用,以及需要变动的过程中。内存冗余就绝对简单一些,了解会好了解,定位会麻烦且简单一些,具体定位形式放后篇。 内存类型以及含意VSS : Virtual Set Size 虚构耗用内存(蕴含共享库占用的内存)RSS : Resident Set Size 理论应用物理内存(蕴含共享库占用的内存)PSS : Proportional Set Size 理论应用的物理内存(比例调配共享库占用的内存)USS : Unique Set Size 过程单独占用的物理内存(不蕴含共享库占用的内存) 罕用的就只有 VSS 与 PSS 两个,虚拟内存在测试过程中用来判断申请内存时的一个内存状态,PSS 则是实在运行我的项目时,实在所占用的我的项目资源 + 我的项目代码堆 + 三方库/零碎库援用时占用局部的内存是最实在反馈。前者因为虚构基址 Google 官网有限度为 0~4G 避免出现杀过程的状况,后者则就是咱们最常看的内存值。 ...

March 1, 2022 · 1 min · jiezi

关于游戏:复古冰雪传奇H5游戏详细图文架设教程

前言想体验复旧传奇的热血PK吗?想体验满级VIP的尊贵吗?想体验一刀99999的痛快吗?各种极品炫酷时装、坐骑、翅膀、宠物统统给你,就在复旧冰雪传奇H5! 本文解说冰雪传奇架设教程,想钻研H5游戏如何实现,体验游戏中秒天秒地秒空气的肯定不要错过。 我架设的冰雪传奇H5链接:http://bxcq.echeverra.cn,关注我的微信公众号 echeverra 发送“冰雪传奇”,获取游戏源码,发送“冰雪传奇GM”,我会第一工夫给你受权后盾GM,快来体验一下吧。 喜爱H5游戏的还能够看看我架设的另外三款游戏: 大天使之剑H5游戏超具体图文架设教程,游戏链接:http://39.105.134.68:81全新UI西游H5决战天宫游戏具体图文架设教程,游戏链接:http://xy.echeverra.cn冰雪传奇H5光柱版游戏具体图文架设教程,游戏链接:http://ltcq.echeverra.cn冰雪传奇游戏截图: 挪动端: PC端: 架设1. 架设条件冰雪传奇架设须要筹备: linux服务器,举荐CentOs 7.6版本,能够思考阿里云腾讯云等。游戏源码,关注我的公众号 echeverra,发送 “冰雪传奇” 获取。需注意服务器CentOs 8以上版本无奈启动游戏端口,举荐比较稳定的7.6或7.9版本。游戏源码中已去除广告,并修复局部性能。 2. 装置宝塔及环境宝塔是一个服务器运维管理软件,装置命令: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh装置完后,依照提示信息登录宝塔(如果无法访问可能是因为服务器没有凋谢8888端口,参考步骤凋谢端口),并在宝塔软件商店中搜寻以下软件装置: web服务器:nginx 1.14数据库:mysql 5.6编程语言:PHP 5.6数据库管理工具:phpMyAdmin 4.43. 敞开防火墙通过宝塔菜单终端,执行敞开防火墙命令: systemctl stop firewalld.servicesystemctl disable firewalld.service4. 凋谢端口咱们间接凋谢所有端口1-65535,以阿里云服务器为例,在平安组中配置规定。 而后在宝塔菜单平安中凋谢所有端口。 如果对安全性有要求,能够独自凋谢须要凋谢的端口,办法同上。 5. 上传源码拿到源码后,将bxcq.zip压缩文件通过宝塔上传到根目录(如果宝塔禁止上传到根目录,可上传其余门路后剪切粘贴到根目录),因为文件较大,上传工夫大略在半小时以上。 上传胜利后解压到根目录。 解压实现后,通过宝塔菜单终端,命令授予777权限: chmod -R 777 /datachmod -R 777 /www/wwwroot/bxcq6. 导入数据库宝塔设置数据库root明码为123456。 凋谢数据库近程权限: mysql -u root -p123456GRANT ALL PRIVILEGES ON *.* TO 'root'@'127.0.0.1' IDENTIFIED BY '123456' WITH GRANT OPTION;FLUSH PRIVILEGES;GRANT ALL PRIVILEGES ON *.* TO 'root'@'localhost' IDENTIFIED BY '123456' WITH GRANT OPTION;FLUSH PRIVILEGES;quit创立以下数据库: ...

January 28, 2022 · 1 min · jiezi

关于游戏:游戏行业搜索最佳实践

简介:本文通过游戏行业客户案例带大家理解游戏内容,游戏论坛等场景搜寻个性,以及如何通过凋谢搜寻游戏增强版解决方案轻松疾速接入,实现高质量搜寻成果,晋升业务指标和用户体验。 客户背景国内出名的文化社区和视频平台,其游戏板块为玩家提供游戏下载、游戏测试、社区探讨、攻略等多元化内容,并且游戏支出占据总营收构造中的重要局部。 搜寻业务背景内容形式多样,蕴含视频、wiki、攻略、用户等多个类目,需同时满足上述综合搜寻需要;业务围绕在游戏搜寻、社区论坛攻略搜寻等场景,搜寻是疏导业务转化最重要的性能;自研搜寻成果不满足业务需要,无后果率较高,点击率较低;游戏行业专属分词简单垂直,波及游戏名称、版本、角色、配备、主播等Query,且新词迭代快,搜寻成果间接影响终端用户搜寻体验;游戏场景分词波及别称、术语、昵称,须要经营同学参加业务调优,自研搜寻无奈满足经营需要;搜寻疏导须要满足个性化搜寻需要;凋谢搜寻游戏行业增强版解决方案凋谢搜寻简介凋谢搜寻(OpenSearch)是阿里云自主研发的大规模分布式搜索引擎搭建的一站式智能搜寻业务开发平台,无需开发,一键接入即可取得高质量搜寻服务,内置阿里系技术多年积淀的外围搜索引擎,行业前沿的搜寻能力和算法能力,并充沛凋谢反对外部调用客户本人的算法模型,满足各行业各场景的业务需要,与客户彼此成就、独特成长; 游戏行业增强版搜寻架构 解决方案客户数据定制分词 针对客户业务场景为特定畛域的状况,在文本搜寻的分词算法上,通过自动化基于客户数据的定制分词模型流程,能够在天级别实现适配,提供客户专属的文本分词器。 通用版VS游戏增强版分词成果比照: 2. 游戏行业向量召回模型相比传统文本搜寻须要通过分词、同义词、纠错、词权重改写等算法技术加强语义搜寻成果,基于深度学习的语义向量召回模型具备更弱小的表征能力,能够更好地解决用户查问词中的简写、别名、拼写错误等状况。 3.个性化搜寻疏导下拉提醒实现了基于用户文档内容的query智能抽取,能够通过中文前缀,拼音全拼,拼音首字母简拼查问以及汉字加拼音,分词后前缀,中文同音别字等查问下拉提醒的候选query。热搜和底纹是一个残缺搜索引擎必备的基本功能,通常占据着搜寻框入口的重要地位,提供不可或缺的业务价值. 客户价值仅用1周工夫高效接入上线,简直无需额定调试,疾速响应客户侧业务需要;游戏行业增强版搜寻成果显著优与自建搜寻,外围指标无后果PV降落10%,无后果率降落40%,晋升业务转化成果;间接解决大部分之前自建搜寻的badcase,游戏行业智能语义了解性能优化了用户产品体验,用户黏性得以提审;测试了客户在保护中的重要经营词,搜寻成果均合乎预期,经营侧同学可通过控制台间接调优保护,与产品技术协同,对搜寻指标负责,继续跟进搜寻能力迭代;原文链接本文为阿里云原创内容,未经容许不得转载。

January 26, 2022 · 1 min · jiezi

关于游戏:腾讯夏琳构建行业发展新势能开拓游戏多元价值

11月22日,由腾讯游戏学堂举办的第五届腾讯游戏开发者大会(Tencent Game Developers Conference,以下简称 TGDC)正式开播,本届大会以“Five by Five”为主题,汇聚40多位海内内行业嘉宾与专家学者,围绕产品、技术、艺术、市场、独立游戏及游戏社会价值等议题,与从业者一起独特探讨行业将来趋势,分享具备实战与前瞻性的从业教训与研究成果。 会上,腾讯游戏副总裁、腾讯游戏学堂院长夏琳进行了以《构建行业倒退新势能,开辟游戏多元价值》为题的收场演讲。随着疾速的技术提高,游戏正在一直拓宽人们对于将来数字生存的设想空间,“翻新”与“交融”将是游戏产业将来倒退的关键词之一。“游戏作为一个高度跨学科的产业,被置于数字虚构与事实世界的交汇处,随同寰球游戏市场正在产生的显著变动,游戏产业精品化、全球化、多元化的趋势将更为突出。” 夏琳示意。 [ 腾讯游戏副总裁、腾讯游戏学堂院长 夏琳 ] 面对产业倒退的新环境、新变动,夏琳在会上分享了腾讯游戏学堂在业余人才培养、高校产学研单干、行业交换及开发者生态建设等方面的一些实际与思考: 第一,是通过产业钻研、学科建设与科研单干,继续推动着产学研体系的不断完善。 腾讯游戏学堂与国内外16所高校开展科研学术单干,已发表了30个课题成绩、8项国家专利、5篇报告,并联合本身劣势,踊跃助力游戏实践钻研核心的建设。往年,腾讯游戏学堂与清华大学联结共建的国内首个“互动媒体设计与技术”硕士业余也迎来了第二学年。11月,腾讯与华中科技大学签订策略单干框架协定,单方将施展各自在产业与教育方面的劣势,独特推动新工科新理科背景下的网络新媒体文创人才培养改革。 第二,是长线建设常识分享平台,搭建行业交换和游戏专业知识体系。 腾讯游戏学堂推出了多样化的收费内容,深刻解说游戏制作过程、研发教训和幕后故事,助力游戏人业余学习及成长。随着《游衷之言》第二季上线,以及《腾讯游戏开发精粹Ⅱ》的出版,将进一步促成行业交换与常识分享。 第三,是加大投入对行业翻新土壤的耕耘。 通过腾讯独立游戏孵化器,并成立200多人的专家团,帮忙独立游戏团队解决难题、取得资源。同时,举办GWB独立游戏大奖赛,为开发者及获奖作品提供具备高竞争力的行业赛事奖金处分与宣传资源反对。 面向未来,腾讯游戏学堂将继续围绕技术、人才和责任等维度,推动游戏行业良性倒退,助力“超级数字场景”的共建。同时也将继续推动TGDC成为行业倒退的“指南针”、从业者的"连接器"、好作品的“放大镜”,与所有游戏玩家、从业者继续交换分享,独特构建一个谐和倒退的游戏生态,摸索产业符合将来的多元门路,为游戏人发明更多可能。 以下为演讲实录:大家好,我是夏琳。欢送屏幕前的各位参加观看第五届腾讯游戏开发者大会。明天,我分享的主题是:构建行业倒退新势能,开辟游戏多元价值。 2021年游戏行业倒退呈多元态势往年,游戏行业仍旧是充斥变动和倒退的一年。咱们看到,疾速的技术提高,一直拓宽人们对于将来数字生存的设想空间,像“元宇宙”等一些新概念也不断涌现。游戏作为一个高度跨学科的产业,被置于数字虚构与事实世界的交汇处,受到寰球范畴内的宽泛关注与探讨。同时,随着用户审美、下一代平台、宣发模式乃至寰球游戏市场都正在产生的显著变动,游戏产业精品化、全球化、多元化的趋势也将更为突出。聚焦国内游戏行业,也呈现出翻新与交融的倒退态势。 首先,得益于市场倒退和用户需要的一直降级,游戏产品在细分品类上也愈发多元倒退,创新型玩法赛道机会变多。同时,越来越多国内开发者创作的优秀作品,受到了寰球玩家的青睐。将来,具备高制作品质,以及优良的游戏玩法和叙事设计的高势能产品,将取得更为显著的劣势。 其次,作为与科技共生倒退的产业,新技术的冲破与利用始终是游戏行业关注的焦点。空幻引擎5、数字虚拟人、AI主动生成等技术利用,将不断丰富游戏体验;同时,咱们看到游戏产业所积攒的技术,也正在利用到其余畛域,晋升不同行业的生产效率。再次,随着游戏更宽泛地融入数字生存,行业自律成为游戏与社会不断完善责任契约的重要一环。 寰球游戏产业持续增长,中国厂商逐渐构建全球化倒退格局随同着市场和技术的演变,游戏产业将持续增长。依据调研机构Newzoo的统计,2021年,寰球游戏玩家总数将靠近30亿,同比增长5.3%。其中亚太地区玩家数量占比超过一半,成为寰球游戏市场增长的次要引擎。依据《2021年1-6月中国游戏产业报告》咱们也能够看到,国产网络游戏海内支出,较四年前增长超过一倍,达到84.68亿美元。这表明,中国游戏在寰球范畴内的影响力继续加强,国产游戏“走进来”曾经成为一个趋势。将来,将有越来越多承载中国文化底蕴的游戏产品走向海内,助力中国文化在全世界范畴的流传和交换。 面对产业环境的倒退变动,腾讯游戏学堂做了哪些摸索?刚刚播出的《游衷之言》第二季中,大家看到了处于不同阶段的游戏人各自的工作状态,以及对于游戏行业、游戏市场的思考。在往年的腾讯游戏年度发布会上,腾讯高级副总裁马晓轶提到,游戏正在帮忙人与人、人与社会、不同产业之间,发明更多有价值的连贯,成为一个充斥有限可能的“超级数字场景”。在这个过程中,腾讯游戏将以技术、人才和责任为底盘,通过不同品类的产品去实现价值摸索,并与所有游戏玩家、从业者一起,构建一个谐和倒退的游戏生态,摸索产业符合将来的可能门路。面向未来,腾讯游戏学堂作为致力于通过业余人才培养、高校产学研单干、行业交换及开发者生态建设等推动游戏行业良性倒退的平台,我想和大家分享一下,腾讯游戏学堂近期的摸索与阶段性成绩,以及如何在技术、人才和责任等维度,助力“超级数字场景”的共建 继续推动产学研体系新势能腾讯游戏学堂始终致力于打造从“业余”到“学科”的一体化建设,与高校共建游戏业余及游戏学科,独特推动学科建设、人才培养;同时,为帮忙游戏行业继续衰弱倒退,咱们联结国内外顶级院校,从学术研究角度切入产业倒退的方方面面,开掘游戏的多元价值,并从产业需要登程,与高校及科研院所严密单干,优势互补,促成技术创新,带动科研成果疾速落地产业,造成多方单干的良性循环,独特倒退。 通过几年的积淀与致力,往年咱们在产业钻研、学科建设,以及科研单干等方面,都有一些突破性的成绩,继续推动着产学研体系的不断完善。咱们开展来看: 高校科研学术单干:已发表30个课题成绩往年咱们与清华、北大、浙大、上海交大、华科、MIT斯隆治理学院、新加坡国立等16所国内外高校,围绕科技向善、前沿技术、文化流传、正向价值畛域,发表了30篇产业钻研及科研单干课题成绩,8项国家专利、5篇报告,波及畛域包含:高精度眼睑几何重建零碎、基于深度学习的骨骼蒙皮、城市结构化建模、AI技术利用等。其中,浙江大学-腾讯游戏智能图形翻新技术联结实验室的三个基于前沿技术的我的项目,不仅取得了国家专利,还在国内顶级期刊发表论文。这些成绩在技术创新、社会关系、传统文化,以及助力社会生存生产等方面将具备深远影响。 共建游戏实践钻研核心,促成行业衰弱倒退与此同时,从实际及实践钻研层面帮忙行业标准倒退,也受到政府-高校-企业的多方器重。前不久的北京国内游戏翻新大会,对外颁布了北京市贯彻落实中宣部要求的系列动作,其中包含在北京市市委宣传部的领导下,中国人民大学、北京师范大学、中国艺术研究院、中国传媒大学独特发动成立游戏实践钻研核心,腾讯很荣幸做为“游戏实践钻研核心”的共建单位,将联合本身劣势,踊跃助力游戏实践钻研核心的建设,从课题钻研、人才培养、学术交流三大方面为钻研核心提供资源和反对。腾讯将紧紧围绕推动游戏产业衰弱倒退这个外围,立足产业现状,着眼将来倒退,遵循推动产业衰弱倒退的指导思想,反对核心培养向上向善的产业环境,推动游戏产业衰弱倒退。 学科建设:清华IMDT硕士业余迎来第二学年学术研究能够助推游戏在社会上施展更大的作用、发明更多的价值。那么,学科建设则能够为产业人才倒退提供底层源能源。腾讯游戏学堂和清华大学联结共建的国内首个“互动媒体设计与技术”硕士业余,在往年9月迎来了第二届的30名新生们,他们来自中国传媒大学、北京邮电大学、武汉大学、英国曼彻斯特大学等院校,从500多名报名学生中怀才不遇,非常优良。 通过近2年的倒退,咱们汇集行业及腾讯游戏的专家、清华的老师们,为该业余体系化的课程设置做了十分多的工作,同时咱们还携手南加州大学电影艺术学院互动媒体系(USC Games),独特打造国际化的造就计划及课程体系,除此之外,咱们还为该业余的学生提供千万级软硬件投入的动捕实验室作为教学基地,采纳国内一流的光学动作捕获设施,能在动捕科研实际的同时进行独立授课流动。正如清华大学深圳国内研究生院副院长左剑恶所说,心愿每位IMDT学生都能用积极主动的态度去面对将来的每一次挑战,成为可能用世界的语言来讲中国文化、中国故事的跨学科、复合型人才。该业余有同学示意,“在这里能够系统化的学习游戏制作,遇到气味相投的搭档。不仅有学术气氛,还能接触到行业最前沿的常识”。咱们也十分期待将来他们带着在这里的播种,为行业倒退贡献力量。 继续建设常识分享平台,助力游戏人业余学习成长除此之外,腾讯游戏学堂还继续长线建设常识分享平台,搭建游戏专业知识体系,包含多样化的免费视频课程和干货类文章等精品内容,深刻解说游戏制作过程、研发教训和幕后故事、人物访谈和行业洞察等,助力游戏人业余学习及成长。同时,咱们也推出了一系列精品栏目,如由腾讯游戏专家分享本身教训的《问爆游戏人》,通过跨界碰撞传递游戏幕后的故事和理念的《很快乐你玩我的游戏》,精选十余款腾讯游戏产品研发教训的《腾讯游戏100篇》,以及联结行业大咖、研发团队、开发者、学生、媒体共建的《游戏图书馆》等等,都具备较高的学习和珍藏价值,非常适合从业者的关注。 以上内容通过腾讯游戏学堂官网、公众号、小程序均可浏览观看。近期,咱们还出版了《腾讯游戏开发精粹Ⅱ 》,这是一本联结多名技术专家整顿积淀,蕴含人工智能、计算机图形、客户端架构等前沿原创技术计划的书,心愿促成行业的常识交换分享,独特学习提高。 通过独立游戏孵化器,造就翻新创意土壤行业的良性衰弱倒退,除了加大对专业人才的造就与挖掘,搭建校企产学研单干体系,也离不开对创意土壤的耕耘。腾讯游戏学堂在去年成立了腾讯独立游戏孵化器,协调腾讯游戏各部门相干资源,实现独立游戏行业的深度生态建设,帮忙独立游戏团队解决难题、取得资源,促成游戏行业多元化倒退。为此,咱们成立了200多人的腾讯游戏专家团。通过聚合腾讯游戏各畛域热心的专家,笼罩策动、美术、客户端、服务器、UI\UE、音频、项目管理、经营等维度,为高后劲独立游戏团队提供深度反对,包含:研发资金、专家的领导示范,宣发和经营等全程帮助。这些专家团曾经在《妄想山海》和《我的侠客》等风格化产品的研发过程中,进行了各种打磨帮助,将来将帮忙更多优质独立游戏的全程深度孵化。 咱们还举办了GWB独立游戏大奖赛,邀请国内外出名行业专家、制作人和媒体人作为评委,为获奖作品提供具备高竞争力的行业赛事奖金处分与宣传资源反对。9月,咱们颁布了中国区入围决赛的26款作品,玩法风格各异,或者将为独立游戏畛域带来新的思路与启迪。本届TGDC独立游戏专场上,也将举办独立游戏大奖赛的颁奖典礼,心愿这些充斥表白性的作品可能取得更多关注。同时,咱们还继续举办GWB腾讯独立游戏孵化器开发者沙龙,邀请有成功经验的行业专家及游戏制作人,从立项、研发、发行等角度,为开发者带来干货满满的行业常识与教训分享,也让更多开发者的创意得以绽开。 咱们做这些,是心愿从翻新、创意、创作等不同维度,为中国游戏行业的可继续倒退添砖加瓦。 Five by Five,迎接时机与挑战基于全球化的产业格局,一直降级的市场与用户需要,以及游戏社会影响力的继续加深,咱们将会面对更多的时机与挑战。因而,咱们将往年TGDC的主题定为Five by Five,邀请40多位重磅的行业嘉宾、高校学者、未成年爱护专家汇聚一堂,共享行业教训、前沿技术和发展趋势。将一场场围绕游戏产品、技术、艺术、市场、独立游戏及社会价值的干货分享,通过更凋谢的线上模式,让更多的从业者、专业人士与游戏爱好者能参加其中,独特摸索游戏行业的更多可能。 做行业倒退的“指南针”、从业者的"连接器"、好作品的“放大镜”咱们也将继续推动TGDC成为行业倒退的“指南针”、从业者的"连接器"、好作品的“放大镜”。心愿在接下来的3天精彩出现中,大家能有所播种,有所期待。 谢谢大家。

December 17, 2021 · 1 min · jiezi

关于游戏:TGDC-双师联教-实质增效揭秘IMDT项目课程教学模式特色

大家好,我是清华大学深圳国内研究生院的黄维,明天很快乐在这里分享咱们课程的建设。 我介绍一下咱们核心和我的项目,这个我的项目的名字叫做互动媒体设计与技术核心,是清华大学深圳国内研究生院与腾讯游戏学堂于2019年独特成立的,目标是独特发展前沿科技与社会利用的钻研,探讨企业、政府、高校单干新模式,和专业学位教育的新范式,咱们与美国南加州大学电影艺术学院达成了单干,这个我的项目目标是想吸引寰球最优良的学生,可能用世界的语言讲中国文化、中国故事的跨学科、复合型的人才。 学校的产品其实是课程,教育就是服务。所以咱们说人才培养的一个重要保障就是好课程+好教学。 这个我的项目后面没有一些教训能够参考,特地是课程建设,所以咱们是从零开始,必须要开发出一套适宜研究生层面的课程。所以咱们想,既然有三方的单干,而且三方的劣势十分地突出,比方像清华大学深圳国内研究生院次要是做研究生层面的造就,老师们对研究生教育层面教训十分丰盛;腾讯在互动媒体技术方面是一流的,特地是有很多一线的一流专家;南加州大学他们在游戏方面的教育历史很悠久,课程也十分成熟,而且外面的传授很有教训,我想三方单干,这个课程就不要由清华大学外面的老师独立地来承当,应该让清华大学外面的老师,跟腾讯一线的专家加上美国南加州大学艺术学院的课程进行相结合,咱们开发出新模式叫做:清华导师+腾讯导师,叫“双师模型”进行教学。咱们想用这种模式是否造就出有互动媒体设计和业余能力的、然而同时又具备有艺术鉴赏力的、综合性的创新性人才和行业引领者,这是咱们的定位。 这个我的项目一共开发外围课程有15门左右,这个课程应该如何开发?应该想方法把课程做成十分有特色的模式。我就拿两头一门课作为一个案例,跟大家介绍分享一下。 这个课程的名字叫做《视觉设计原理及利用》,这个课程是很有特色的,咱们用五位腾讯一线的老师,校内由我作为课程负责人,腾讯还有一位项目经理。有校内的学者,有一线的专家,“双师联教,本质增效”想达到这样的目标。在课程建设的时候,咱们充沛地利用了国内外已有的教训和教学的教材。 美国南加州电影艺术学院在游戏的教学方面,有着很长的历史,外面也有很多很好的教材,有很多很有教训的老师,比如说像布鲁斯·布洛克学生,他讲了一门课很有名,这个课程的名字叫做《以眼谈话:影像视觉原理及利用》,我看过中文版的教材,发现有几个特点:一个特色是岂但介绍了整个影像视觉设计的基本原理,而且说明了影像视觉设计若干的原理。把视觉设计分七大因素,围绕着视觉构造跟故事构造相辅相成进行发展,我认为这种教学方法是很有特点的,而且也十分迷信。 另外,还讲了大量的方法论,因为有很多的理论案例,总结出很多的办法,这些货色都是须要用工夫来积攒的。 咱们方才理解了《以眼谈话》这本教材和内容,咱们怎么可能来编写中国本人有特色的课程?咱们的课程名字就叫《视觉设计原理及利用》,我想要有几个特色: 第一个特色,《以眼谈话》这个教材外面的逻辑构造我感觉是能够采纳的,在此基础上编写适宜清华互动媒体的研究生层面的教材。 第二,要突出互动媒体的特色。因为《以眼谈话》次要是影像,不是只针对游戏的,咱们这个次要是针对互动媒体这块的,所以咱们要进行某种扭转,次要是要可能把游戏的特色和研究生档次的学术性体现进去。 第三,有五位腾讯一流、一线的专家来进行授课,强化知行合一的高能力、应用性的设计人才的造就。 另外,在咱们的案例选用方面,不仅仅是选用国外优良的案例,特地是咱们重视国内优良案例,特地是腾讯外部导师做的案例,把国内外优良案例放到一起,就具备中国的特色。 这个课程包含课堂的教学和实际局部组成。我认为一门课能不能教好,能不能学好,很重要的是“三基”。 就是基本概念、根本实践和根本办法。除了这“三基”以外,怎么在游戏设计的意义、作用和利用。心愿通过这个,领导学生在课程当中学的原理和办法可能发明进去一些合乎游戏故事的主题诉求又赏心悦目的视觉作品,这是咱们对于课程的定位。 这门课程学下来当前价值在哪里?我想游戏是一门通过感官的语言来讲述故事的艺术模式,而通过视觉感官承受信息,这个量占了人类五个感官当中承受信息的83%以上,这是有人作过这样的统计。由此可见,视觉体现在游戏设计当中占有多大的重量!所以这门课应该放到我的项目课程体系两头的外围课程。 咱们是设了这样的指标:这个课必须概念要清晰,构造要特地正当,实践要扼要,办法要特地繁难,因为咱们的同学都是跨学科穿插业余在一个班里学习的,所以必须要让视觉业余的同学听得很过瘾,其余工科的同学也能够了解承受。咱们有里手分享授课体验,次要是引领大家思考而不是传授常识,要激励大家对想不开的中央、听不懂的中央要及时质疑,学完当前要马上消化实践,要学以致用,要实际为先,在作业外面要把实践用好。另外研究生层面要重视钻研,所以咱们激励大家翻新。 因为有五个老师上课,要上九次课,如果咱们在内容的纲要方面没有整合好的话,就会变成像听讲座一样,就不成为课程体系。怎么办?咱们提出无论哪一课,都必须十分明确地围绕视觉元素开展四方面的编写和讲授: 第一,每一课必须要界定概念要讲什么; 第二,各个元素跟视觉体现之间是什么关系,视觉关系就是实践,把根本实践要讲清楚; 第三,各个元素在游戏视觉设计当中如何利用,这是根本办法; 最初,怎么样以视觉的构造来讲述故事的构造,这是咱们的目标。也就是你的视觉构造不是为了视觉构造,而是依据咱们的叙事、故事的内容来采纳不同的构造,这两个构造的一致性,咱们的故事才可能难看听得懂。 每个老师写本人的教材和编写PPT的时候,要依照这个来做。这样五个老师一起上课的时候,就会造成像一个人一样,特地地对立、特地地统一,同学们不会认为如同每个老师是来做讲座一样。这样老师多也有益处,然而管制不好也不是益处。 每一课的常识逻辑构造也做了十分严格的规定,必须严格贯通到课程的结构设计当中:基本概念、根本实践、根本办法。基本概念方面,每一个元素、每一节课必须讲清楚。以“节奏元素”这一节课为例,这节课讲“节奏”,就是距离、反复、节奏、静止物体的视觉节奏以及静止物体的视觉构造,还有事件的拍摄、节奏的模式等都属于节奏,这些定义是什么呢?必须讲清楚。所以同学们在听的时候必须要听分明,如果哪里听不分明要及时提问,不能溜过去。 第二,节奏元素跟视觉体现之间是什么关系呢?这外面咱们提出“对抗与类似”的关系,肯定要把握住。节奏比拟类似的时候,表现力相对来说就比拟温和。节奏对抗的时候,体现的货色就比拟强烈,这个是法则。 第三,节奏的元素在游戏视觉设计两头要怎么利用?在利用两头,在拍摄过程两头怎么管制节奏要跟故事情节相吻合。如果每一个课都这样编排、这样讲授,学生也依照这样来听课的话,就达到了教学统一,这样的教学效果就很好。 每一课前面还要求老师必须要有课程的小结,必须要有思考和练习,还要给大家发延长的浏览资料,因为课上的工夫无限,大家在课下必须要读书、消化、了解,为下一课做筹备,充沛地利用同学们很好的自主学习能力,课上只讲疑点、难点和重点。 整个施行过程咱们认为还是不错,第一堂课由我来讲,就是“导言”局部,什么叫“导言”?就是把这个课的教学大纲、教学内容、教学目标到整个逻辑构造,要跟同学们讲得清清楚楚,老师怎么教,同学怎么学先达成共识。而后把内容和逐个要求都讲清楚,这样同学们听得明明白白,这节课用了45分钟,然而同学们对前面32课时曾经明确了,有了这样的“导言”,同学们听起来就晓得明天这个老师讲什么,下一个老师讲什么,就会有心中的预期,就会带着问题来学习。 通过咱们这次的试验,第二堂到第六课有两个老师来讲。 到了第七课、第九课又有两个老师来讲,通过这样的做法,咱们起初感觉不错,感觉不错要体现两点。 第一,学生做的作业是否达到咱们的教学设定。 第二,学生对课程的评估到底如何?一个是作业,一个是评估,这两个货色很重要。新开的这样的业余方向要怎么可能把课程做好? 课程是十分重要的一个内容,每一课前面都有单元作业,老师讲这一课要消化,每一个视觉元素作业不要太多,然而必须要消化。最初咱们把七个元素合在一起做一个大作业,这个大作业要求,游戏作品外面必须要有七个元素的出现,缺一个都不行,这样同学们就想不是为了做作业而做作业,不是为了拍难看的片子而做作业,而是能够把学习到七大元素消化到作业当中,造成好的视觉出现,这样咱们的课就达到了咱们的教学要求。 大家作业做完了当前,请五个老师和校内老师,对学生的作业进行公布点评,每一个组的同学都下来公布本人的作业,后果几位老师看完当前还是挺称心的,感觉这次整个课程设计以及教学讲授的过程,整个课程的品质把握、监控都做的比拟到位,尽管第一次咱们没有加入校级的评估,然而同学们的心里评估很高,老师们也比较满意,整个教学进去当前整体感觉还不错,起初咱们在课堂上做了公布和总结,咱们编写教材。 同学们做的是11套作业,明天因为工夫关系,不能每一套都放给大家一起观赏,总体来说我感觉做的相当不错,依据老师们的评估。这是第一个。 同学们的评估十分重要。很多同学都十分踊跃踊跃地对教学进行评估,他们最多的评估是这堂课最大的特色:五个老师不是讲五个本人不同的观点,而是在对立的逻辑性下,开展丰富多彩的各个元素的一种施展。设计的七大元素,围绕着对抗与类似这个实践开展,使咱们每堂课都能够紧紧把握住“对抗与类似”,造成了什么关系,可能把故事情节体现进来,同学们能体现出这个,咱们的教学目标就达到了。 另外,老师们的连接十分到位,每个老师都能够尽量施展他本人的才华,讲的时候十分有趣,十分地投入,因为咱们的构造很谨严,能够在结构上充分发挥他的才华。尽管是第一次,我感觉还是有意思的。依据这门课咱们总结进去的道道,利用到其余的课程当中。这个我的项目办的不长,然而因为咱们高要求,高起点,而且腾讯的老师十分敬业,他们真的把多少年实际的案例、领会、实践,全副反馈到学校里来,真的是真心帮忙年老的学子,可能成长出当前中国十分优良的互动媒体的技术与设计的人才,我感到十分快慰。心愿大家可能多多反对咱们中国的研究生层面的互动媒体这个人才培养的这么一个事业,也心愿优良的学子们参加到咱们我的项目里来,一起为中国这个事业一起做奉献。谢谢大家! Q&AQ:校企之间应在什么层面上达成共识,能力做到互利共赢实现单方单干的可持续性? A(黄维):很多学校跟企业单干大多数都是基于让学生到企业外面去,学一点当前待业的技能,学生毕业当前可能跟企业的需要之间挂上勾。 我感觉如果仅仅是这样的话,还是不够的,尤其是研究生的教育层面,跟本科生和职业学校的学生还是不是太一样的。为什么呢?研究生答复的不是“是什么”或者是“怎么样”,答复问题是“为什么”和“如何翻新”。 我在想,咱们的老师在研究生课程方面,不仅介绍其余的学者的观点,更重要的是,老师本人钻研的后果要可能跟大家一起磋商,同学们能够听各种各样的学术观点,通过本人的思考可能确定哪一个是正确的。所以这里要充沛地造就同学们独立的思维、批判性的思维。在这个课程外面学习的就是这种思维,必须养成翻新的一种习惯。他所做的作业应该是翻新的作业,你的创意怎么变成理论的货色呢?必须要到企业实际,因为能力的造就,不仅是实践,更多把实践通过实际才可能变成能力。这时咱们带学生到企业去单干,次要是基于翻新的需要,也就是翻新的思维、翻新的一种实践、翻新的一种作品,可能通过实际表达出来,变成产品,变成可用的货色。 高校外面的老师学生,次要是搞原创的,企业外面次要是搞生产的,原创和生产都是十分须要的,这两者要联合起来的时候,我感觉独特的点,并不是传授一些技能,更要害的是翻新。所以高校和企业的共识应该在翻新上。比方我上的《视觉符号设计》课程,老师教学生一些翻新的实践和办法,同学们做出了翻新的成绩,到企业去严密单干,我提出“意匠交融 协同翻新”,真的是强强联合,同学们翻新意识通过实际测验,可能学到这样的一个实践的进步,企业外面的这些工艺师,通过跟学生的交换,也进步了翻新思维和创新能力,这样对他们来说也是一种学习,也是一种提高。所以这两者联合当前,能够造成校企长期单干的继续力,这个可继续倒退肯定要双赢,如果是单赢的话,肯定是继续不了的。这是我的了解。

December 17, 2021 · 1 min · jiezi

关于游戏:TGDC-网络游戏与儿童发展

各位朋友,大家好,很快乐可能有机会与大家分享,我来自中国青少年研究中心,明天跟大家分享的题目是《网络游戏与儿童倒退》。 一谈到网络游戏,家长和老师们都十分缓和,家长老师都晓得当初社会上也出了很多监管游戏的一些规定,包含法律,那么到底应该怎么样守护这些爱玩游戏的少年呢?所以明天跟大家分享的,次要是四个方面的内容:第一,孩子们眼里的游戏是什么样的?他们认为什么是游戏;第二,要跟老师和家长分享的是,到底什么样的孩子容易沉迷网络游戏;第三局部的内容,沉迷并不是必然的,到底是什么样的家庭,还有什么样的成长环境容易使这些孩子沉迷;最初一部分,我想跟大家分享的是咱们到底应该怎么办?怎么样可能治理好这些网游少年,真正的去守护他们的健康成长。 首先,跟大家分享的是第一局部的内容,游戏到底是什么?咱们首先要晓得孩子们到底怎么想的,往往成年人会从成年人的角度,咱们会感到很焦虑,一谈到游戏的时候家长很焦虑、老师也很焦虑,包含咱们作为游戏的开发者也会很焦虑,不晓得怎么样做才可能更好的适宜未成年人的成长,所以,首先咱们要去理解,这代孩子他们怎么对待游戏的? 我在的单位中国青少年研究中心,专门做过一项钻研,就是要理解孩子们对游戏的认识,咱们想听听未成年人怎么说,从这个图上的数据大家也能够看到。 首先,全国未成年网民的普及率是在一直攀升,这个图片出现的是2021年7月20日共青团中央保护青少年权益部和中国互联网络信息中心,联结公布的未成年人应用网络的一个钻研报告,总体出现一个一直俯冲的状态。 那咱们再看一下,不同学段的未成年人,他们互联网的普及率也是在一直晋升的,比如说从小学阶段来看2019年才是89.4%,2020年曾经达到了92.1%,初中、高中、中职的学生等等他们的比例都是在一直晋升的。咱们来看看不同学历段的,未成年首次触网的工夫、首次触网,就拿小学生来说,学前、上小学之前触网曾经达到了30%多,上了小学当前才开始上网的达到了66.3%。总体来说,未成年人触网是一直攀升的,这样攀升的趋势就会让成年人更加的焦虑。 咱们不晓得应该怎么样,去守护这一代的未成年人,成年人十分的放心,各种各样的问题,比如说他们会不会玩成人的游戏,他们是不是会玩的工夫太长了,他们在玩的过程中会不会接触到一些不良的信息,会不会游戏沉迷,会不会在游戏上花了太多的钱,会不会被网络欺凌,会不会遇到一些不良的社交等等。 大家也晓得,随着网络的倒退咱们国家也始终在加大监管的力度,从2010年开始文化部就出了第一部的监管网络游戏的暂行办法,最新出的一个就是当初大家图片上看到的最下面的这一行《未成年人保护法》的网络爱护的专章。咱们说未成年人,他们是网络时代的原住民,就是因为他们从生下来就生在网络外面,他们的生存环境、生存形式都跟网络是密切相关的,所以孩子们会说游戏就在那里不论你禁不禁,我总是会玩的。这种状况下咱们怎么办? 咱们就是要去理解未成年人的想法,咱们看看他们是怎么想的,晓得了他们的想法能力从最有利于未成年人的准则登程,去更好的爱护他们,去守护他们。 咱们在全国进行的1万多份的大型的考察,这个考察是在全国的10个城市进行的,从调研中,咱们能够看到大部分的孩子,他们还是可能感性的对待网络的,他们也晓得比如说上网有可能会看到一些不好的内容,他们会看到一些负面的信息,也会看到一些侧面的网络作用,比如说上网是不是可能让他们开阔视野,上网是不是可能让他们理解一个更广大的世界,包含对人人都应该上网等等这样的一些认识,咱们看到同意的比例其实都是十分高的。那么,从这个角度看首先成年人应该放下一个放心,就是放心孩子们不意识网络过于把网络看得太好了,其实他们是可能看到网络的一些不良的问题的。 咱们在钻研中又发现未成年人有7成多,他们认为网络游戏可能缓解压力,咱们想为什么这代孩子他们那么喜爱网络呢?因为他们感觉网络给他们带来了很多的帮忙。 咱们又会想,有的家长老师又会说因为孩子小,孩子不懂事,所以会把网络看得那么好,把游戏看得那么好,是不是这样的呢? 咱们钻研发现,其实是年级越高孩子对游戏的认识越踊跃,这个给咱们的启发是什么呢?其实是说,并不是说孩子小,他对游戏没有一个主观的意识,相同,他正是因为有了主观的意识。咱们都晓得孩子到了初中,到了高中,他的抽象思维,他的判断能力,他的思考,甄别能力都会比小学要强的多。在这种状况下他们还可能认为游戏给他们带来了很多的帮忙,这就阐明这代孩子他们真的很喜爱游戏,他们真的很接收游戏,游戏的确在他们成长中、倒退中给了很多这样的帮忙。 而后呢,咱们再看这些负面的认识,因为网络游戏的确也有一些负面的认识也的确有一些问题,比如说是不是会有这种暴力的问题,会不会影响作息时间、影响学习、影响身体健康、早晨熬夜玩手机等等。咱们从这里看,反而是随着年级升高负面的认识在升高,小学四年级的孩子,比如说他认为通过玩游戏,能够接触到不良信息的达到了60%,到了高三反而变成29.9%,这个比例差异还挺大的,简直差了30%差了一半,为什么差这么大呢?随着年级升高而对这个认识意识越来越低呢?也就阐明这个孩子其实开始曾经有了他的判断能力了,有了判断能力当前他会判断,原来带来的所谓负面影响对我来说并没有多负面,我能够战败它,我能够了解它,我能够本人治理好本人,所以对于高年级的孩子来说,他反而会感觉这个可能不算不良信息或者说这个并没有什么,对我来说并没有什么,那么对于低年级的孩子也可能受家长的影响,受老师的影响,反而感觉这个游戏就是个坏东西,这个网络就是个坏东西,很可怕的货色,所以他感觉更多的负面。 另外,也还有一点对低年级的孩子来说,当然他们要接触的咱们所谓,打了引号的这种洁净的内容会更多一些,所以他们会感觉说很多内容都不适宜他们。从这一点上也能够看进去并不是说当代的未成年人,他们自身对游戏有一个全面的认识。相同,他们是可能有他本人判断的,有的时候这种全面的认识,往往是来自于咱们成年人,因为咱们太想爱护好他们了。 比如说咱们钻研发现,超过7成的学生示意他们喜爱网络游戏。 这个给咱们的启发,孩子们既然是他生存里的一部分是他成长的一部分,倒退的一部分,他又这么喜爱,那咱们到底应该怎么样去做?怎么样去爱护他?他们喜爱什么类型的游戏?从咱们的钻研中也会发现,最喜爱3类游戏:第一类就是竞技类的游戏;第二类就是静止赛车类的游戏;第三就是模仿事实类的游戏。然而往往家长和老师怎么想的呢?说你玩游戏能够,然而你要玩教育类的游戏对不对,最好你要玩的过程中要受教育,不能白玩了。咱们成年人往往很功利,心愿孩子的任何一分钟都是有意义的,你不能做没有意义的事,你要去受教育的,所以大家看一下教育型的游戏,其实孩子示意喜爱的是起码的。 而后,咱们又问未成年人,说那你们感觉玩游戏到底对你是无利还是有弊呢?咱们发现少数学生还是可能主观的对待游戏的利弊,比如说大多数人都是认为利弊相当的,也就是说即有好的方面同时又的确存在肯定的弊病,所以说,从咱们的钻研中家长和老师,成年人齐全能够释怀,因为孩子们他们有本人的判断力,咱们置信这个00后、10后甚至将来15后等等,他们都是越来越可能主观的去意识这些问题的。 咱们再看一下未成年人,他们理论接触游戏是怎么样的呢?咱们发现6成是从小学中高年级开始接触游戏,绝大多数的孩子是什么时候开始玩游戏的呢?是小学的中高年级。 他们取得的那些游戏的信息都从哪来的呢?更多的是从伙伴这里。其实给咱们的启发是什么呢?也就是说孩子们跟咱们讲的一句话说:“老师,如果我要不玩游戏我就被同学摈弃了。”就阐明这个游戏是孩子们的社交语言,他要通过玩游戏跟敌人社交,他很多对游戏的理解是因为要跟对方当敌人,所以说一方面游戏流传是在同龄人中流传的,另外一方面,这是他们社交的一部分。 而后再看是谁反对他们玩游戏?也是同龄人最反对玩游戏而老师、家长都是最不反对的。这也还是印证了刚刚说的问题,就是说这个游戏是同龄人之间来往的一种话题。 还有一个偏向咱们发现也十分有意思,问题好的学生玩游戏他们失去的反对是最多的。就是说咱们成年人对孩子,可不可以玩游戏这个判断从哪来?咱们是拿问题去判断他的,这个我认为是十分不合理的。 首先,作为这一代孩子来说,既然后面讲到了他们作为网络时代的原住民,他们那么小就触网了,那么大的群体都在触网,而后他们那么喜爱网络、那么喜爱游戏,如果咱们拿问题去判断,是不是咱们剥夺了一些孩子娱乐的权力?咱们明天谈未成年爱护,往往一方面在爱护他,另一方面又在挫伤他,咱们说为了爱护你,所以不让你玩游戏,然而当你考得好的时候又让你玩游戏,这就是成年人的双标,咱们拿不同的规范去要求孩子,咱们对孩子是用问题来判断的。所以,我认为,娱乐是孩子的权力、是未成年人的权力、是儿童的权力。 咱们再看父母在跟孩子亲子沟通的时候,咱们谈不谈游戏呢?咱们发现孩子更被动和父母谈游戏,近7成的父母是从来不谈游戏的,咱们越缓和,咱们把网络、把游戏当成了洪水猛兽,那么孩子们就会去找他人谈。另外,当孩子被动谈,家长不敢谈的时候就造成一种代际的隔膜,代际的矛盾。 再看有没有家长给孩子举荐游戏呢?咱们发现常常给孩子,举荐游戏的这种家长还不到1%,所以,可见咱们成年人有如许的恐慌、如许的焦虑、如许缓和,咱们如许胆怯孩子接触到游戏。然而,和孩子对游戏的那种喜爱相比,这两头是不是一个显明的比照,这种显明的比照其实正是咱们看到,当初很多的极其的个案呈现的背地的深层次的起因,游戏可能是一个导火索,可能是一个看起来的间接起因,然而它背地深层次的起因往往是成年人不太关注的。 再看成年人往往怎么去管未成年人呢?怎么管孩子呢?咱们发现,限度、监督、禁止为主。也就是说小孩儿去管孩子的时候,就是说不让你玩,我盯着你或者说我限度他,这是次要的。而踊跃沟通陪伴的仅有1成,这给咱们的启发是什么呢?有没有可能把这个代沟变成一个代桥呢?有没有可能把游戏变成亲子沟通的一个话题呢?很多家长不想把游戏作为一个话题或者说不敢把游戏作为亲子沟通的一个话题。 第二块我想报告的是什么样的孩子会沉迷游戏,咱们也做了一些钻研。 在2009年的时候已经专门钻研了未成年人沉迷网络,咱们用了一些规范去筛查到底什么样的孩子会沉迷网络?到底有多少人沉迷网络?在2009年发现这个比例是6.7%,也就是说在考察的1万多份问卷里,在全国10个省1万多份未成年人填答的问卷外面筛进去有6.7%的孩子,他们有沉迷的特色。这是在2009年、2019年,隔了10年用同样的问卷在全国8个省,也是1万多份未成年人填答的问卷外面。咱们又筛查,发现达到了18.0%,所以说,其实事实也是很严厉的,的确是在回升,这个是不可回避的,这是第一点跟大家报告的。 第二点咱们又发现年龄是提前了,孩子还是因为他触网越来越早,触网的比例越来越大导致的。 我说了半天沉迷,可能有的人就要问,到底什么是沉迷呢?到底什么是成瘾呢?其实成瘾的规范在2018年的9月国家的卫健委已经公布了一个,中国青少年衰弱教育外围信息及释义2018年的版本,这外面讲了网络成瘾的定义说对网络有一些什么样的行为。说了两个最重要的两点:第一点就是说没有成瘾的物质,它不是说吃了一个什么货色成瘾了,没有物质性的货色,而后他有失控,有伤害而且要12个月以上,要达到12个月以上这样的伤害,咱们才叫它成瘾。而且成瘾不光是游戏成瘾,成瘾包含很多,比方应用网络、有游戏成瘾、有色情成瘾、有信息成瘾,还有社交关系成瘾等等各个方面的。 咱们作为研究者来说很难去始终跟踪他12个月是不是有这样的伤害,所以在钻研中包含咱们当初广泛谈到的是沉迷,尤其是在当世界卫生组织把成瘾作为一种精神疾病的时候,咱们往往不太去提成瘾,因为不好去界定他是不是有精神疾病了,所以咱们谈沉迷。 刚刚报告的后面几个数据,都是2009年的时候咱们做考察,过后用了美国的一个学者金柏利·杨,他有8个题目,这个题目当然最早的时候是专门来测这个人是不是有酒瘾的,起初他就把它扭转成了一个测网络成瘾沉迷的问卷。到咱们这边,就把它本土化了当前变成这样8个题目。 通过这个筛查咱们发现沉迷者到底有什么样的特色呢?他们在用网上有这样的几个特色:第一个就是9岁以前上网,说白了上网工夫比拟早;第二,每周上网超过2次,上网的次数多,每次上网超过1个小时,上网的工夫长,用手机上网,还有就是在网吧、同学家、朋友家、公共场所上网;最初一条其实就是说没有监管,家长、老师都不晓得、就在朋友家、在网吧等等。 刚刚讲到的是沉迷者他们用网的特色,当初讲一下沉迷者他们在生活上有一些什么样的特色呢?有这样几个特色:第一个是住校,不与父母独特寓居的学生。有的家长会说让孩子住校,住校学校管的严,孩子就不沉迷了。然而咱们发现如果住校,不是跟爸妈一起住的,比如说本人住,跟爷爷奶奶住的,都更容易沉迷,还有常常感到学习负担重,家左近收费的娱乐场所少,课余时间单独一个人,没有工夫做感兴趣的事等等,这样的孩子如果生存有这些特色就更容易沉迷。 上面拿数据跟大家讲一下,能够看一下有很多家长说把孩子送到学校,学校管着,又用不了手机,所以不沉迷,然而咱们发现如果住校沉迷的比例是23.7%,只和爸爸住沉迷是22.9%,只和妈妈住20.3%,如果和父母独特住16.8%,刚刚我讲的当初沉迷的比例达到18%,咱们看到低于18%的是和父母独特寓居的,其实跟父母独特寓居有很多很多的益处:一个是监管;第二,对孩子来说他有一个和煦的家,这个家对他很重要,他有情感的寄托,家里有爸爸、有妈妈,他感觉很平安,很和煦,他生存成长中遇到的很多问题都能够失去解决和帮忙的,所以他不会在一个游戏下面玩那么久的,玩游戏沉迷的肯定是他生存里有问题了。 另外刚刚说到感到学习累赘中,这个从图上大家也能够看进去。 另外,没有工夫做感兴趣的事就是咱们家长往往把孩子的业余生活给排满了,写完了作业就要上课外班,不能上课外班就偷偷找中央补,如果再不能补了就家外面给你留作业,给加码孩子本人感兴趣的事就什么也干不了,所以这个孩子很烦,他肯定会去玩的。就像后面咱们一开始讲到的,游戏就在那里,不论你管还是不论,我总是会去玩的。后果发现,如果他常常有这种感觉就是说没工夫做感兴趣的事,反而沉迷的比例就很高,所以给咱们的启发,其实咱们应该安顿好孩子的课余生存,让他的生存,课余课后的生存有意思,让他能常常做一些感兴趣的,造就一些兴趣爱好。 再看沉迷者的心理特征,咱们看他心里上有些什么特色呢?他往往会常常感到孤单、常常感觉不受敌人欢送、常常感到被瞧不起、不长于沟通、不长于人际交往,心理压力大,对将来迷茫还有常常感到不足体现的机会。 我挑了几条,比如说常常感到孤单,咱们看到如果这个人常常有这样的心态或者有时有这样的感觉,那么他沉迷的比例都更高,这个蓝色的都高于黄色的,素来没有这样的特色的,就是没有这样感触的,失常上网、用网的比例都是更高,还有常常感到被看不起,这个也是这样的,就不具体跟大家解释这些数据了。 ...

December 17, 2021 · 1 min · jiezi

关于游戏:TGDC-网络时代下的家庭教育

未保专家团队嘉宾: 邓亚萍(世界冠军,腾讯成长守护家庭沟通打算发起人) 郑磊(腾讯未成年人爱护体系负责人) 张雅莲(中国儿童教育倒退核心副主任,驰名亲子教育专家) 刘梦霏(游戏钻研学者、游戏化设计师,北京师范大学数字媒体系讲师、游戏的人档案馆馆长) 刘梦霏:随着数字化时代的到来,围绕着网络应用、电子游戏等等方面其实有各种各样的亲子的矛盾和争议的产生,围绕着这些主题本期TGDC的圆桌论坛,其实请来了各位专家和老师来对这个问题进行研究,明天咱们到场的嘉宾:有腾讯成长守护家庭沟通打算的发起人邓亚萍女士。 邓亚萍:大家好! 刘梦霏:有腾讯未成年人爱护体系的负责人郑磊学生,也有亲子教育专家张雅莲。 张雅莲:大家好! 刘梦霏:我是本次未保会议的主持人刘梦霏,是游戏钻研的学者,明天忝居主持人一职,跟各位老师一起探讨一下:数字时代应该怎么意识亲子在游戏方面引发的种种问题。第一个话题,其实心愿各位老师们可能从本人的经验和业余视角来分享一下,为什么在当初数字时代,未成年人呈现了种种在电子产品方面的沉迷问题或者行为偏差问题,咱们还是先从张老师开始。 张雅莲:几位老师好,其实刚刚咱们谈到的为什么很多孩子喜爱沉迷游戏我感觉最首要的问题,第一个是充实,精力层面的充实。其实在肯定年龄段内孩子其实特地心愿被认可,心愿被认同。往往这个时候家长因为工作忙碌或者平时可能感觉这期间曾经大了,咱们曾经不须要跟他更多的沟通,感觉本人也能自理了,有什么可聊的。往往这时候咱们错失了孩子成长过程当中,精力层面最须要被认同、最渴望被认同的阶段,如果生存当中没方法给我认同,我又感觉精力上没有什么货色能够空虚,我就要找寻能够让我感觉被认同,能产生成就感的事来做。游戏能够给他这个,然而他真的心智倒退不成熟,看着很高的个子,曾经上初中、上高中,其实精力层面包含心理层面真的不成熟,所以他没方法管制这个工夫,不要说孩子,有的时候成年人还很难把控。所以在很小的时候真的须要给孩子,很清晰的界定,包含办法,可能有的时候咱们疏忽了。第一个精力层面孩子们真的须要更多元化的认同和空虚。 第二是外在环境方面。可能有时候咱们的家长本人也在玩游戏,或者本人在过程中找一些空虚的点,孩子耳濡目染确实受到不好的影响,因为他本人也不分明哪些是好的,哪些是不好的,比方我经常开玩笑说家长在家里看书,看书的过程中他越看他在笑,很开心,孩子想证实这个书是能够给我父母带来很多愉悦情绪的办法。当初变成很多家长本人拿着手机在笑或者是玩着电脑在笑,缓缓孩子就会感觉那外面会有更多好玩的货色,能让他的精力层面失去一些空虚,咱们讲家庭环境的影响,包含外在环境的影响也是一个主导,然而归根结底还是孩子年纪小不懂得怎么去管制这个工夫,而又没有一个很适合的形式办法,把他这个工夫空虚起来,或者给他更多来自于精力层面的需要。所以造成孩子可能会有沉迷于网络,或者是不晓得应该怎么调配和把控工夫的状况。 刘梦霏:谢谢张老师,其实方才张老师说的时候我也在想,我感觉您这两个角度切入的特地好还,我还想在您的根底上补充一个角度,从社会环境咱们当初自身是工业社会,其实我本人之前钻研始终游戏的社会影响,我有一个外围的论断,咱们在工业社会玩游戏其实不是因为游戏,是消遣或者游戏是发泄,失常状况下能咱们听到“游戏是”的那种货色,我感觉咱们在工业社会玩游戏是因为工业社会的特点其实是流水线体系,它的反馈来的特地长和慢。你这个环节的影响要到下一个环节能力看到,这对整个社会化大生产来说是好的,效率是高的。然而对于其中生存的个体来说,其实这个体验相当好受,像后面张老师说到的,可能说的孩子自身的共性在倒退过,它须要和四周的环境是有这种强互动反馈的,然而这个环境可能给不到他。很多时候我感觉咱们在工业社会玩游戏其实“寻找做人”的感觉,就是你在游戏外面,你其实能对游戏里的人造成影响,既有社群的影响,也有对环境的影响。这种影响反而是咱们在现实生活中更难获得的,我的观点是感觉,如同感觉在游戏这个问题上,很多时候咱们老强调娱乐是人的本能,但它不只是这样,它其实原本可能是一个更深的货色。咱们能够在游戏外面追寻很多,不从管是时代记忆来说或者从意义感来说或者从人的残缺实现来说,咱们为什么要器重游戏,因为每个人天生都是游戏的人。就是HomoLudens就如同咱们是HomoSapiens智人一样。不晓得其余老师怎么看这个问题? 郑磊:对,我其实还挺批准刘老师的观点。因为我的身份是腾讯成长守护平台的负责人,我个别在里面分享的大多数主题会,“对于怎么监管孩子、怎么亲子沟通、家庭教育”的问题,其实作为游戏行业的从业人员来讲,其实我心田的观点首先要抵赖会有对电子产品、数字内容、游戏的沉迷,这是客观存在的。同时咱们要想一想,沉迷的游戏和人类历史上沉迷的其余货色有什么区别?游戏是什么?咱们有一个外围的判断,游戏其实是始终以来倒退进去的艺术模式或者一种交互体验伎俩,也就是解决了刚刚刘老师讲的在工业时代,一个个体的人类曾经没有方法去通过亲自实际,来领会感触所有的世界上产生的事件。怎么去体验?你只是很小的一份子,你须要很多形式来帮忙你,比方方才讲到浏览,包含起初发达了有戏剧、展览、雕塑、绘画,甚至前面有影视作品,都是在让咱们感触不同的世界,古往今来不同的状况下的故事。游戏其实是它们的升级版,给了你一个更加交互的、互动的、身临其境的,而且具备有一个响应机制的,你做得好就有处分,做得不好就有惩办,这样一个齐全互动式的让你去体验世界的形式,所以你首先要晓得这个货色的确很引人入胜,会让人沉迷。 第二,它实质上不是一个横空出世的摆在这个时代,或者由电子设备、由手机带来的一个纯正是负面的货色。其实也有它历史沿革,是科技带给咱们须要适应和面对的问题。在这个外面,我感觉很多孩子,说到青少年,会对游戏有很多依赖或者沉迷,它更多是说它曾经适应了这种摸索世界的形式,它曾经适应了这种数字化社交的形式,然而它的上一代未必适应。我怎么和你沟通,如同我讲的话你都听不懂,对不对?那好,我还是在这个世界里更难受一些。你换一个角度来想,是不是他们某种角度更早的适应了数字化生存,可能也是,我感觉实质上不论以什么样模式的生存,真实世界也好,虚拟世界也好,我感觉孩子更多须要咱们的陪伴。哪怕他在做数字化动作的时候,咱们如果能跟他一起,可能状况就会不一样了。很多孩子在成长守护平台上跟咱们反馈说,我花大量工夫在这个中央,不是因为说我只想在这个中央,而是因为事实的世界让我感到更大的孤单,这个中央仿佛缓解了这个孤单,所以这可能是背地的起因,我感觉数字化这个事件,游戏化这个事件,可能大家都感觉到,科技在倒退可能不可避免,尽管咱们很多体验都是数字化的了,当初和平都是在打游戏那样的产生,可能更多的是说咱们怎么跟孩子一起去布局好这个事件,可能独特来适应这个问题,让孩子不要感觉说面对数字化冲击的时候,我只能在那个中央寻找我的意义,而在我现实生活中会显得特地孤单,那这个就可能有点迥异太大了。 刘梦霏:毕竟游戏也是这个时代最新的、最具统合性的媒介,可能从媒介倒退的角度来说,数字化时代的数字原住民被这个时代最先进的媒介产生这种吸引,我感觉其实是相当天然的事件。 邓亚萍:我感觉我很认同这种观点,我还是要从体育层面上来讲一讲,尤其我看到前面TGDC,这当然讲的是腾讯Game Developers Conference,如果讲Games,那我感觉Olympic Games也是Games,如果讲Games那体育也是Games,我想人类不仅是说要生存的很衰弱,要很好的物质,要有肯定的环境保护这个地球,同时我觉的是兽性使然,兽性是须要游戏的,兽性是须要玩的,兽性是须要开心的,兽性是须要结交敌人的。如果讲体育的几大性能,其中很重要的一个方面是身心的衰弱,还有社交的属性,体育特地重要的是社交属性,它肯定会找到一帮气味相投的,喜爱打篮球、喜爱踢足球、喜爱打乒乓球、喜爱打游戏的一起来玩,所以它还是兽性使然。大家喜爱一起玩,也不是孤单的玩,一个人没劲,我感觉咱们还要回归于明天这种状态。 方才郑总说的,原住民和咱们年纪大一点的人,可能在沟通层面上有一点阻碍,因为年纪大一点的人不如小孩们玩得溜,拿手机或者电子产品咱们比他们就是慢,在这种状况下,方才郑总讲的时候,我过后在设想,咱们小的时候打球,那都是父亲、母亲或者老人带着咱们走进了体育场、体育馆或者公园什么中央开始的静止,游戏不是这样,游戏是孩子们先玩,而后可能大人才开始玩起来,因为这是一个时代的产物,电子产品进到中国的倒退,互联网到中国的倒退才多少年? 郑磊:20多年。 邓亚萍:20多年,它有一代代的迭代,因为生存的养成、习惯的养成,读书、学习、生存,它是从小缓缓造成一种习惯。当初为什么没有孩子用手机玩得好,你就没有他用得溜,咱们再去学,兴许你们不一样,你们就是干(这行的)。 郑磊:反馈也不行。 邓亚萍:你们做开发的人可能更了解外面的逻辑和技术,然而不是做互联网开发的人,你说他可能多明确外面技术的情理,而且玩的利用的货色就是没有这些年轻人玩得快,所以我在想,方才你说的时候我就在思考,咱们打球的时候或者静止的时候都是父母带着去,家里人谁喜爱什么咱们就带着去了,因为当初这个阶段是孩子们倒过去先学了这个货色,小孩儿还不会,还没有习惯玩这个货色。我在设想,这帮孩子起来当前,再过十年、二十年当前,是不是家长带着孩子玩游戏,我不晓得。 郑磊:有这个可能性。 刘梦霏:其实当初看咱们父辈用各种游戏化的产品,其实很多时候,这不也是咱们还在跟父辈之间也有(交换),哪怕父辈不是数字原住民,亲子之间也有围绕游戏体验的交换的。 邓亚萍:它是一个时代阶段性过程中呈现的问题,咱们就应该在倒退的过程中解决问题就好了,不须要把它看成一个如许如狼似虎的货色,它可能是一个技术,可能是时代推到明天这个水平了,给咱们带来了一些新的货色,包含当初的电竞,怎么叫电竞不叫游戏呢?实际上它不也是体育项目吗?原来最早的时候各个静止我的项目,从古希腊开始就那几样静止,铁鼎,那就是人为了和动物抢夺食物的时代,要摔跤、要体能更加强健、咱们能力生存,那个年代是这样,而后看谁力量最大,举重相似这样。开始古希腊奥运会就是这几项静止,因为那时候的人还须要跟动物抢食,你的人生平安还得不到保障,所以逐步的演变到咱们有那么多的静止我的项目,奥运会有那么多静止我的项目,冬季奥运会、夏季奥运会,它是时代,一段一段时代一直的倒退,到明天电竞曾经进入到亚运会了,明年杭州亚运会正式的比赛项目。 回过头来咱们要看一看这个事件的实质,咱们那个年代是父母带着咱们去做静止,当初稍稍感觉到有点好受,孩子当初去游戏,家长没有做。同时可能在工夫调配上、工夫的治理上和自我束缚上有问题了,在这个方面咱们就讲,该怎么束缚它怎么治理它,怎么疏导它咱去探讨这个问题就好了。 张雅莲:像亚萍老师说的,我感觉这个事不要看成“洪水猛兽”,因为咱们当初一谈到游戏家长曾经气到不行,感觉它是怎么、怎么的事物,其实不是这样,任何事物还是要看它前期的实质,包含方才亚萍老师讲的,不要一味的齐全回绝它或者遏制它,其实我感觉更多的是设想教会孩子工夫的治理。 同时在这个背地,刚刚亚萍老师讲的一点十分好,因为这个游戏孩子特地心愿在群体外面被认知、被认同,他感觉这是一种玩的形式,跟其余小朋友、其余伙伴一起社交的形式,当初因为疫情很多孩子没方法进来,在网络上他能够联络感情,这也是联络感情的形式,我感觉家长应该是用主观的、温和、容纳的形式对待它,你会发现越激进的和它反抗,所出现的模式、状态越顽劣。你原本想通过一些形式心愿他失去很好的无限工夫的管控,然而你是硬着来,你会发现管控反而不起成果,反而孩子跟你抗衡的更强烈。 所以我感觉,第一,咱们看它的益处是联系情感的形式,第二,如果透过一些好的工夫的把控形式办法,甚至我感觉家长们有时候能够参加。因为你参加,跟他做敌人了,他感觉首先你违心承受我的喜好,违心承受我玩的事物代表咱们是敌人,你不能口口声声嘴上光说我很反对你,可是你一味排挤他所喜爱的货色,孩子认为你并不承受我。方才咱们谈了一圈,最重要的一点是咱们首先要认同孩子的一些想法,不要一味的回绝。而工夫治理真是须要咱们先走进孩子,用办法逐步、逐步、逐步给他办法,不能急。我感觉这个事真的急不来,越急越镇压。所有人最初失去的是前期很难动手,你想到的所有办法施行不进去,因为他感觉你基本不违心承受我的爱好,甚至不违心承受我的敌人,咱们很多家长认为所有玩游戏的孩子们如同就感觉不务正业,其实咱们有时候静下来想,玩的过程当中不是咱们设想都是顽劣的货色,他能学到货色的,比方团队的合作,包含他们之间的反应速度,甚至很多时候很多孩子学到跟学科相干的常识,他也能捕捉到,所以家长也要扭转意识,我感觉这个很重要。 郑磊:对于沉迷我想略微补充一下,明天是TGDC深度探讨的场合,作为沉迷的话题咱们讲了很多侧面的倡议,诚然有情理。然而大家常常也会问到咱们团队,大家都说有它的起因,也有很多好的方面,甚至像咱们这样的家长群体,成年人群体也没有方法很好的达到,老师们方才说的怎么安顿工夫治理,怎么独特参加?以至于长期达不成这样的共识,其实对整个社会、行业,包含对整个将来几代人,要面临的挪动互联网,或者数字化内容都是更大的挑战,咱们怎么尽快寻找到社会公认的形式面对数字化的浪潮?不然咱们难道真的长期去禁止某些货色吗?其实很难,这也是咱们在这个场合,也是最近一些政策变动能够给咱们更大的揭示,或者须要咱们做更大的致力来让它整个往更好的方向转变。 刘梦霏:我其实感觉,刚刚各位老师讲的,大家始终在强调一个重点,游戏是咱们这个时代最新的货色,最新的媒介很多时候就是会带来道德恐慌,咱们真的要从历史上看,电影行业最开始刚进去的时候,真的,美国家长特地恐慌,他们就说电影外面拿枪打人,这是拿真枪打真人,孩子是不是更容易模拟?就是这些血腥、暴力所有这些社会危险,实际上哪怕莎士比亚在他的时代也不是那么受欢迎,每一种新的媒介呈现的时候,因为它是新的所以大家都会有些道德恐慌,所以在游戏引发的道德恐慌这里,其实不陈腐。然而在这里可能还有一些相对来说比拟中国化的陈腐的货色,我本人之前专门做了一个钻研,从二十四史外面查游戏,看游戏的人是谁,他们的社会评估是怎么的,最初失去一个特地奇怪的论断,我去做搜寻的时候我预设的是中性后果。我想的是应该有些对于游戏好的形容,可能会有些坏的形容,最初总的来说应该是均衡状态,后果不是。你们晓得中国现代四书五经外面,二十四史游戏记录的是什么人吗?,昏君、佞臣、仆、妾、奴,没一个跳梁小丑,惟一还有一个提到跳梁小丑的是正面人物的幼儿时代,这种就是像司马光砸缸似的娃,意思是尽管同样是玩游戏,然而他和其他人玩的不一样,其他人是傻玩,他是有道德价值的玩。过后这个根底上我就提了一个观点,其实自身二十四史里传递的是一种“小人不戏”的态度,也就是咱们这个社会支流的正经人是不玩的,但这其实是十分儒家的态度。《红楼梦》里结诗社,诗社难道不是游戏吗?咱们看中国本身的游戏史,游戏行业的确也几经挫折,九十年代的时候、零零年的时候,其实游戏行业都是经验了一些压力,特地是像这个社会的不了解,像游戏洪水猛兽的问题,过来20年一直循环,从咱们有游戏行业起,感觉这个行业始终背着一个原罪。 我过后钻研的论断,尽管媒介的道德恐慌是各个文化都有的,然而咱们因为儒家对于游戏天生的意识,所以造成咱们这个文化更容易在不假思考的状况下,认为游戏是坏的和负面的。“小人不戏”的背地我感觉其实不是说儒家肯定要针对游戏,我感觉这是个人主义的媒介,和集体主义取向之间必然的落差,儒家小人为什么要修身?修身能力齐家、治国、平天下,意味着这层的意义要到下一层能力实现,在儒家的价值观里咱们在更大的圈层里寻找自我,游戏自身是强反馈的。所以玩了你立即就获得一个反馈,这也是后面咱们说,为什么人在游戏里可能有很大水平的自我实现?因为它是一种十分、十分强反馈的个人主义媒介,但你作为集体主义的价值观,其实就不太能承受我本人玩了,而后我曾经满足了,你当然还是心愿它能在更多更大的圈层去寻找。我感觉很多时候在游戏的问题上,咱们这个时代该当意识到它不仅是一个新媒介,而且咱们是带着一个burden在意识这个新媒介,咱们在儒家的影响上来看游戏,如果不把这个局部的意识先有觉知,很多时候没有方法侧面意识游戏,真的侧面意识游戏太难了,我钻研游戏14年,始终和各种社会偏见反抗,每次结尾都要说游戏不是什么,这就是因为咱们自身文化的基因太强了。所以特地是在这个根底上,我感觉能够沿着后面邓老师说过的,更理论的方面去解决当初游戏真的在青少年身上引发的问题。 说到青少年,很多时候咱们老是一刀切,哪怕是当初所有的青少年,18岁以下的都算青少年,孩子、少年和青年,从倒退心理学来说各个阶段需要其实不一样,咱们单纯从解决游戏和青少年关系的角度来说,兴许接下来能够探讨的点是针对各个年龄档次的青少年,不知各位老师感觉咱们怎么解决他们和游戏的关系更适合呢? 郑磊:方才的话题我想补充一点,整体对于游戏,或者手机或者挪动互联网、数字内容也好沉迷的问题,咱们有一句话的观点。沉迷肯定存在,那是度的问题,难在于整个行业以及社会怎么找到和它谐和相处的侧面的办法。回到怎么帮忙未成年人,可能在事实的眼前面对游戏的沉迷,方才说到肯定有办法,过往几年腾讯成长守护团队外面做了很多工作。第一方面是大家都很关注的怎么来管孩子、抓孩子不玩游戏。首先至多要做十分根底的监管性工作,不然上来就谈共鸣、聊意义,整个衰弱零碎在过往几年施展了十分微小的作用,甚至在媒体上一度被称为游戏行业史上最严的监管措施,每一轮都是踊跃配合政策要求,甚至每轮都在政策要求的额定根底上做了大量工作,比如说咱们岂但实现对时长、生产的监控,同时每轮一直优化对未成年人的辨认措施,也就是太多小孩子太聪慧,政策一轮一轮收紧,咱们始终外部开玩笑说政策原来规定是几岁到几岁,不在这个范畴内的孩子会想一些方法,当初政策越来越收紧,简直所有孩子都在想方法怎么来绕过这个政策,当初反抗的水平越来越增强。尤其这轮政策,这次开学上到了一个很严的政策,18岁以下,除了星期五、六、日早晨能玩一个小时,其余工夫不能玩,然而孩子有大量需要,这外面反抗不断加强,咱们做了很多措施,不论咱们理解的人脸识别、精准画像都一直让孩子们做到合规,很重要的一点,咱们感觉光靠打击、抓小孩是远远不解决问题,咱们不感觉把这个事做透是技术问题就解决了,成长守护的我的项目也做了很多工作,包含以前的亲子课堂家庭教育等等课程,最重要的咱们在过来做了“家庭沟通打算”,咱们特地邀请到亚萍姐作为家庭沟通打算的发起人,可能在全社会提倡怎么面对数字生存,怎么解决亲子沟通的问题、家庭沟通的问题。 这两头最最重要的一环,也是咱们打造了全国首档亲子代际察看节目,其实是个亲子的综艺重点探讨的是代际、沟通和察看,节目名字叫《敞开心扉的少年》,刚刚实现整个第一季一共10集的播出。在整个用户外面选取了十个家庭,每个家庭都有十分典型的故事通过节目出现进去,还请了专家、学者帮咱们一起分析剖析家庭的状况,咱们刚刚聊说,很难在家庭外面把家长和孩子放在很平等的(位置),吃饭的时候饭桌上可能做不到,但在那个场合十分有意义的平等的说出本人的心里话。所以这个节目播出之后引起社会的共鸣,岂但在亲子类综艺的排名比拟靠前,另外它讲的故事是在很多家庭,很多家长给咱们反馈好像看到本人家庭的影子,某些环节特地像家里产生过的事,过后怎么解决的,在这个节目上探讨其余解决的形式,是不是会有不同的后果,这个应该说除了在严格监管之外,在其余畛域做的十分重要的尝试。咱们不得不提一下,《敞开心扉的少年》亲子综艺节目的话题,亚萍姐的主场。 刘梦霏:的确,我之前据说这个节目的时候真的十分好奇,我自身好奇邓老师参加这个节目的感触,另一方我感觉这个定位特地好,相当于把重点放到青少年的身上,个别咱们讲亲子,亲在前,子在后,特地是在游戏的问题上,家长和孩子如同老是处于对抗的两方,感觉游戏肯定要横在他们两头的货色,而不是能够跨过来的一个桥的货色。听起来这个节目,自身切入的点是把重点、焦点移到孩子身上,当他们敞开心扉的时候,兴许家长天然就敞开了,之前的障壁可能就不是问题了,我没有参加,我只是听的时候感觉很好奇,所以很想听听邓老师多讲讲您参加节目时的感触。 邓亚萍:总体来讲,这个节目应该感激郑总他们团队,就是腾讯成长守护平台有这样的发心,他们做了很多工作,在两年前,咱们在探讨这个节目之前,他们过后有这样的发心,看后盾的时候,他们团队是在施行管控。在管控的过程当中有一些青少年给他们留言,有些什么样的问题或者什么样的状况,其实也有很多青少年的苦恼,其实这个节目真的来自于,他们失去那么多实在的反馈实在的青少年心声和一些想法,而后咱们才碰撞进去这样的节目,包含这季最初是选了最具代表性十个家庭,这源于这个团队很用心,真的不是一味的一刀切管控,像郑总说的越管控可能反弹力度就会更大,怎么可能在咱们当中有关上一扇门或者关上一个平台,让大家在某个场合外面能够去聊敞开心扉。其实就是这个意思,咱们过后就说怎么让大家更多的沟通,因为明天的社会咱们中国的社会,包含像咱们,我也有孩子,其实大家都很忙。不光是农村人去到城里打工,咱们可能和本人的孩子一周待多久?你一周也要出差,张老师必定会常常出差,我置信刘老师也一样。每天陪伴我认为真的不事实,但怎么可能更好的沟通?什么是更好的沟通形式?可能须要大家一起探讨的问题。包含沟通的品质,中国大倒退几十年倒退这么快,凭什么?不就是大家独特的致力,每个人拼命的奔跑,不论是城里寓居的人还是农村寓居的人,中国到明天这个水平是14亿人共同努力的后果,可能会呈现一些或多或少,家庭父母和孩子、亲情的缺失我感觉这是没有方法的,我作为女性常常会问,你作为女性怎么更好均衡家庭和事业?我置信大家肯定会被问到这样的问题,情理是一样的,包含家长、事业和家庭,家长和孩子这种关系。这个节目的发心真的来自于他们,他们看到大量的数据、大量孩子的反馈感觉很苦恼,我也没方法给我爸妈讲,他们也不听,甚至他们也不在。都在里面打工或者在哪儿工作,很忙。两年才碰出这个节目,最初用这个很真挚的名字《敞开心扉的少年》,一下就点题了。 咱们过后探讨这个问题,是不是这个问题能够拿进去,咱们认为是因为这是反馈社会景象,咱们探讨节目的时候不想给任何的定义,因为每个家庭、家庭的背景,所在的城市都不一样,中国这么大,咱们有56个民族,状况都不一样,如果说繁多的讲,明天咱们请了张老师,张老师说了几个办法。咱们不违心这样的模式,最初根本都是敞开的。是启发式的、更多是容纳,更多引起大家探讨的节目模式。这阐明大家都感觉,咱们还不太理解这么多家庭,成千上万家庭的各种状况,咱们更违心用第一季的尝试,到底看看是不是真的是一种社会的普遍现象,真的让大家来关注、独特来探讨,甚至很多的敌人跟我讲,这个节目当中很多时候看到咱们家的身影。像郑总刚刚提到的,还有很多敌人跟我讲,这个节目太好了,期期都看。真的是引起大家的思考和共鸣,我想这就是节目最重要的中央,大家都得想想,不光是孩子,可能家长也要很好的思考,有的敌人跟我讲说,看完这个节目当前,我也在检点本人。如同这样管也不太对,我认为这件事就对了,这次节目反应还是很好的,挺开心的,第一次很好的尝试。从数据来看感觉成果还不错,我看引起的话题量很大,我看了团队一个统计,引起大家的话题量达到21亿,我感觉很开心。这是过后咱们最最开始探讨的发心就对了,肯定要引起大家的探讨、关注、共鸣、反思,我感觉这是独特的事,不是咱们几个人的事,我感觉是这么一个状况。 张雅莲:刚刚亚萍老师说这些,我感觉感触特地深,一个是《敞开心扉的少年》这个节目,我方才始终强调咱们说不要跟孩子反抗,事实上我最近看过一些调研,发现但凡在专制家庭下,孩子沉迷游戏的比例是1.7%,专制的,你不要跟他抗衡的,专制型家庭沉迷的比例是9.7%,齐全放任型家庭孩子沉迷游戏的比例是11.7%。这个数据阐明一个问题,你越是独裁,包含齐全不论,因为有的家庭前期管不了,我齐全放弃你,这种状况下孩子更容易沉迷。反而平等的、专制的对待游戏这个问题,不把它当成洪水猛兽,你会发现孩子违心静下来和你聊,违心承受你对他工夫的调配,当然当初有腾讯成长守护平台,我感觉是太棒的事,有时候光是家长说是没有用的,因为家长容易浮躁,容易一下子就冲到后面了去了,我想说简略无效,尽管咱们说不能100%无效。这也是最近的调研,但凡家庭亲子关系的亲密度每晋升10%,游戏沉迷就降落9%,所以游戏这个货色不是所有人玩了都沉迷,有的孩子玩了没有沉迷,起因是亲子关系的亲密度够,我有大量工夫能够跟孩子聊天沟通,让他感觉爸爸妈妈认可我,有大量工夫还有其余的事物安顿生存足够富余,孩子感觉你认可他、关注他、尊重他,事实上沉迷不是说100%的,我感觉真的要辩证的看。尤其是《敞开心扉的少年》我感觉看了之后,家长们都晓得“专制”很重要,因为节目当中真的很专制的坐下来聊的,平时可能没有这样的机会,方才我和郑总、亚萍老师在谈,咱们平时哪有工夫聊孩子的想法,在这个节目中咱们都流泪了,亚萍老师也流泪了,我始终在克服,我想着说我不要流泪,其实那天我的眼泪在眼圈里,爸爸妈妈平时在孩子心目中是如许高大的形象,男儿有泪不轻弹,爸爸始终顶住的,但那个时候,爸爸率先哭了,妈妈也哭了,咱们作为家长都心愿孩子好,哪怕游戏当中有抗衡,咱们明确家长是为孩子好,孩子也晓得,然而当下他领略不了。 所以《敞开心扉的少年》的节目,配合腾讯成长守护平台真的起到十分棒的作用,一是让家长更主观;二是让孩子有进口,我置信很多家长只有看过这个节目,日后可能真的会当成家庭当中的惯例的家庭会议,每周拿进去一天,一天当中的一个小时甚至半个小时,孩子有一个进口,家长有一个进口。只有有良性的沟通,有什么解决不了的事,我感觉都能够。所以我感觉亲子关系回归家庭,可能是解决游戏防沉迷当中很重要的环节。 郑磊:说得很对,咱们刚刚聊到泪水,在这个节目外面简直每期都会看到泪水,我回顾过后有这个创意之前的起源,其实泪水也是很多场合贯通咱们的重要元素,整个家庭沟通打算外面还有另外一个模块叫“家庭评议会”,节目是对外大家都能够看到。然而咱们还有闭门的“家庭评议会”,把家长和孩子请到一起,就是典型家庭、剖析问题、专家评议,试图给出一些倡议或者疏导,咱们做过很多轮,问题各不相同,然而有一点,平时在生活中真的太不足沟通的场合。以至于把大家请来,大家最初聊着会发现,原来我的孩子是这样想的我十几年没有感触到这点,孩子会说我的父母这么看我的,我十几年没有感触到这点,这其实是十分重要的场合。再往前推,咱们最早在成长守护我的项目的热线,常常接到很多电话的申请包含上门来寻求帮忙的家庭,你会发现最终帮忙他,不是解决他怎么设置工夫限度,生产限度的功能性问题,而是帮忙家庭怎么进行外部沟通。回忆几年前,也是为什么有这个节目的初心,咱们发现作为一家游戏企业做一些工具把大家限度了,这个事很容易实现,大家寻求帮忙不是这个性能怎么用,甚至没有意识到家里有沟通问题,他跟咱们讲说,我让他干什么就不干什么,孩子说,他凭什么让我干啥,我不爱干啥?永远交错在这些爱恨情愁里。过后咱们想,咱们是不是有责任做一些模式和尝试,来试图去揭示疏导大家关注这个问题。兴许咱们作为一家企业,没有资格通知全国的家长应该怎么做沟通,这很难,咱们能不能发明这样的平台?因为咱们有做产品和做内容的能力,提供这样的机会让大家看到和领会到,能让咱们的家长、孩子、专家,其余各个维度的声音通过这个平台开释进来,笼罩更多的人,让他们看到之后有共鸣,这是咱们从解决家长的问题开始做闭门的家长评议会,开始做公开的《敞开心扉的少年》一路走过去的心路历程。 作为腾讯或者腾讯游戏这样的企业,咱们深信这个问题在社会各方的致力下会有方法解决,兴许有些方法能够管制,咱们把本人做得很好,做成行业榜样,有些方面能够给出领导意见,比方面对家长群体和学校群体,至多咱们能够做很多事让大家有一个平台,探讨、摸索,寻求可能的解决方案是什么,这就是咱们做这个我的项目的初心是什么,就是亚萍姐讲的初心是什么,初心在这个中央。 刘梦霏:后面也探讨过,围绕游戏有一个时代背景,有一个新媒介的问题,在这个根底上,你们做的工作更多是在做游戏素养的社会教育。中国长期以来,游戏钻研不是成型学科,我挣扎了14年还不是一个成型学科,这造成很多时候对于游戏的探讨、思考,包含咱们怎么解决游戏和游戏引发的问题,这些认知其实在很大水平上没有失去知识分子的器重,因为知识分子不关注这个问题,导致咱们对于游戏引发的社会问题老是从0开始,因为我自身也有游戏人的档案馆,是目前国内惟一的公益性质的行业基础设施,记录中国游戏和中国游戏人的历史,也藏了过来30年中国游戏产出的杂志、设定集,包含实体的游戏、游戏机。所有这所有,咱们也做一些游戏史的钻研,做的时候发现2001年中国有一本杂志《游戏批评》,当初大家可能都不晓得,中国已经有过快30本游戏杂志,当初还活着的游戏纸媒只剩一家,这其实是对于游戏的社会教育阵地的重大丢失,我方才说的《游戏批评》在第一期外面就在讲怎么利用游戏,最初决定了游戏能带来怎么的后果。 回顾这么多年对于游戏的各种探讨,发现它老是从0开始,可能后面曾经做了很多工作,每代都会有专家和老师和理智的开发者进去说,咱们其实该当从哪些角度解决游戏相干的问题。另一方面,因为不存在学科化的游戏探讨,所有的这些成绩就不凝聚在一起,甚至连游戏素养的概念都没有,你讲到文学、讲到电影,咱们都晓得有细分,电影可能有商业片、有试验电影,文学也是,有大众文学,有鄙俗的文学,讲游戏就是一刀切。什么时候听过把游戏分成作品,这个游戏是消费品,这个游戏是赌博,基本没有这种细分,公众畛域对游戏的探讨就是游戏坑害青少年,在这个意义上,自身明天的探讨,可能当前很多腾讯的工作,也包含教育专家们的工作以及游戏利益相干方的工作,大家能够在游戏素养上能够合力,游戏素养当然包含社会教育,也该当包含学校教育。我作为在高校的老师,我经常感到很困惑的是,为什么亲子围绕游戏的问题,学校感觉齐全不须要负责任似的,咱们也不是人造学会怎么观赏文学作品,电影也是,咱们都有学校教育的配合,老师都会教你一点点,比方这个作品是好的,应该怎么样观赏这样的作品,该当怎么抉择适合的作品。因为整个游戏素养的缺失,如同这方面简直没有任何学校会被动说,我来给家长、孩子抉择一些游戏,可能这些游戏对学历史、学语文无利,另外一些游戏管制本人的游戏行为,像后面各位老师说的,它基本不能只靠家长来解决,家长和孩子曾经在这个问题上是抵触单方,须要一个第三方。接下来必定更多探讨家庭教育,毕竟明天的主线是“亲子,”我真的很想把“游戏素养”的概念抛出来,它自身暗示着除了家庭教育、学校教育、社会教育以外监管部门、学界,就是所有人都该当在大的盘子里有一个本人的地位,这个货色是须要大家携手共进,该当把所有曾经有的案例、纪录片、成绩都放到一个盘子上,当前不必老从0开始。 邓亚萍:很好的思考。 郑磊:咱们在盘算明年第二季、将来第三季,未来可能也有内容拓宽的可能性,心愿把社会不同角色退出到探讨外面,至多大家一起探讨是个好事件,给咱们将来《敞开心扉的少年》第二季、第三季很好的思路。 邓亚萍:最早的时候,是想引起大家的一些探讨和共鸣独特关注,包含独特想方法解决,因为这是大家的事。其实谁也离不开谁,中国的事,当初是世界的事、地球的事,还是要讲回本人,然而把本人家得先弄好了,家长把孩子先管好了,孩子须要干什么就得干什么去,学习、静止,我感觉在整个节目过程中,给我几个印象比拟深的家庭,第一个家庭,正在张雅莲老师也在,父亲是哈佛毕业的,两个高知,儿子才29分考的。大家感觉几乎不能承受,然而孩子你说他真的玩游戏吗,也不是,不是这些问题,我是感觉有些问题不要通通简略粗犷归类到玩游戏身上,我感觉还得要具体事件具体分析。 刘梦霏:(游戏沉迷)可能是个症状,不是病因。 邓亚萍:还有一个我印象很深的孩子,那个孩子的确爱玩游戏,妈妈说:“你要玩游戏,我打你。“他说:“你掐我10下,让我玩半个小时。“这个我也挺有印象,他曾经养成习惯,我宁愿被你打,你打完了让我玩,我感觉讲条件这件事件是不行的。 刘梦霏:这个孩子在游戏里到底谋求什么呢? 邓亚萍:咱们认为平时家里人跟他关照比拟少,沟通是比拟少的,在那外面有小伙伴,有认同,没准儿他还打得挺好,我不晓得。 张雅莲:亚萍老师说得特地对,跟孩子讲条件是最笨的办法,我也遇到过这种家庭,咱们最近可能有看到报道,孩子玩游戏的时候须要充值,孩子感觉你太不尊重我,他跟家长的镇压,包含咱们说的对抗就会更显著,首先方才重复谈到的不赞成完全性反抗,讲条件,不论孩子多大首先当成成熟的人,他是有尊严的,对待这个问题肯定不能有偏差,如果不尊重他,这件事就没方法能够解决。方才亚萍老师说,孩子拧一下或者咱们说给20元或者在各个层面打压你,让你感觉玩游戏是十分不务正业的事。 刘梦霏:听起来也是个家庭中的权力斗争。 张雅莲:还有的家长看孩子玩,明天给你多少工夫玩,玩着、玩着,家长忽然感觉你必须进行,然而孩子刚好没有完结,他是一个team,一个团队做这件事,如果他退出,意味着这个孩子在团队当中,社交群体当中等于就没有“信用”了。所以咱们不要单纯的把他当成如同是肤浅的游戏,这背地真的要走进来,让咱们家长首先明确,游戏的背地要给孩子尊重,给孩子尊重之外更多的内容,可能咱们不晓得,所以不要一味的打压。我感觉很多家长这种打压,孩子正玩游戏,电源给拉了,把网线拉了,感觉这下你玩不了,后果这种反抗变成孩子有绝食的,还有更极其的行为,反而事与愿违,如果咱们想让他可能主观的把控工夫,不沉迷,有很多办法的,最高明的办法是强硬的反抗,我感觉这是不主观的。 刘梦霏:是的,还是要看到游戏背地的人,也不能把游戏当成一个单纯的家庭权力斗争的工具。郑磊:方才亚萍姐讲的印象粗浅,我依稀记得第三集还是第四集有一个小朋友拿手机,其实很典型,很多小朋友趁父母睡了,中午不睡觉,起来把手机藏在被窝枕头底下,家长过去摸枕头,装睡,手机是热的,在咱们节目外面有很多这样的例子。 最初让我印象特地粗浅的是,咱们最初有提要求,你提一个对爸爸妈妈的要求,亚萍姐刚问完,我认为提每周要让我玩几个小时这种要求,最初他说妈妈能不能多陪我一段时间?从孩子本色来讲的诉求,诚然游戏很好玩,有社交的需要或者怎么样,其实实质上还是有陪伴的需要,他陪伴需要可能有同龄人的陪伴,也必定有对父母陪伴的需要,那个家庭外面,我记得他爸爸过后说,我看的时候始终在问,他爸爸说每天下班很忙,每天要从早上7点上到早晨10点还是11点。我过后就说比咱们还忙,“996”,这么夸大,亚萍姐说的这是中国的客观情况,其实每个家庭不一样,节目里给咱们看的每个家庭的状况不一样,背地的情理是怎么找到方法,相对来说再忙能不能给孩子,有根本的交换、根本的沟通,有一个根本的坦诚的交换,而不是说你又玩手机了,玩手机玩的什么,是查作业题还是玩游戏,玩的什么游戏,这个游戏自身,是小伙伴社交还是纯正的打打杀杀,适不适宜我这个年龄,这些都能够沟通。孩子并不是说肯定要玩几个小时,然而有这个过程之后,前面共识的达成,方法的协调都会有十分好的根底。 我有一个亲自的例子,我小时候玩游戏,张老师说给20元,我小时候家长也管制,没方法,我每天不吃早饭把钱省下来,过后还没有游戏机,要去游戏房里玩红白机,因为它是按小时给钱的,你会想尽办法,我为什么说印象很深?因为我妈妈严控,我爸爸就说,你玩什么,游戏好玩吗?他没有问你放学干嘛,他说游戏好玩吗,你给我讲讲,我就讲坦克大战怎么玩,两个人要配合,你在右边,我在左边,过去的坦克对手级别不一样,我爸爸说,那么好,咱们一起买个游戏机回来玩,他解决了我跑出去不吃早饭的问题,他跟我说,明天我上班有工夫一起玩一局,因为两个人要配合,我不在,你也没人配合,先做作业行不行,OK,我作业做得特地快,我期盼他早点上班和我玩一个小时,我发现我特地珍惜的是什么呢?当然坦克大战给我童年很好的印象,长大之后我做了这个工作,做了这个我的项目之后,我更了解的是,过后我更珍惜的是爸爸跟我说,这个游戏是什么,你通知我一下,过后这样交换的过程其实从你来讲是一种十分难得的场景,这才是最贵重的,前面我进入游戏行业兴许和这个事件都有关系,我感觉家庭外面找到一个点能和孩子把这个事件谈透,而且大家没有走向暴力,这是十分重要的,可能除了极个别孩子须要心理咨询,从人口基数来讲,大部分孩子只有家长充沛沟通,齐全能够达到家庭外部手机应用、游戏工夫的共识,这有什么问题吗?达不成共识,置信很多事件也很难达成共识,咱们就要找本源,最终是让家长能无意识就十分棒,家长说看了这个节目,发现能够试试,这样就十分棒。 张雅莲:不要谈“游戏”色变,像刚刚老师谈的游戏有很多种品种,咱们须要静下心来跟着孩子走进来,就像刚刚郑总谈到他父亲反而是专制式的,你一专制,他如同没有什么事件不能够在桌面上谈,越是克制他、打压他,背地会想各种招数,反而不是咱们看到的,有很多孩子偷偷摸摸中午起来,咱们看到很多孩子面黄肌瘦,真的不好好吃饭、不好好睡觉,真的摊在桌面上,工夫安顿的好好的,反而失去的后果不是咱们之前想看到的点。 刘梦霏:我特地想响应一下郑总,同为玩家,同为小时候我爸带着我玩,我的例子和你其实很像,我也是和爸爸一起玩,不一样的是那游戏机是我爸爸买的,我爸爸也是玩家,我也和他一起打坦克大战,这个游戏给我带来的回顾十分美妙,因为坦克大战不是单纯的操纵坦克打对方的游戏,它是有一个建造关,能够本人造一个基地,就是想方法不让对方打到你的母巢。我爸爸其实是搞军事运筹学的,他教我说,你这个基地怎么建,这样他过去就打不到,那会儿我可能才4、5岁,啥也不懂,起初再往大的时候,我就感觉不仅游戏应该是亲子之间能够自然而然沟通的货色,而且我感觉它从最开始就是有创造性,从最开始就不是单纯的生产体验,我爸陪伴我玩了游戏,我俩都玩的很开心,而且咱们俩都在玩游戏的过程当中有所创造,甚至还学到一些怎么建一个母基地的事件,从4岁开始始终玩,我起初一路上了清华。 邓亚萍:你小时候玩游戏,他小时候也玩游戏,都上了清华。 刘梦霏:这个事其实有个梗,2018年的时候有一个性能与艺术游戏大展,过后我帮着策了,有一个游戏室的展是我布的,起初领导过去参观,有人跟领导介绍说,这是清华当初在读的博士生,她策动了这个展,她也玩游戏,领导过后问我,你玩游戏,你是不是也玩物丧志,我现场反馈是“必须没有,你看我都上清华了”,我本人回看本人的人生时,如果没有过早年跟我爸一起玩的经验,我一开始不会明确游戏是有创造性的,游戏这个媒介是我爸激励我玩的,所以反而我心态更放松,这有时候更像脱敏训练,我爸在我小时候就对我进行了脱敏训练,他带我玩好的游戏,等到前面不那么好的、更容易让人沉迷的游戏,我就感觉这基本不如我爸带我玩过的游戏。这个背景下,我反而更不容易呈现游戏沉迷的问题,我是真的一路问题都十分好,比方上历史课之前,我玩文化,上地理课之前,我玩个大航海,最初考试成绩还比只看书的同学更高,我始终感觉,对于游戏咱们该当有的是这样的视角,其实家长本人要先去理解这个媒介。 邓亚萍:还是要正确的疏导,我特地认同。我回忆咱们那个节目录制的时候,过后有一个小姑娘,她是喜爱艺考,她喜爱做主持,我不晓得你是否记得,学校各种流动都是她主持,她也想做职业的主持人,包含想走艺考,包含喜爱唱歌,她妈妈特地胆怯,说艺考这条路不行,肯定要让她好好学习,她们两个人十分强烈的碰撞,这个小姑娘写了一封信。我印象当中就是最终论述的意思,她是借某个诗人的诗把那个念给她妈妈听,我印象特地深,当她念给她妈妈听,她妈妈始终在哭,她说“我就是我,是因为你把我带到了世界,然而我就是我,我是独立的个体”,因为咱们都有孩子,过后我也受不了,我既能够站在妈妈这边思考,这个孩子,我对你的付出、对你的爱,完了你通知我“你是你”,话说回来这是一个事实,她的确是她,你再给她爱怎么样,她就是一个个体,她就是一个会长大成人的人,应该尊重她,那个节目让咱们特地打动,最初妈妈斗争了。妈妈对她始终要求很严格,我印象中那个家庭从河北过去的,中规中矩,要走失常的,又是女孩子,考什么艺考,艺考没考上就什么都没有了,这个姑娘很动摇,咱们试着让她唱歌,那天正好有袁老师,唱歌的歌手,评判一下,也让她下来念了一段话,那天正好两个嘉宾,一个唱歌的歌手、一个主持人,就让这个姑娘现场来,给家长倡议,后果给了她一段挺难念的话,主持人得很快就得念下来,没有工夫。她看了一遍就开始,确确实实主持人要比她唱歌好得多,而后再去疏导她,要做主持人应该有哪些素养,有哪些可能性,你是有机会的,同时也说给妈妈听,同时也给这个孩子更大的激励,像你说的你爸让你去打坦克,其实通知你一些军事实践的货色,军事实践小孩谁听得懂,听不明确。 张雅莲:是,4岁。 邓亚萍:通过循序渐进、正确的疏导,最初妈妈说“我尊重你的想法,你本人想分明,我相对的反对你”,两个人拥抱,那个节目给我印象特地深,这样的节目,有时候我是感觉真的不是在探讨游戏。 张雅莲:这个时代不是说孩子在学习,其实父母更须要学习,因为咱们不能再用之前,做父母的安分守己的形式来对待当初的孩子,当初的孩子每天所排汇的信息齐全不一样了,所以咱们肯定要与时俱进。家长也须要与时俱进,我经常说当今时代最须要的扭转不是孩子,其实是家长,咱们把本人的很多思维模式适当也须要做调整,当你做调整之后发现和孩子,无论是游戏方面还是学习方面都会有不一样的认知,你们之间的碰撞没有这么强了,我感觉还是都须要学,同步成长。 ...

December 17, 2021 · 1 min · jiezi

关于游戏:TGDC-游戏技术助力自动驾驶虚拟仿真

大家好,我是来自腾讯主动驾驶业务核心的孙驰天,明天我想跟大家分享一下咱们用游戏技术,来助力主动驾驶仿真所做的一些工作,在明天的分享开始前,想先有几个问题向大家发问一下。 首先第一个是,不晓得在座的各位,有多少是本人开车上下班的?下一个问题是,开车上下班的这些同学们,不晓得你们有多少同学在车上是搭载有辅助驾驶或者说是智能驾驶的性能的。那么搭载有辅助驾驶或者智能驾驶性能的同学们,不晓得你们有多少同学敢真正的信赖本人车上的辅助驾驶或者主动驾驶性能,让它来代替你做主动驾驶和辅助驾驶运行和决策布局呢。 其实当然我也看不到在座同学们的反馈,但之前咱们也在一些线下场合和交换里也询问过一些同学,咱们失去的反馈,其实并不如咱们设想中的数字那么乐观。大家对于主动驾驶或者说智能驾驶的安全性还是有肯定的放心的,所以明天咱们的分享次要是介绍咱们用了哪些游戏技术,来帮忙咱们更好的打造主动驾驶的仿真的技术,从而帮忙咱们主动驾驶自身的安全性有一个更高的晋升。 腾讯主动驾驶部门介绍首先介绍一下咱们整个腾讯主动驾驶部门,其实很多敌人、很多同学都会问我腾讯还有主动驾驶部门,你们是不是要造车呀,因为的确是能够看到目前整个行业外部做主动驾驶以及造车的公司越来越多。但其实咱们还是很明确的,腾讯是不会本人去造车的,那咱们做什么呢? 咱们的定位是做汽车行业的工具箱和加速器,咱们会去做帮忙主动驾驶落地的工具、软件以及服务,那会波及到比如说包含面向主动驾驶的模仿仿真体系TAD SIM,包含主动驾驶车端的全套软件TAD Pilot,也包含面向主动驾驶用的一套云工具链和云服务TAD Cloud,最初一个是咱们面向主动驾驶专用的,一种地图格局叫高精度地图TAD HD MAP。 当然明天的分享主题可能跟咱们面向主动驾驶仿真零碎TAD SIM更相干一些,腾讯主动驾驶的合作伙伴会包含政府、车厂、汽车制造商或者Tier1一级供应商之类的,当然咱们的合作伙伴也会和高校进行科研的、前沿的利用。 从技术钻研走向落地利用 腾讯主动驾驶是2016年正式成立的,在这五年来咱们也打造了三位一体的面向主动驾驶的研发体系,包含刚刚咱们说过的一个主动驾驶的云开发平台、主动驾驶的高精度地图的平台,也包含一个专门为主动驾驶或者咱们叫智能网联汽车服务的仿真平台。 落地难题1:感知算法训练 那咱们在这几年的研发、摸索和实际中碰到了什么样的问题呢?其实咱们很深切的感触到,在整个主动驾驶行业、或者咱们说智联网联汽车这个行业,有一些难题是困扰着咱们整个行业的后退和落地,所以咱们将这外面的最重要两点总结了进去。 第一是咱们在感知算法训练上所面临到的挑战,有一个比拟有意思的段子是说,人工智能、人工智能,你有多少人工能力有多少智能,这个点其实在主动驾驶行业里也是十分事实的,每年寰球这些做主动驾驶的公司,须要投入十分多的人力物力还有财力,来进行主动驾驶专用的人工智能算法的标注还有训练,这外面须要标注的这些样本,包含个别的汽车在路上常常碰到的交通场景,也会包含一些可能咱们平时不是很常常碰到,但咱们一旦碰到会产生比拟危险的交通事件的一些场景,咱们都是须要去进行数据的采集和标注的。 据第三方的统计,每年寰球这些主动驾驶公司,光在这样的数据集的采集和标注上,就有超过10亿美元的投入,所以这个投入还是十分十分微小的,而且这个数据集也是很难进行十分普适性的共享。起因是,当然,行业内有些公司会将本人采集和标注的数据集拿进去给大家去共用,然而其实在不同的国家、不同的城市内,是有不同的状况。 咱们举个例子,我国有些特色的场景,比如说外卖小哥、比方老头乐这种电动车 这种场景或者说这种因素,在别的国家是很少见到的,那这种因素的采集、标注都是须要咱们国家外部的这些科技公司来本人进行数据的收集和标注、制作。 所以这方面就会导致咱们的数据集,基本上是每家都要本人去制作很多很多的标注和采集的投入,这样的量级对于主动驾驶行业来说,还是比拟惨重的累赘。 落地难题2:测试验证 第二个比拟重要的问题,须要行业解决的是测试验证问题,在2016年的时候,兰德智库就提出来一辆主动驾驶汽车,须要通过110亿英里这个间隔,能力证实它达到一个合格的人类驾驶员程度,它才能够进入一个量产的阶段,那110亿英里是什么概念。这里咱们举了一个比拟直观的数字,地球到太阳间隔大略是0.932亿英里,这样相当于是不到1亿英里的样子,110亿英里就相当于100多倍的地日间隔,这个间隔行业里的公司们做到什么水平呢? 咱们拿行业里可能路测数据最多的谷歌无人车的子公司叫Waymo,以他的数据来举例,Waymo到目前为止,曾经实现了超过2千万英里的路测,即折合成0.2亿英里的数字,大家能够看到0.2亿英里,和咱们想达到的指标数字,110亿英里还是有一个十分大的间隔,而且这也是破费了Waymo很多年的工夫能力达到。所以这个数字将是咱们主动驾驶落地的一个十分大的妨碍。 解决策略:虚构仿真 那咱们行业里会去怎么解决它呢?目前大家看到比拟通用的方法,是利用虚构仿真的引擎、虚构仿真零碎,来生成各种各样的场景解决刚刚所说的两个问题。举个例子,第一个问题感知算法训练的问题,那咱们可能不须要通过这么多的实在采集车去进行数据的采集和标注,而是借由仿真零碎本人外部构建变幻无穷、多种多样的场景,比如说城市的、高速的、城区的、晴天的、雨天的、雾天的等等这些场景会生成各种各样的图像。点云、不同的数据集用来给做感知零碎做训练。这样做的益处,除了咱们能够很不便的生成各种天气也好、极其的交通场景也好、间接生成进去这些对应的场景也好,这是一部分。 另外一个重要起因,是因为由仿真零碎生进去的场景是自带真值的,“真值”是指什么呢?这可能是在人工智能里,用得比拟多的一个词: ground truth。它是指一个物体或者一个元素的主观属性,其实咱们在察看和理解这个世界的时候,咱们看到的货色、咱们认知到的货色、或者咱们摸到的货色,其实它都不是真值,它不是主观值,它是观测值。而真值是指这个物体自身就具备的主观属性,所以由观测值去推导它物体自身具备的主观真值,两头就会存在误差,这外面就会引入谬误,但由仿真零碎这种自带真值的零碎,它生成进去的、预带标注后果的数据,它的后果是100%精确的。所以通过这种形式能够100%精确的,生成带有标注后果的训练数据。 第二个问题测试验证,尽管行业内公认的谷歌无人车的子公司Waymo,尽管它目前只进行了0.2亿英里的路测,当然这里的“只”是有一点引号的意思在,因为他曾经是行业里遥遥领先的一个路测间隔了,然而他曾经进行了150亿英里的仿真测试,当然不仅仅是waymo了,在整个行业外部,应用虚构仿真技术来进行大范畴、大规模的里程测试,是一个共识,大家也将虚构仿真技术称作为主动驾驶技术的奠基技术,为什么要用虚构仿真技术,来尽可能的代替路线测试呢? 当然咱们不是说要齐全代替,咱们只是说应用虚构仿真技术来极大的代替,比方95%、99%的路测里程。有三个十分重要的起因,首先第一是安全性问题,说到安全性问题,我想大家能够把工夫带回到2018年的3月18号,在那一天,有一位可能大家会比拟熟知的人,一个很有名的作家李敖学生逝世了,当然这事是比拟受咱们关注,但其实在同一天、在主动驾驶行业内也产生了一件十分有冲击性的事件,就是在2018年的3月18号,在美国的亚利桑那州,uber的无人测试车产生了整个行业内、寰球的第一起主动驾驶测试致死事变,这个事变其实过后对于整个行业来说,是十分大的一个负面冲击,因为主动驾驶目前面临的挑战,如最开始我提的那几个问题一样,大家关怀的就是最外围的就是安全性这个点。你在测试过程中就曾经产生了致死事变,你又如何可能保障你的产品,当前在大规模利用的时候,能够解决这些你本应该解决的平安问题呢? 所以应用虚构仿真测试来代替实在的路线测试,就能够完全避免安全性的问题,因为在虚拟世界外部是不会有任何实在的伤亡,毕竟你在虚拟世界外部你把楼、把车、把路线都撞毁了也是不会有任何损失的,所以安全性咱们是用虚构仿真测试来代替实在路测的一个很重要的起因,也是咱们放在第一个的起因。 第二个起因就是工夫和金钱,可能在座的小伙伴们没有真正从事过主动驾驶算法的测试,我举一个咱们去进行一次主动驾驶路测例子,早上可能筹备代码的公布、发包、车端部署,中午咱们上车,把车开到指定的测试区域,因为不是所有区域都能够测试的,你必须要去政府指定的主动驾驶的测试区域发展路测,测完之后下午再把数据拿回来,拿到本地咱们进行数据的剖析和解决。 这样一来一回,那怕你只是调了你算法里十分小的一个参数、一个变量,那也是须要、至多须要耗费一整天的工夫来进行验证。咱们能够设想,如果当你进行更多的、更丰盛的场景测试,有几千个、几万个、几十万个场景须要测试和笼罩的时候,那这个所耗费的工夫和金钱是十分海量的数字。而应用虚构仿真测试来进行这样的测试,你惟一须要承当就是电费一个老本。 第三个咱们会重点提到软件OTA的回归测试,可能这个概念对于咱们的小伙伴们来说会有一点生疏,在这里我简略解释一下,软件的OTA是指这个软件可能一开始公布到主动驾驶渠道上是版本一,前面通过不停的云端推送来进行长期的降级和迭代。比方特斯拉,它是最典型的主动驾驶行业外部,或者汽车行业外部,会应用OTA不停的进行智能驾驶或者说辅助驾驶软件降级的一家公司。 回归测试,是指咱们每次降级之后,咱们要进行一个十分全面的检查和测试,来保障我最新的主动驾驶算法,是能够解决之前我所有曾经解决的问题,而不是说捡了芝麻丢了西瓜,或者拆东墙补西墙。我解决了新的问题,旧的问题又呈现了,所以回归测试是十分重要的一点。 大家能够看到的是,如果一个软件版本就须要进行110亿英里的里程测试,那当每次你的软件通过OTA进行更新之后,你须要进行回归测试的时候,那这个总的里程就是一个天量、天文数字,没有一家公司是能够接受得起的。 “绿洲”虚构仿真零碎 所以,应用虚构仿真测试来进行软件OTA之后的回归测试,这也是一个必然的趋势。所以基于下面的这两个解决方案,咱们就做了一件什么事件,咱们的指标是要打造一个相似于电影《头等玩家》中的“绿洲”零碎,当然最近也上映了新的电影《失控玩家》,大家可能也有一些同学去看了,也是相似的概念。 实质咱们的目标是要构建这样的虚拟世界,只不过接入到这个虚拟世界外部的,不再是人类的玩家用户,而接入的是被测试的主动驾驶算法,咱们的目标要生成不同的关卡、不同的正本,让主动驾驶算法来体验不同的场景,面对不同的艰难和挑战,让咱们来察看他们是不是能够,很好的去解决这些不论是路上常见、还是路上不常见的交通场景和问题,从而咱们来决定这个算法是不是曾经成熟到能够部署到主动驾驶车辆上,进行实在的路线测试或者规模的商用 。 外围仿真零碎的外围能力 基于这个目标,咱们就须要打造咱们的外围仿真零碎,咱们也总结了四个仿真零碎最外围的能力,在这里也是间接的列出来给大家。 第一个是对于一个真实世界的几何还原能力,对于世界的几何还原能力,大家能够了解为咱们去构建了一个游戏的场景,这外面可能更须要在三维的动态场景之上。不论是咱们的游戏里,咱们叫场景构建、还是地编,可能都是相似一个概念,只有很精确的将一个世界、实在的还原进去,我才有可能比拟精确的去观测它。尤其是咱们在做主动驾驶测试的时候,咱们不仅要将世界十分实在的还原进去,咱们还须要将去观测这个世界的算法或者是模块,咱们叫传感器,比拟准确的还原进去。大家熟知的传感器可能会包含摄像头,这可能是大家最理解的,其实在主动驾驶或者智能网联汽车畛域,咱们也会用激光雷达,毫米波雷达这样的传感器。所以咱们的指标是,通过对世界的残缺、准确的几何还原,来帮忙咱们进行世界的实在重建,以及基于实在重建的世界的传感器仿真。这是咱们做的第一步,对于世界的几何还原。 第二步就是要进行,对世界一个十分准确的逻辑还原,那几何还原解决了,咱们如何比拟准确的还原动态场景的问题,那逻辑还原须要解决的是,咱们如何去生成世界外部的动静的元素。动静场景问题,那动静元素就会包含咱们说的车、行人、外卖小哥、老头乐电动车。 想去还原这些动静因素,首先就要对这些动静元素有一个比拟形象、比拟精确的建模,车的静止轨迹是什么样子的、人的静止轨迹是什么样子,当行人碰到别的障碍物车的时候,它会有什么样的反馈,当行人碰到别的车、碰到别的行人的时候,是什么样的反馈。这都须要咱们在进行逻辑还原的时候,须要进行十分准确的还原,从而让这个世界外部的所有元素、动静元素、车流人流都更准确的贴近真实世界的这些元素的反馈。 第三要对于真实世界的物理还原,做物理还原的起因是因为咱们在做整个主动驾驶仿真的时候,咱们很关怀这些汽车静止模型,这辆车的动力学模型、它的电机、发动机、变速器、能源传动系统,当然咱们也会关怀汽车的轮胎和高空的摩擦等这些物理效应,所以只有当比拟精确、准确、实在还原出这些物理成果,能力失去一个比拟准确的车辆仿真后果,这就是咱们第三步要解决的问题。 第四步须要做的是高并发,这个可能在上一部分我也提到了,咱们做仿真零碎的目标,就是给这些主动驾驶算法建设十分多的正本,让他们去进行挨个的艰难和挑战。所以你想建设成千上万、几百万个正本,你就须要具备高并发能力。从而让这些主动驾驶算法,能够并行的进入到这几千、几万、几十万的场景或者正本当中去进行测试,而不是说我一个正本一个正本进行测试,那这样十万个场景量级的场景库,可能须要期待数个月的工夫能力失去一个后果。 所以这四个点是咱们目前总结的,对于主动驾驶仿真来说最外围的四个能力。 TAD Sim 1.0 从无到有构建数字孪生世界 基于咱们要去构建的这四个能力,咱们在过来的这五年工夫里做了什么呢? 首先咱们TAD SIM1.0也就是咱们第一个版本,咱们是从无到有构建了数字孪生世界,来去将咱们的主动驾驶算法放在外面进行世界的测试,咱们具体做了什么事件? 首先咱们基于主动驾驶专用的高精度地图,来残缺1:1还原了整个事实世界,而后咱们会将咱们的事实世界转换成一些真值,输入给不论是主动驾驶的算法也好,还是训练集也好,下一步咱们会在虚拟世界外部生成,变幻无穷的测试场景,供我的主动驾驶算法进行测试。 TAD Sim 2.0 实在数据+游戏技术双擎驱动 这就是咱们大略在前两年的时候,也就是咱们组建前两年的时候所做的事件。起初咱们发现只有这些事件可能是不够的,尤其在主动驾驶。咱们十分关怀的、仿真的真实性上是须要做晋升的,所以咱们又破费了比拟多的工夫,来利用游戏技术以及实在数据这两条腿、双擎驱动的形式,来帮忙咱们极大的晋升仿真零碎的真实性,当然咱们用了一些比拟不同的技术路线和形式来晋升真实性,包含在传感器仿真下来用游戏引擎的能力,包含咱们在做交通流的仿真上。咱们会应用AI、Agent AI的能力,前面会有一个更具体的介绍。 首先咱们谈到用游戏技术来晋升,咱们主动驾驶仿真零碎的真实性,咱们指的不是咱们小时候,带给咱们有限欢畅的这些游戏。 而是更新的应用最新的游戏引擎、游戏的渲染引擎或者游戏AI技术等等。来构建的这些次时代的游戏,这外面有很多货色是咱们能够拿来借鉴,构建主动驾驶仿真测试用的零碎。 ...

December 16, 2021 · 1 min · jiezi

关于游戏:TGDC-疯狂的选择不思议的皇冠创作中的再演绎

HI,大家好呀!我是来自腾讯NExT Studios的,《不思议的皇冠》我的项目的制作人小林,非常感谢能来加入这次TGDC2021的分享,这次我为大家分享的主题是“疯狂的抉择《不思议的皇冠》创作中的再演绎”,为什么我会抉择来给大家做这个题目的分享? 实际上是我个人感觉,有些创作行业实质上还是内容的创作,在当初的游戏市场环境中,咱们看到有很多产品是十分的同质化,也有很多产品都在竭力的谋求数据。在这样的状况之下,咱们感觉去创作些不一样的内容,去创作一些全新的内容,变成了一件有危险的事、变成了一件艰难的事,变成了一件冒险的事,甚至变成了一件疯狂的事,所以我心愿通过《不思议的皇冠》我的项目,在创作过程中的复盘,来为大家分享过后咱们创作这个游戏的经验和教训。 首先请大家先看一段咱们游戏的介绍视频吧。 https://v.qq.com/x/page/c3312... 不晓得小伙伴们之前有没有玩过《不思议的皇冠》这款游戏,这个游戏实质上,是以格子为根底的迷宫摸索类游戏。回顾过后这个游戏创作最原点,其实咱们陷入了翻新的陷阱。大家都晓得NExT是个以创作不一样的体验、创作不一样的游戏为根底的部门,咱们在过后做了几款不同的游戏,比如说《死神来了》《彩虹坠入》《幽林怪谈》等等,但咱们发现,在前面的创作过程中,掉进了这样的翻新陷阱,怎么回事呢? 咱们在NExT会分几个不同的部落,每天、每周都会在探讨各种各样的脑暴、各种各样的点子,心愿把这些点子变成可行的一个产品,在脑暴的过程中咱们发现了这样的状况,即咱们发明了各种各样的点子都十分好,但都只是单点的一个货色,它很难产品化。 跟大家举过后的一个例子,在某一天,有一个小伙伴提到了一个点,他说咱们在游戏中是不是能够有这样一种玩法,即咱们去应用一个声音的输出安装,玩家通过对这个输出安装去收回各种各样的声音,唱歌也好、谈话也好,通过玩家输出的声音的不同,这个安装会在游戏中输入各种各样的形态,玩家能够用这些形态来通过关卡来击败敌人,这个点子听下来十分的翻新,之前也没有见过,那咱们就想是不是能够把这个点子,再往后去做一些产品化了? 在这个过程中,咱们发现了很多问题,那么玩家输出的这些声音会变成多大的方块?玩家输入的这些声音会变成什么样的形态,咱们制作的关卡,会被玩家输入的这些形态,给一举跃过吗?咱们发明的敌人会被玩家输出的这些形态间接击败吗?咱们都不晓得,所以很难把它往产品化再去进一步的推动,像这样的例子亘古未有。 所以过后咱们通过了很长一段时间的脑暴、寻找点子等等这样的过程,咱们发现很难去找到,一个真真正正能落地的产品,于是咱们开始问本人,咱们本人是不是出了什么问题,或者咱们是不是掉入了某些陷阱当中,那起初是怎么跳出这里的呢? 游戏创作的再演绎帮忙咱们脱离了翻新的陷阱。所以,我想先跟大家分享一下,我认为游戏创作的再演绎是什么。 咱们先以FPS游戏为原形,介绍一下这个案例。大家都晓得FPS晚期的原形,是来自约翰·卡马可、约翰罗梅罗的《狼穴》或者《DOOM》,它基本上奠定了FPS游戏在最晚期的雏形,和日后连续了这么多年的根底玩法,那在起初演化出了很多不同的FPS的产品。 比方第一款游戏就是赫赫有名的《半条命》或者叫《半衰期》《Half-Life》,是1999年推出的。他的游戏制作人,大家应该也十分相熟,是来自V社的G胖,这款游戏在传统的DOOM类的游戏根底上,引入了十分不同的点,就是它在游戏中退出了很强的叙事感、退出了很强的故事,退出了很强的关卡解密。咱们晓得DOOM起初的续作《雷神之锤》,也就是《QUAKE》,它基本上就是一个无脑突突过关的游戏,所以在1999年的时候,玩家拿到了《半条命》游戏之后,就感觉十分的不一样,感觉这是十分乏味的一个新体验。 第二个想为大家介绍的例子,是来自任天堂《Splatoon》或者叫《涂鸦兵士》这款游戏。玩过的敌人应该都晓得,这是以颜料为弹药的射击游戏,玩家在游戏过程中,会应用各种各样的枪械来跟敌人进行对射,这跟传统的射击游戏是没有什么区别的。然而游戏中玩家的弹药是颜料,所以说整个游戏过程其实是涂色的过程,那这个体验也产生了很大的变动。 第三个案例是来自于《无主之地》,《无主之地》实质上有很强的《暗黑破坏神》的刷刷刷的体验感在外面,但我认为《无主之地》还有一个十分重要的点,是它的美术格调采纳了一种美漫的美术格调来描述、来刻画它产生故事的潘多拉星球,是十分不一样的感觉。所以我集体认为这三款游戏,其实有三个十分长的长板。《半条命》其实是在故事的演绎上做了很大的变动,《涂鸦兵士》是在游戏玩法上做了一个比拟大的变动,《无主之地》可能在视觉上做了比拟大的变动,或者咱们能够说这种变动,是对DOOM原型某一个长板的再演绎吧。 这个案例就通知了咱们,其实咱们在做的某种翻新、某些翻新的点,它其实并不和这个再演绎是划等号的,可能翻新会更聚焦于某些单点的内容,就像我刚刚提到的声音的案例,是一个十分单点的货色 。而实际上再演绎这件事件,会更强调一个体验,有了这样的剖析和这样的根底之后,咱们就回到过后咱们的陷阱、咱们翻新的陷阱。 咱们又问了一遍本人这个问题,咱们到底是不是要做一款翻新的产品呢。 可能不是,咱们可能真真正正想做的是一款要去从新演绎体验的产品,我认为这才是咱们最终的目标。 好!有了这么一个方向之后,咱们就开始抉择咱们的创作类型、大方向是什么。 过后咱们的眼光对准了RogueLike的原型Rogue,为什么在过后咱们会有这个想法,要去看一下Rogue呢? 因为回忆过后NExT,我刚刚举例所提到的这几款产品,其实都有一个独特的问题,就是他们的游戏时长都比拟短、他们的游戏内容也都比拟少,大略只能撑持2-3个小时、3-4小时的游戏内容,所以过后在NExT咱们就有一个诉求,是不是能够在前面的产品中去做出一个游戏体验时长能撑持到20个小时到30个小时甚至是50个小时。咱们是不是能够做到这一点? 咱们团队的规模是没有发生变化,咱们游戏的研发周期也是绝对固定的,所以咱们就想,哎!市面上有很多RogueLike的游戏,他们通过很多一些随机办法,做了很多游戏时长比拟长的一些产品,咱们是不是能够往这个方向看看,所以咱们就盯上了RogueLike的原型Rogue。 那大家能够看到这张图,这张图就是Rogue的一张截图,是它在去年的时候,在steam把它的游戏从新发行了一下,这张图中大家能够看到整个游戏的画面,是用阿斯克马组成的,不论是路线,还是房间、还是玩家的角色、还是敌人等等,看起来十分简陋。 我为大家分享一下,这个游戏的两个外围重点。 第一是这个游戏是随机迷宫、随机生成游戏的过程。玩家的指标其实非常简单,就是进入这个迷宫的最底层去寻找一个物品,只有你找到了这个物品,那么这次的游戏你就胜利了、就完结了,但玩家能够重复的玩耍这个游戏,为什么?因为游戏的整个过程是随机生成,所以玩家每次在游戏过程中的体验,实际上是十分不一样的。所以这个游戏十分重要的点就是随机。 第二点是同步回合制的游戏,什么是同步回合制呢? 回合制大家都晓得,玩家和敌人在一个又一个的Turn下口头,而同步回合制不一样的点就在于,如果玩家不去操作游戏,那整个游戏就是暂停的状态,即整个游戏都不会产生任何的变动,如果你挪动一下你的角色,比如说你往前挪动了一步,这是通过了一个回合制,那么你的敌人就会跟着你的这一步挪动而发生变化,他们会朝某个方向后退,游戏中如果有一些机关它们也开始会口头,所以你动,大家就动;你不动,大家就不动。咱们就把它叫做同步回合制,咱们认为这是游戏十分重要的点。 通过一些探讨和剖析之后,咱们总结出游戏的两点,即Rogue的实质就是,同步回合制和随机生成,尽管他还有一些其余的点,比如说永恒死亡等等,但咱们认为这两个点是对于游戏机制影响最大的,也是最重要的。 这个时候咱们要不要去看一下市面上胜利的Rogue的产品,他们都在做什么呢?他们是朝哪个方向在做的? 咱们看了几个不一样的产品。第一款是以弹幕射击为根底玩法的Enter the Gungeon《挺进枪牢》,这款游戏大家如果有玩过都晓得,是难度十分高的弹幕射击游戏,游戏的过程中,有十分多奇奇怪怪的弹幕朝你涌来,就如同很多年前回到街机厅外面,玩小飞机的射击游戏一样。 所以咱们认为这款游戏作为RogueLike。它外围点就是把游戏的随机因素和弹幕射击组合而成变成了一个这样的产品状态。 第二款游戏是大家比拟相熟的Dead Cells《死亡细胞》,大家晓得这是一款横板的迷宫摸索类游戏,它实质其实是应用《河汉恶魔城》,也就是咱们常说的Metroidvania关卡设计的一种办法吧,通过这个办法来和随机做组合,就组合成了一个有随机感的《河汉恶魔城》,玩家每次玩的时候又会不一样,他也获得了一个比拟好的成绩。 第三款是Slay the Spire《屠戮尖塔》,这款游戏实质上其实是一个卡牌构筑的TCG游戏,所以玩家在游戏的过程中,须要组合不同的卡牌来与敌人战斗,但不同的点是,它整个游戏过程也是随机的,敌人可能是随机的,玩家抉择的门路可能是随机的,玩家可能会遇到随机事件、玩家的手牌可能也是随机的等等,所以它其实是把一种卡牌构筑和一种随机组合而成。 咱们通过观察市面上的这些胜利的产品,咱们发现了一个共性,就是这些产品它都是应用了刚刚咱们提到的Rogue中随机的局部,而对于Rogue中另外一个很重要的点是,同步回合制这个点,为什么没有产品去做?是不是有产品在下面做得很好?到底有没有产品在这个中央发力呢?咱们又去认真钻研了一下市面上的一些同步回合制的产品到底存不存在。 咱们发现其实还是存在的。比如说这两张图外面的游戏,下面的这个游戏叫《TangleDeep》,上面这个游戏叫《地下城冒险》。咱们也发现它们有一些共性,它们的外围点是把这个游戏在Rogue的原型的根底上把画面做得更好了,同时在游戏过程中退出了一些叙事、角色、NPC、故事等等。但它们都没有在咱们提到的“玩法”这个畛域,去对同步回合制做批改或者做变动。 所以咱们就认为,咱们是不是要做一个比拟疯狂的抉择、一个比拟疯狂的行动?就是咱们去尝试、去看看,去做市面上没有人做过的一个,去从新演绎一下Rogue中同步回合制这个玩法,去从新演绎这样一个点,这是我认为咱们做得比拟冒险、比拟疯狂的一个行动。 有了这个抉择之后,咱们就给本人的产品做了一个比拟明确的定位。把视觉做好,要做一个丑陋的美术。另外咱们要把玩法去做一个真真正正意义上的从新演绎,所以咱们的定位跟后面的产品不一样,咱们是玩法+视觉,这就是咱们这个游戏在寻找创作方向上时候的一个定位。 接下来咱们会思考,创作的空间在哪里?咱们这个游戏有没有提供足够的空间,能让咱们去做出咱们想做的事件呢?咱们又进行了一些工作。 首先咱们问本人一个问题,咱们想去从新演绎这个游戏的玩法,对不对?这个玩法它到底意味着什么呢?从新演绎玩法意味着咱们要做一件什么样的事件呢?回到刚刚所说的《Splatoon》的例子,你在游戏中用枪械在射击的时候,打进来的弹药是一种颜料而不是惯例意义上的子弹,我给它的定义是,它是一个玩法上的从新演绎,对不对。 那么咱们说,为什么咱们认为这是一个玩法的从新演绎,是因为咱们认为玩家其实是在应用一个他相熟的货色,应用一个其余游戏都用过的枪械,然而这个枪械射击进来的子弹是个不一样的货色,它是颜料,它有品质、有分量,它有本人的抛物线,甚至依据每种不同的枪械,它的抛物线、它的分量还不太一样,咱们认为这是一个十分重要的点。所以咱们把刚刚说到的这些实践,咱们提炼了一下。 实际上咱们从新演绎玩法意味着什么?意味着咱们要用一个相熟的外在来传播一个全新的体验。所以玩家在游戏的过程中,应该是在玩一个他可能相熟的货色、他可能见过的货色,他可能能够很容易上手的货色,然而他玩的时候,发现体验是不一样的,所以这个创作的空间就落在了这样一个点上。 再给大家分享一个案例,是来自微软的,一款赛车游戏《极限竞速:地平线》,玩过赛车游戏的敌人大家都晓得,包含咱们腾讯本人也在做QQ飞车等,一些十分好的赛车游戏的我的项目,赛车游戏是有两个极其的,一个极其是朝着拟真和写实的方向去,玩家在游戏过程中驾驶的赛车,会十分的强调拟真性,你稍有操作不慎,就可能人仰马翻、可能冲出赛道、可能赛车的问题会被扣分等等。另外一个极其是娱乐我的项目的赛车游戏,比如说《马里奥赛车》、比如说《火爆狂飙》等等,这些赛车游戏有一个特点就是,就是游戏里的赛车都十分的夸大,可能会装上火箭发射器、装上弹器,减速零碎等等。你能够在十分胡思乱想的世界外面去赛车、去驾驶你的汽车去比赛,这两个方向两头值有没有呢? 我感觉《地平线》抉择了这样一个两头值,他给予了玩家一个比拟相熟的感觉,就是你能够驾驶一个绝对写真的赛车,甚至是很多你本人在生活中,你本人的一个座驾。然而在游戏的过程中,他发明了这个世界,和他的这个规定其实是比拟偏娱乐的,他有一个十分大的open world,在这个world中,你能够开着你的车冲出赛道,并且游戏甚至激励你冲出赛道,去冲上山坡、冲上旷野、冲上雪地等等,所以你在玩耍过程的时候,就会有一个十分微妙的体验,你驾着一个如同十分写实的赛车,然而在玩耍一种如同是娱乐赛车一样的感觉,所以这个游戏找到了十分好的值,咱们认为这是一个十分好的案例。 ...

December 16, 2021 · 1 min · jiezi

关于游戏:TGDC-固守本心以诚证道独立游戏如何面对口碑崩塌

大家好,我是了不起的修仙模拟器制作人廖秋钥,很快乐能和大家来做这样一次分享。这次分享对于我来说也很非凡,因为很少有游戏像修仙模拟器一样,经验了那么大的口碑起伏,我也是借这个机会去梳理和总结咱们遇到的那些问题和思考,心愿能给同样在独立游戏路线上的大家带来一些思考或者启发。 《了不起的修仙模拟器》在2019年1月11日上线 Steam 和 WeGame 双平台,在不到一天的工夫里,双平台的好评率别离跌到了50%和45%,WeGame的好评甚至一度降落至27%,能够说过后双平台的评论区都被一片红色的批评之声给吞没。 团队在游戏上线前曾有过一些心理准备,不论是bug太多、还是游戏不好玩。然而过后呈现的一些状况还是远远超过了团队的设想,因为除了游戏自身的问题以外,我还看到了很多别的货色 —— 剽窃换皮,说咱们骗钱跑路,甚至有人说是咱们是中国独立游戏之耻。 团队意识到这不仅仅是游戏差评,它还是一次口碑上的齐全崩塌。作为一个游戏人,如果游戏不好玩而被骂,其实是能够坦然承受的,但作为一个独立游戏创业者被质疑初心有问题,那这个挫伤是十分微小的。在那个最艰巨的工夫外面,咱们每天吃不下饭、睡不着觉,甚至是看到一条评论就会泪流满面,一度在是否放弃的边缘彷徨。 所幸的是团队最初还是挺了过去。在游戏发售后的第322天,Steam的好评变成了蓝色也就是70%,在第450天双平台的好评都达到了80%,30天的好评更是提到了90%-95%,到了明天,直到明天steam的好评是87%,WeGame的好评是82%。 01 口碑崩塌会产生什么影响?第一个是销量。 从数据上看,大部分独立游戏的关注度都集中在了第一个月,你的销量在第一个月里会占据总销量的80%。而玩家评估是否购买一个游戏的前提就是看评论,你的评论是好是坏,甚至你的评论是红色还是蓝色,都会影响他们间接去购买这款游戏。 在发售时的一次口碑崩塌能够毁掉你这款游戏的大部分支出,修仙在发售的时候呈现了重大的口碑崩塌,哪怕是通过咱们那样高强度的更新,甚至产生了口碑逆转,这样疯狂挣扎了两年半之后,咱们首月的销量仍然占据了总销量的40%。 第二个是团队。 我意识的大部分独立游戏开发者,他们其实都是有一份执念。在咱们独立游戏开发者看来,销量可能还是其次,玩家的认可以及他们对游戏的酷爱才是最重要的。在口碑崩塌之后的那些海量的差评,很多诛心的舆论会重大的影响这些团队的状态,甚至会决定他们的生死。 在对修仙模拟器整个历程进行复盘和剖析之后,咱们发现一个以前没有想过的问题,原来崩塌不是在发售之后,而是在发售前就曾经开始了。 02 口碑崩塌是怎么产生的?首先,不精确的宣传导致了谬误的玩家预期。 独立游戏往往都有一些微小的有余,可能是你的画面,可能是你的老手教学,也可能是你的某些零碎,甚至是EA这件事件自身。随着你宣传的扩充,你间隔你的外围玩家会越来越远,他们对这些问题的容忍度将会越低。 一个游戏越硬核,宣传的力度越大,那么产生坏口碑的几率就会越高,咱们在宣传的时候犯了一个谬误,就是咱们没有很间接的去形容出修仙这款类型的游戏和玩法,当玩家看到咱们的宣传词,外面有“门派”“修仙”“修行”等等关键词的时候,他们的第一反映就是:这是一款RPG游戏,这过后给咱们带来了很多非核心的玩家,也在发售后导致了十分强烈的口碑上的反噬。 其从是想当然的应答会带来微小的隐患。 对于大部分独立游戏团队来说,大家都是研发出身所以在应答很多问题的时候,咱们会很天然的去想当然它,修仙过后因为这个“想当然”的行为带了来两个隐患。 一是咱们提前一周在WeGame进行了一次预售,而后在游戏发售前的那一晚咱们邀请了几个主播敌人进行了试玩。 这原本是两个在咱们过后感觉很天然的事件,然而咱们很快就发现玩家很难承受一款预售一周的游戏,竟然提前一天被主播玩到了,这就导致咱们在WeGame的游戏评估间接掉到了27%。 第二个隐患更加麻烦,咱们在发售前没有去很在意,《了不起修仙模拟器》和《Rimworld》这两款游戏的即视感,咱们想当然的认为咱们的玩家在玩到游戏之后半个小时一个小时,他们很快就会对咱们的设计、对咱们的游戏有所了解。 所以咱们没有关注到在这之前产生的一些事件,比方有一位玩家跑到RimWorld的贴吧去宣传,导致那个贴吧的强烈的不满,在那个时候咱们就被贴上的剽窃换皮和碰瓷营销这样的标签,这也成了起初修仙起初上线之后的口碑崩塌的导火索之一。 最初是定价不合乎宣传人群。 咱们将玩家分成了三个类型,别离是外围玩家、一般玩家和公众玩家。 1.外围玩家就是对你的这个类型十分感兴趣的那些玩家,他们会在所有平台去寻找他们喜爱的这个类型的游戏并购买它。 2.一般玩家则是大部分对游戏很酷爱,然而他们并不一定喜爱你的这个游戏类型,当然如果你的游戏品质足够优良 他们也会为你去付费。 3.公众玩家则是更轻度的玩家,他们可能是来自于一些宣传甚至是出于反对的目标购买了你的这个游戏。 在咱们的教训里这三种玩家对于游戏价格的预期,差别大略在20块钱左右,修仙在过后咱们本人的定义是一个硬核的小众的游戏,所以咱们给本人定了一个面向外围玩家的价格,但因为修仙题材第一次在国内这样的亮相带来的热度。为咱们引来了很多很多的公众玩家,这一个问题也为起初的口碑崩塌埋下了隐患。 03 口碑崩塌如何防止和应答如何防止,在这里我给五个倡议。 第一是说你在宣传的时候要尽可能精确的,去传播你游戏的外围玩法和问题,特地是问题。 第二是你要去评估你的宣传力度是否匹配你游戏的类型和品质。 第三是不要去做那些想当然的判断,要审慎、要去思考、觉察那些潜在的问题。 第四是依据你的宣传力度,和你要面对的实在的玩家群体去筛选适合的定价。 第五是为可能呈现的危险及时做好筹备。 说完了发售前的危险,咱们回到游戏自身。其实不论是发售前有多少艰难或者危险,如果一个游戏在发售后呈现了口碑崩塌这样的问题,那么最间接的起因还是游戏有问题,你的产品不够好。 不论是内容不够欠缺,老手教学做得不好,还是门槛太低等等,其实就是一句话“游戏做得还不够好。” 咱们发现一个很乏味的事件:玩家会依据游戏的整体评估的不同而抉择不同的评估形式。 比如说他认为这个游戏太难,当一个游戏的总评偏差于好评的时候,他们往往会抉择一些自我调侃的形式去反馈这个问题。 当一个游戏的总评偏差于差评的时候,那么他们更多的就会用一些更加情绪化,更加强烈的言辞去给你形容这件事件。 其实所有的玩家对于独立游戏的态度都是十分踊跃的,产生这样的口碑崩塌,往往是因为一些情绪的扩充或者蔓延,或者是他们感觉他们没有失去应该有的尊重。所以当呈现这样的状况之后,我认为阻止情绪的蔓延,而且让玩家感触到来自于制作组的尊重,是最重要的。 回到修仙这个例子,咱们在遇到口碑崩塌之后,做了一些什么样的事件来阻止玩家的情绪蔓延呢。 一、屏蔽掉有效的声音。 你不要去听哪些发泄的声音,它会重大影响你们团队的工夫和精力,而且并非所有人都是你的玩家,你将应该把你的眼帘更加的集中放在你能够间接和玩家交换的中央。比方群、社区、讨论组等等。同时你也不须要去关怀那些在各种媒体平台上洋洋洒洒甚至几千字的那种剖析,他们不肯定是你的用户,他们可能甚至连你的游戏都可能没有关上过。 二、不参加参加辩论。 辩论不能解决任何问题,甚至在那个大家情绪都十分昂扬的时候,它甚至会带来十分坏的后果,修仙在这件事件上也做了一个谬误的示范。 咱们在发售的前几天去跟局部玩家产生了十分强烈的争吵,去加了他的联系方式,试图去解释、去赔罪,去做了很多咱们认为能够解决问题的事件。然而这件事件却带来了更加大范畴的探讨,在这个探讨之中咱们没有失去任何侧面的后果,甚至带来了更多的人对咱们的口诛笔伐。当然前面的数据也通知咱们,这件事件对于销量也没有产生任何帮忙,所以进行辩论,分心服务好你的玩家就能够了。 三、尽可能快的解决问题。 咱们在过后用了一个疯狂更新的形式去解决问题 —— 日更。咱们这个习惯始终连续到了当初,就是咱们会在每一个大版本更新之后,每个早晨去收集所有媒体平台上的反馈和意见。而后将这些问题汇总之后评审,哪些能够在第二天被解决的问题,咱们就会在第二天立刻将它推送进来。 而那些在第二天或者说短时间无奈解决的问题,咱们会放在咱们的周更列表里,周更列表咱们也会间接通知玩家,哪些问题咱们在下周会解决,这使咱们的玩家感触到了尊重。在修仙EA到公布1.0的这684天里,咱们一共进行了205次更新,更新日志咱们就写了三十几万字。 四、制订长期的打算并清晰地通知你的玩家 我常常有听到开发者埋怨说,他感觉玩家不太了解EA这个模式,或者说他认为这种模式在国内可能是行不通的。 然而咱们作为一款胜利实现的EA,甚至说还实现得不错的游戏,咱们的教训是:玩家是否理解EA和这个模式是否行得通这是两码事。 ...

December 16, 2021 · 1 min · jiezi

关于游戏:TGDC-主题曲的艺术

大家好,感激大家明天来听我的演讲,我是 Christopher Tin,一名作曲家。我创作和发行专辑为音乐会制作音乐、为电影和电子游戏配乐,20年来都是如此,但我最喜爱的是为电子游戏创作主题曲,我指的不是流行歌,而是雄浑的、史诗般的独唱颂歌,在播放完结后仍会让人热血沸腾,在脑海中久久回荡,这些是我筹备为之奋斗毕生的作品。 许多游戏并不想真正费心理去制作一首巨大的主题曲,许多游戏在收场时应用的都是一般的、不张扬的音乐,免得玩家在做抉择时候心,有些游戏只有环境音效,那些菜单只是真正的冒险开始之前的一个短暂停留点,对于那些游戏来说,这种形式行得通,成果也很好。 但这不是我喜爱做的,事实上,我做的恰恰相反,我试图写出感人至深、引人入胜又令人愉悦的主题曲,以至于玩家会常常停下手里的游戏,只是为了凝听音乐,如果我可能抉择,我来给视频游戏配乐的话,除主界面之外,只有一个载入界面一首雄浑的史诗曲调格调的颂歌,我尝试编写的不是只依赖于与其相伴的视觉效果来吸引人注意力的歌曲,而是在不玩游戏时能够作为独立的音乐作品来观赏的歌曲。 当我为一款游戏编写主题曲时,我会尽力让它成为一首永不过期的热门曲目,无论是不是游戏玩家,无论老少都能被它吸引,即便在游戏发行之后,我也会不遗余力地帮忙这些乐曲在游戏之外焕发生命,为什么呢?因为我认为要帮忙你的游戏从单纯的一个游戏主题回升到一个品牌的高度,超过游戏产业的界线,音乐是最重要的工具之一。 就我的音乐而言,在其整个生命周期开始时,它只是游戏的一个忠诚伴侣。但随着音乐响起并转换到新的场景中,它会一直寻找新的听众并产生新的意义和记忆,一首好的主题曲,是任何游戏玩家第一次启动你的游戏时听到的第一个声音,这是与你的游戏玩家建立联系,为游戏体验搭建舞台和营造气氛的第一次机会,你肯定违心给人留下良好的印象。如果做得好,一首好的主题曲能够为你的游戏营造一种非凡的气氛,能够削减些许优雅的气质或进步声望,或者它能够向听众们证实开发人员对每个细节都非常关注。 如果是一首特地吸引人的主题曲,玩家们即便不在屏幕前,也能哼唱上一整天,这意味着你的游戏会终日、甚至每一天都在他们的脑海中浮现,启动你最喜爱的游戏,一遍又一遍地听着这首主题曲,会有一些特地的感触,它会号召着你投入到游戏中,并且在放下控制器后的很长一段时间里乐曲都会在你耳边回荡。 在接下来的半个小时里,我将向你展现我所采纳的一些技巧和办法,在创作和录制这些主题曲以及出版和发行过程中 为使其最大限度地扩充影响力,我将向你介绍我为之编写主题曲的这几款游戏中的一些钻研案例《文化(四)》、《文化(六)》和《旧世界》,并向你展现我采纳的一些技巧,为把这些歌曲变成经久不衰的热门流行歌曲,吸引游戏玩家和非游戏玩家,上面让咱们来一探到底吧。 当我开始创作一首新的主题曲时,我坚守着两个领导准则,这的确有助于我制作激动人心、合乎人们的期待,让人可能翻来覆去地听而且永不过期的音乐。我的两个准则是这样的。 准则一,我认为应该有一个十分十分棒的主题 ,比方一个十分棒的主旋律或者乐旨创意,或者节奏细胞或者旋律弧或者其余货色,但一般而言,我指的是一个美好的旋律,它会始终萦绕在你的脑海中,挥之不去。有些人称之为耳虫,我喜爱创作这样的作品。 第二个准则是构建一个总会令人感到震撼,而且永远不可预测的音乐构造, 在我看来,如果听众曾经确切地晓得接下来会产生什么,在作品中还没呈现之前,那一刻你便曾经失去了听众。在咱们生存的这个时代,大多数音乐都是在互联网上收听的,有了互联网你只须要点击一下鼠标就能够转到下一首曲目,或者拜访某个网页或者浏览某篇文章或者查看Facebook或相似内容,互联网是一个微小的注意力扩散器,这是你在这个现代化的时代创作音乐时所面临的问题,所以窍门就是编写可能吸引人注意力的音乐,实际上一秒钟都不违心放弃,并且永远不可预测,不会有人说 ,哦我晓得接下来是什么,这就是你要防止的。 《文化(四)》是我真正为之创作音乐的第一款游戏,我为那款游戏创作的曲子叫做Baba Yetu,Baba Yetu实际上是被翻译成斯瓦希里语的主祷文,Baba Yetu的意思是“咱们的天父”,这首歌是以非洲福音人声和全编管弦乐队,以及世界上各种打击乐为特色,这首歌对我来说真的很特地,因为这是我在大学里学到的货色,或者是我成长过程中所痴迷的音乐,我始终都喜爱为管弦乐队创作音乐和指挥管弦乐队的演奏,我在大学里领导过非洲福音合唱团,也曾加入过日本鼓乐团的上演,这就是我打算创作的歌曲,它把我在承受的音乐教育中所受到的不同的影响会集在一起,通通归到了一首歌里。当我刚开始Baba Yetu的创作时,我晓得我的首要任务是真正捕获游戏玩家,在第一次启动《文化(四)》时的期待感和兴奋感,开发人员把主菜单屏幕的视频文件发给了我,那是一幅外太空视角的地球画面,每隔一段时间,太阳就会从地平线上升起现象十分漂亮,它传播了兽性和天人合一的感觉以及一种战争与灵性的感触,我认为我须要以某种形式在音乐中捕捉到这一点。所以就在那时,当我看到那个菜单屏幕时,我的脑海里就蹦出了这首曲子的起始音符,主旋律就像这样“呜……“这是画面和音乐之间一种常见的协同效应,它是如此神奇,让我立即就意识到我的创作方向是正确的。 有一种实践认为,人类的思维实际上无奈领有真正原创的创意,然而人类的大脑可能做到,将两个独立的创意嫁接在一起,发明出新的货色,例如,独角兽并不是一个原创的创意,这是一个把马和带角的动物嫁接在一起的创意,把这两种货色放在一起,就有了一只独角兽,对吧?那么,遵循这种实践得出的合乎逻辑的论断就是你本人在艺术上接触到的不同事物越多,你就能把越多不同的有影响力的事物聚到一起,当你把这些货色聚到一起组装成你本人的货色时,就变成了一个齐全属于你本人的原创创意,比如说,如果你是一名视觉艺术家,你不仅能够从你承受教育时理解的画作中吸取灵感,还能够通过接触各种不同的美术静止,表现主义、形象表现主义、印象主义静止,所有这些不同的货色来吸取灵感,你能够发现自己的创意 ,通过将许多不同的元素组合在一起,这种办法对于我非常无效,我认为它也能够实用于任何艺术学科。 我的Baba Yetu的原创创意听起来是这样……这是12/8的拍号,是一个十分晦涩的拍号,它给人一种华尔兹舞曲的感觉,对吧?而后,有一天早晨我在遛狗的时候想到,它的旋律轮廓我很喜爱,但节奏不太适合在它上面嫁接一个非洲的节奏会怎么样?我脑子里的节奏是这样的,哒哒哒哒,哒哒哒哒哒,切分感更强。所以最终后果听起来像这样……这为它赋予了齐全不同的音乐特色,更有生机、更乏味,有点像预期的16分音符,就像向前推动一样,就像歌手急不可待地要唱下一个乐句一样充斥了生命、幸福和能量。 个别状况下,我喜爱让音乐创意首尾呼应,在音乐实践中被称为再现,但当我创作时,我个别会稍加改变,让它们听起来不一样,并且足够动人心魄,以至于让人想要点击重播键,把结尾再听一遍 。其中一种技巧,我在Baba Yetu中采纳的办法之一就是略微扭转一下和声,结尾时是这样,歌曲根底和声的这种变动,有助于从新定义主旋律的背景,也有助于在某种程度上唤起对日落的感触,起始菜单上的日出现象非常特地。当初回想起来有这种感触,但过后的我并不知道,但这的确是我职业生涯的曙光,是我作为一名出名业余作曲家的职业生涯的开始,从那以后,我始终在将那首歌曲作为一幅路线图,从中能够看出我对于创作视频游戏歌曲的喜爱水平以及我喜爱为它们创作什么样的歌曲,不仅是在Baba Yetu的根底上创立音乐理念、构造和架构,而且我十分喜爱在歌曲发行后向全世界进行推广。 Baba Yetu随《文化(四)》一起推出后,立刻在游戏社区中引起了轰动,但我认为它有接触到更宽泛受众的可能性,在我看来,接触受众的办法是公布散页乐谱,让业余合唱团能够在音乐会上演唱这首歌曲,侥幸的是经人介绍,我与Alfred Publishing建设了分割,Alfred是美国一家音乐出版商,在教育市场上进行了很好的指标定位,他们发行的歌曲版本面向可能演唱这些歌曲的业余歌手,甚至是少儿歌手,这个市场非常适合Baba Yetu,因为Baba Yetu是来自于视频游戏,大家都认为这会是一个很好的交叉点,在游戏玩家和合唱团的孩子们之间,that we could really tap into with this song,能够通过这首歌对此真正加以利用,Baba Yetu是我认为人们真的非常喜爱唱和听的歌曲之一,因为它总是给人一种在汇集的感觉,仿佛永远不会进行,我的意思是,人声自身是严密的五部和声,抉择应用斯瓦希里语也很有帮忙,因为斯瓦希里语的元音发音十分污浊,有冲击力,这一点适宜于十分有节奏的作品。 在抉择为歌手改编Baba Yetu的形式时,我实际上更偏向于福音合唱团而不是真正的古典合唱团。从某种意义上说我所编写的是我本人作为歌手想演唱的作品,在我作曲时,我很少思考针对特定人群来创作音乐,在创作《文化》的主题曲时我不会去思考,《文化》的玩家喜爱听什么音乐或者游戏玩家喜爱听什么音乐,我喜爱尽量以更宽泛和更广泛的角度来思考,我喜爱去思考什么音乐能吸引地球上的每一个人,无论他们是不是游戏玩家,我会尽量去创作那种音乐,写出更具广泛吸引力的音乐,其好处不言而喻,这意味着任何人,无论是不是游戏玩家都能发现你的音乐,去观赏它,并无望发现其背地的游戏系列,这就是Alfred发行的原版,它很快便成了他们最滞销的八开本乐谱,是最后的带钢琴声的六声部版本之一。 在寰球流传开来之后,他们意识到能够出版更多版本,比方这个无伴奏独唱版,让越来越多的人演唱,比方这个女子合唱团版本,或者这个钢琴人声版本,他们发行了这些版本而后发现音乐会的乐队想要演奏,因而,他们又发行了一个音乐会乐队版本。而后是一个用于高级弦乐团的弦乐团版本,正如我之前提到的,Alfred十分关注教育市场,而后我换了一家出版商Hal Leonard很违心在他们的出版目录中减少这个曲目,所以他们出版了本人的版本,他们出版了五种不同的人声版本面向不同的阵容。比方,这是一个全男子合唱团版本,他们出版了音乐会乐队版本和前进乐队版本,还有吉他合奏、钢琴合奏版本,包罗万象。当然,还有全套管弦乐队和合唱团的原始版本,因而成为在教育市场上迅速倒退的作品之一,因为与游戏有关联并且由散页乐谱出版商出版,Baba Yetu散页乐谱出版获得成功之后,吸引了很多业余合唱团来演唱,我心愿通过Baba Yetu为我的音乐吸引更多的受众。 我想到的办法是从新录制Baba Yetu与皇家爱乐管弦乐团和取得格莱美奖的索韦托福音合唱团,从新录制时我的首张专辑的收场曲叫做 Calling All Dawns,这样做的后果是把《文化(四)》和我的《文化(四)》片头音乐的所有粉丝,变成了唱片艺术家Christopher Tin 的粉丝由此围绕我的音乐创立了一个全新的社区,最终产生了我从未想过可能产生的事件,那就是博得格莱美奖。 音乐具备一种令人印象粗浅的能力那就是在作曲家及其粉丝群之间造就一种社区意识和对话意识,随着Baba Yetu通过教育市场取得关注和曝光,我的音乐的粉丝翻唱开始呈现,这些听过这部音乐作品甚至可能加入过表演的音乐家们,受到足够的鼓励来接收它并创立本人的版本,诠释格调既有纯正的娱乐型,也有对金属、爵士和摇滚的狂野曲风糅合的摸索,我对这些翻唱持激励和反对的态度,并不认为它们是威逼。因为归根结底,它们是对于我的音乐作品的诚挚情感的表白,他们以这种形式回应了我的音乐作品收回的召唤。 我的社区正在通过音乐语言与我交谈,这实际上是在我察看到围绕《文化》的改编社区制作了杰出的用户生成游戏版本后,从中学到的策略在它的激励下,我对我的音乐也采取了同样的做法,因而,只有有可能请激励并容许你的社区创立他们本人的内容,无论是自行改编游戏、创作粉丝艺术还是翻唱原声音乐,以一种敌对的形式与粉丝的创意进行互动,总是会带来一些非常明显的好处,Sogno di Volare对我来说是一首十分特地的作品。因为这是我为《文化 (六)》编写的主题曲,也是我在为《文化(四)》配乐后重返《文化》系列时的曲目,其特别之处在于,它给了我一个机会来从新扫视,那个为我带来我最受欢迎的音乐作品的世界,但我须要找到一种在那个空间中进行自我表白的新形式。 而此时,Baba Yetu曾经成为一个寰球热门曲目,它曾经为我博得了2011年的格莱美奖、它曾经被世界各地的合唱团所演唱、它正在电视上播放,从梵蒂冈到顶级足球联赛,失去了每个人的认可,它曾经荒诞不经地成为古典独唱上演的次要曲目之一,因而被要求为新游戏写一首新歌,至多能够说是让我感到诚惶诚恐,和上次一样开始时我没有多少货色可用,只有起始菜单屏幕上的画面,一幅漂亮的画面,有点像由地图学影像混合而成的多幅地图被编辑到一起,在《文化(六)》这几个词下以动画模式迟缓地挪动十分回味无穷。 从一开始,我就心愿我的音乐可能传播出这种运动感兴奋感和摸索感,当须要确定这首新歌的歌词时,我实际上是求助于《文化》系列,从《文化(四)》中吸取了灵感。在《文化(四)》中,当你体验过航行之后,Leonard Nimoy读了达芬奇的一段话,这段话是这样说的,一旦你体验过航行,即使脚下是大地,你也将终生俯视,渴望再次回归你曾领有过的天空,就像达芬奇和其余文艺复兴期间的艺术家和哲学家,从古典现代、罗马和希腊吸取古老的思维,并在14、15世纪将其从新融入古代欧洲的背景中一样,我想做同样的事件,吸取15世纪的平凡的思维,并将其从新融入21世纪听众的背景之中,从实质上讲,这是一种十分古典的声音。听起来像是威尔第歌剧之类的货色,像一个规模宏大的歌剧合唱曲,在某种程度上Sogno di Volare是我的《文化》主题曲中更具前瞻性的一首曲目,Baba Yetu反映的是人类一路走来的历程,但 Sogno di Volare是硬币的另一面,它反映的是对于人类将来攀登所有顶峰的期待。 ...

December 16, 2021 · 1 min · jiezi

关于游戏:电竞入亚行业爆发你的游戏是否还缺个大招

❄吃饺子、晒雪景,“你那里下雪了吗?” 狂欢、霸屏,高呼“EDG NB!” 2021年的这个立冬,两种画风交错,代际差别若明若暗。 “EDG 夺冠”、“电竞入亚”让电竞再次站在风口浪尖,投诉、批评交杂之声甚嚣尘上。但无庸质疑的是,电竞的胜利出圈让游戏行业再度爆火,游戏的商业价值正在受到支流市场认可。艾媒征询数据显示,预计到 2022 年中国电竞市场规模将增长至 1843.3 亿元。 行业向好之下的另一个趋势是,游戏正和社交娱乐深度交融倒退,一款叫好又叫座的游戏离不开围绕社交进行的精妙设计。 如何让玩家有更好的社交体验?敲黑板,这份答案拿去抄。 针对基于 Unity 平台开发和经营的休闲小游戏、策略类游戏和沙盒游戏等不同品种的游戏业务,融云提供了简略可行的通信能力接入计划,请查收。 BTW,11 月 20 日,Unity 大中华区业务总经理肖蓓蓓将光临 WICC · 广州,分享关上元宇宙的密钥,欢送报名。 休闲小游戏这一类别以五子棋、斗兽棋、麻将等棋牌类游戏和台球、连连看等休闲益智小游戏为主。 该类游戏特点: ① 游戏时只有一个 RTC 房间,所有人员都在同一个房间内; ② 玩家默认都订阅其他人的音频; ③ 玩家不能管制其余玩家的麦克风开关,只能敞开本人的麦克风; ④ 玩家能够选择性收听某些玩家的音频,对于不友善的音频能够抉择针对性屏蔽。 通信形式: IM:单聊、聊天室;文字音讯、表情、emoji RTC:1V1 语音;随机匹配,邀请好友 游戏过程中的语音需要: ① 匹配到对手后,将本方玩家和对方玩家退出同⼀个 RTC 房间,默认关上麦克风和听筒/扬声器; ② 本方玩家能够敞开本人的麦克风,对方将听不到本方发言; ③ 本方玩家能够敞开本人的听筒/扬声器,本人将听不到对方的发言; ④ 游戏完结后,默认通话完结,将本方玩家和对方玩家都踢出房间,且销毁房间(若间接再来一局则不算游戏完结)。 这一类别蕴含组队贪吃蛇大作战,时空号召、王者光荣、LOL 手游版等 MOBA(多人在线战术竞技游戏)类,Free Fire、战争精英等射击类游戏。 该类游戏特点: ① 游戏时有 3 个 IM 聊天室,2 个 RTC 房间,如下图示。 ② 本方队伍在一个 IM 聊天室,对方队伍在一个 IM 聊天室,全副玩家都在 IM 公共聊天室; 本方队伍在一个 RTC 房间,对方队伍在一个 RTC 房间,两个 RTC 房间的语音不互通。 ...

November 11, 2021 · 2 min · jiezi

关于游戏:2021游戏安全行业峰会安全共建护航产业健康发展

随着游戏产业的倒退,游戏平安问题剧增并威逼着游戏厂商,游戏产业正在成为黑灰产攻打的重灾区。 10月29日,腾讯游戏平安、腾讯平安独特主办的第四届游戏平安行业峰会在深圳召开。本次峰会邀请了腾讯、拳头公司、游族网络等海内外出名游戏厂商的平安专家,围绕游戏平安打击、2T攻打时代DDoS攻打新趋势、平安经营利用场景等问题进行探讨,以助力游戏产业衰弱倒退。 腾讯平安副总裁黎巍在致辞中示意:“游戏平安不是简略的繁多厂商或者企业可能解决的,肯定须要联结共建共治。腾讯也继续在将平安技术、能力与解决方案梳理整合并对外开放,与生态搭档共融,助力更多游戏厂商取得‘腾讯级’的平安能力,护航本身业务成长。” 在揭幕致辞中,腾讯游戏业务平安总监李长江分享了2021年游戏平安行业面临的三个变动:一是在微小利益刺激下外挂黑产产能继续暴涨,二是游戏产业的DDoS攻打更加重大,最初是游戏行业监管力度继续增强。 平安反抗的全球化过程减速 打击难度晋升且简单 腾讯手游平安产品负责人张旭认为,游戏平安打击的两个次要问题,一个是艰巨,一个是简单。 一次近期的相干调研后果示意,游戏外挂问题是玩家放弃一款游戏的重要起因之一。游戏和外挂,就像硬币的正反面,外挂不仅会极大毁坏游戏体验,也容易滋生壮大网络黑灰产。在过来的一年,海内游戏黑产问题成倍增长。2021年上半年,挪动端游戏的外挂样本数已达28171个,PC端游戏的外挂样本数已达10137个。 同时,平安反抗全球化过程减速,张旭补充道,“外挂制贩团伙能力降级,商业变现能力成熟,全球化的黑产链条打击更艰难。”面对更加简单的黑产环境,腾讯游戏平安团队推出以促活保收为主的价值经营尝试——黑产管控,在两年的实际中,也无效阻断了黑产团伙获利,为多款游戏提供了残缺无效的黑产管控能力。 2T时代DDoS攻打新趋势 如何晋升游戏厂商抗D能力 针对本次峰会议题游戏厂商最为关怀的平安场景之一——DDoS攻打,来自腾讯平安高级平安算法工程师伍湘奇,为与会嘉宾解读了DDoS攻打新趋势与防护指南。 2020年业界进入2T攻打的时代,攻打老本越来越低,防护越来越重要。“40%的DDoS攻打都直指游戏,对于游戏厂商的防D零碎能力和速度都是很大的挑战。”通过几代迭代,腾讯云平安次要做了两点的改良,一个是做绘画的追踪,另外是流量特色学习。针对行业痛点,以及腾讯外部久经验证的抗D能力,能在保障业务不受影响的状况下,将清晰准确度进步至99%。 自动化反抗黑产从业者 游戏信用疏导改善游戏环境 随着反抗演进,黑产从业者也变得更加弱小。腾讯游戏平安Anti-Cheat Expert天眼产品负责人王钊,向与会观众分享了自动化反抗的实际。随着游戏量和玩家量的减少,外挂的倒退也更加简单和多样化,王钊分享了一款往年上半年新上线的PC端游戏外面监督的外挂。“5个月工夫外挂有4000多款,人工去解决时效性没有方法去满足需要的。与此同时,很多游戏刚上线遭逢到的外挂都十分荫蔽,反抗难度十分大。 所以在这样场景下,咱们必须晋升智能化和自动化的水平。”在愈演愈烈的反抗中,团队不仅积攒了丰盛成熟的计划和教训,也将它造成了腾讯平安反抗的重要产品之一。 而服务于腾讯游戏海量的玩家群体,随着歹意行为以及歹意场景的疾速倒退变动,站在大盘生态角度要如何进行平安环境的建设,经营工作能力给游戏带来最大增益?游戏信用或者是一个答案。 来自腾讯游戏平安的用户产品负责人周杰,通过一位低信用玩家的实在反馈,向观众讲述了如何通过社会信用机制来扭转玩家行为的理念,“基于‘用户画像’搭建信用服务体系,游戏信用的好坏表征玩家将来呈现各类异样游戏行为的可能性,通过体系化和规模化的前置拦挡、场景限度、揭示警示等用户经营伎俩,帮忙玩家对信用以及游戏行为规范造成正确认知,进而改善游戏环境。” 以后腾讯游戏信用曾经接入95款端手游,为420多个不同的游戏场景保驾护航。 游戏行业群英荟萃 分享实践经验 值得一提的是,来自拳头公司的反作弊团队负责人Phillip koskinas通过视频,和观众分享了拳头游戏公司Vanguard团队在硬件层面管控舞弊行为的教训。 来自迷你创想的平安团队负责人谢晓勇向观众分享了迷你创想公司在沙盒游戏平台平安建设方面的贵重教训,全面介绍了沙盒游戏平台是如何在用户平安、内容平安、平台平安三个方面构建全面平安体系。 中青宝的互联网出版部总编刘祺则深入浅出地向观众解答了合规经营游戏须要具备的资质,如何判断资质的合规,为厂商及行业搭档解说了把控平安经营会产生危险的因素,在后期理解局部零碎设计可能造成的经营危险,能力更好地事先躲避。 此外,游族网络信息化与信息安全总监马寅龙,为大家带来主题为《“黑域”与“剑门关”基于代理网关和隔离网络的游戏研发环境构建摸索》的分享,并示意可能加入此次峰会与各位游戏行业的同行,就游戏平安问题进行深刻交换是不可多得的机会。 腾讯游戏平安解决方案 共建生态守卫游戏平安 腾讯游戏平安Anti-Cheat Expert产品负责人李鑫做了产品化和行业单干的主题分享。游戏平安对于不少游戏厂商来说,是一个门槛较高的技术活。2020-2021上半年游戏黑产账号数量上亿,游戏平安挑战加剧,行业厂商急需第三方解决方案。 腾讯游戏平安团队随同着腾讯游戏一起成长,游戏平安挑战加剧的大背景下,腾讯游戏平安基于近20年平安反抗教训,打造了笼罩游戏全场景、全周期、全链路,云+端一体的立体化解决方案,与行业发展单干,共建游戏平安生态。 腾讯游戏平安产品体系笼罩了反外挂、加固、内容平安、反打金、游戏黑产辨认、数字版权保护、DDoS防护等多个方面,为行业提供一站式解决方案。同时,产品能够在游戏全场景、全链路、全生命周期内继续提供平安产品反对。面对游戏黑产日趋严厉的态势,构建游戏黑产系统化解决方案,推出防、查、控三部曲,加固游戏经济零碎,升高黑产影响。 据Newzoo预测,寰球游戏市场规模将持续增长,在2023年无望达到2046亿美元。面对盘根错节的游戏安全形势,本次峰会进一步增强了游戏平安侧面力量的交换和合作。 腾讯平安凭借二十余年积攒的平安技术、人才及齐备的行业级平安解决方案,联结腾讯游戏平安核心,独特打造业余的游戏行业全栈平安计划。腾讯游戏平安解决方案具备稳固、SDK 多语言反对、多游戏引擎适配的劣势,领有最适宜游戏的内容平安产品状态。黎巍示意:“将来,腾讯将继续投入资源,参加到游戏生态的全链路布局和平安建设当中,帮忙游戏厂商高效解决行业平安难题,助力游戏企业疾速孵化精品游戏,独特推动游戏产业高质量衰弱倒退。”

November 1, 2021 · 1 min · jiezi

关于游戏:小游戏如何应对大流量Shopee-Shake-的大促实践

背景Shopee 每年都会举办几场重要的大促流动。大促过程中,营销小游戏是吸引流量的次要渠道。 本文将介绍大促中最常应用,同时在线人数最多的游戏——Shopee Shake——如何应答大促的大流量冲击,保证系统的可用性,为用户提供稳固牢靠的服务。 1. 游戏与大促每年 Shopee 会在五至十二月的每个大促节点举办电视直播流动。每次大促流动时,各市场的经营人员会与当地电视台单干,在节目直播过程中插入一段玩 Shopee 小游戏的互动环节。 1.1 大促游戏的抉择在大促筹备阶段,当地经营人员会依据大促时间表,在游戏治理平台设置游戏流动的开始工夫、完结工夫、奖池及页面素材。待大促成行时,电视台主持人将疏导用户关上 Shopee APP 并进入小游戏页面。 当地经营人员会依据大促打算,从多款小游戏中抉择几款参加到电视直播大促当中,而 Shopee Shake 是被应用次数最多的大促小游戏,简直每次大促流动都会呈现它的身影。通过这款游戏,当地经营人员能够发放 Shopee 金币,吸引用户在 Shopee 下单购买商品。 每次大促时,Shopee Shake 都会带来大量用户流量。2021 年 5.5 大促时,该游戏接口最高 QPS 达到 30 万+,在大促过程中施展了重要的引流作用。 1.2 Shopee ShakeShopee Shake 是用户通过在游戏页面摇动手机,取得 Shopee 金币的相似摇一摇的小游戏。用户摇动次数越多,失去金币的概率越大。下图展现了三个不同阶段的游戏页面: 最左侧是游戏预热阶段的页面。游戏开始前,用户进入这个页面后,能够看到金币池的大小和游戏开始的倒计时,也能够将页面通过第三方或发送音讯的形式分享给好友,取得额定金币处分。 两头是游戏过程页面。游戏过程中,该页面会不停掉落金币。用户须要在无限的工夫内摇动手机。摇动速度越快,失去金币的概率就越大。 最左边是游戏后果页面。用户在当局游戏取得的金币数量会显示在这一页面。另外,因为每一局游戏会耗费一次机会,残余游戏机会在此页面也有直观出现,若用户还有机会,能够间接点击按钮,持续进行游戏。有时,当地经营人员还会配置一些抽奖机会,如果用户抽中了某项奖品,同样会在这个页面显示。 2. 技术计划从游戏机制来看,Shopee Shake 的后端系统面临以下几项挑战: 刹时并发量大:因为游戏开始工夫是全局对立,所有用户都会在同一时间进入游戏,导致在短时间内产生大量申请。因而,后端系统须要在短时间内承载大量申请。游戏工夫短:整场游戏环节个别继续 5 分钟,每局游戏通常在 10 秒到 30 秒之间。并发扣减金币池:所有用户共享同一个游戏奖池,每一局游戏完结后都要并发扣减游戏奖池,后端系统容易因而呈现单点问题,从而影响到零碎性能。因而,咱们的技术计划须要反对高并发申请,反对程度扩容,并解决潜在的奖池单点问题。 2.1 架构设计 从产品特点来看,Shopee Shake 零碎次要提供两大性能,别离是供当地经营人员进行大促流动配置,以及供 Shopee 终端用户玩游戏取得金币。 相应地,零碎也分成两端,即 Admin 治理端和用户端,别离面向当地经营人员和 Shopee 终端用户。 在大促前,当地经营人员会通过 Admin 端进行游戏相干配置。流动进行时,用户通过 Shopee 终端拜访游戏页面,申请后端。其中,最重要的两个申请是“游戏开始”及“游戏完结”申请: ...

September 18, 2021 · 2 min · jiezi

关于游戏:app测试UI主要测哪些HP91

UI测试次要测哪些问题,特地测试新人常常容易犯错,具体如下: 01、查看整个零碎的界面是否和效果图统一;02、并且查看整个零碎所有界面的界面风格和设计是否统一;03、查看界面是否存在错别字或者是不适合的字;04、查看界面上的所有的按钮的款式是否统一,是否正确;05、查看界面操作是否敌对,用户交互是否亲善;06、查看界面所有的按钮、下拉框或者是导航箭头是否有反馈,且是正确的反馈;07、查看零碎上的链接是否有正确的链接地址,且能正确跳转;08、查看零碎中是否存在无用的链接,即不须要做成链接的中央做成了链接,并且点击不能失常跳转或是跳转谬误;09、查看界面中所有的输入框是否都做了测验,比方输入框的最大限度字符,超过输入框的最大限度,零碎是否会做解决,而不是报错或者是呈现其余谬误;10、查看界面中的题目或者是内容输出过多时,是否会进行换行或者是暗藏解决,而不是呈现界面错位等景象;11、查看零碎在不同浏览器的兼容性问题,查看页面在不同浏览器下是否会产生异样,当用户调整浏览器窗口大小时,是否会呈现界面不兼容的状况;12、查看界面中应用的字体格调和大小是否统一,格局是否对立精确;13、查看所有的字段前面是否有须要的冒号,查看是否冒号为对立的中文冒号还是英文冒号,即中英文符号是否对立;14、查看界面中的图片是否显示正确,是否被裁减,是否被拉伸变形,是否显示齐全;15、个别的网页上的数据根本都是搭配后盾应用的,即前台网页上的数据是由后盾增加,前台网页显示数据的,这个时候咱们要留神搭配前后台测试,检查数据是否统一,后盾增加的数据内容过多时,前台界面是否会呈现界面问题;如果感觉有用的话,能够用这个页面www.hp91.cn去尝试一下怎么测试登录好文要顶 关注我 珍藏该文

August 30, 2021 · 1 min · jiezi

关于游戏:一辈子测试桑皮解答

我认为软件测试是无能一辈子的,次要看在哪里干。 如外企。常常在外网拜读一些国外大佬(有曾经退休的)写的测试文章,据揣测最后的专职测试员呈现在40、50年前。 不敢相信吧?我也有点不敢相信,但这是事实。 而国内,最早的专职测试员能够追溯到的是00年前后。所以,国内能失常做到退休的测试员,目前简直(理论我认为 简直 能够去掉)没有。 起步晚,没有什么大不了的。最怕的是,国内测试员做到10年左右广泛“蒸发”了,为什么? ①绝大部分公司认为初中级测试就能满足本人的须要,能花5K搞定的事件,何必花1W。 ②绝大部分软件基本不须要太高的品质,能过得去就行了。 ③老测试员太“油滑”了,不好忽悠了,还是“菜鸟”单纯(咱们能够好好的做敌人,讲情怀了)。 ④测试老鸟因为工资不升反降,而个人消费随着年龄逐年上涨而逼“下海”了。 ⑤你要做治理?一个萝卜一个坑,坑少,队尾的兄弟留神排好队。 一代测试一代人,而我不管怎么算都是前一代了。 依据好事者总结: 测试第一代(手工测试,强调发散思维):1998年(第一代QQ问世)~2015年左右(基于selenium的自动化测试在国内流行)。 测试第二代(自动化测试,强调根底编程):2015年至今。 以前,咱们才进“软件测试”行业,总有人说“测试无能一辈子,不信?看国外。”以前我在专一教育的国企客串讲师时,也是这么给学员这样说的。 当初,我不敢这样说了。(怕被喷盐开水) 国内有始终做了22年测试的吗?必定有!但每一个,应该都是大公司的“宝”。 那为什么咱们不能成为其中一个呢? 持续来探讨下,什么状况下你会成为大公司的一“宝”? 我能想到的有以下几点: ①学历上没有硬伤,不是双一流,就是两证在手。 ②测试业余技术必须过硬,编程是小菜,业务舍我其谁。 ③能拼命,随时做好“献身”于开发战场的筹备。 ④经受得住寂寞、引诱,怀着“我心里只有测试”的座右铭。 ⑤不挡路,不做“绊脚石”。 最重要的一点,要找一家“好公司”,至于有多好?——能让你干到老。 这时,局部人可能会急了“哇塞,大佬。你说的,我小心肝都一跳一跳的。你明天不会是进去唱衰的吧?” 当然不是,测试还是无能一辈子的?(怎么有点假呢?) 不假不假,当初我广泛给他人的倡议是: ①趁着年老,多晋升下学历; ②学会编程,起码做到把握; ③久远的倒退来看,能进大公司,绝不去小公司; ④理论进国企是不错的抉择,前提是你能忍耐得住里面的引诱。桑皮http://www.sangpi.com

August 30, 2021 · 1 min · jiezi

关于游戏:websocket检测服务器是否断开来游戏手游解答

为了证实客户端和服务器还活着。websocket 在应用过程中,如果遭逢网络问题等,这个时候服务端没有触发onclose事件,这样会产生多余的连贯,并且服务端会持续发送音讯给客户端,造成数据失落。因而须要一种机制来检测客户端和服务端是否处于失常连贯的状态,心跳检测和重连机制就产生了。 如何进行心跳检测和游戏重连 思路是: 每隔一段指定的工夫(计时器),向服务器发送一个数据,服务器收到数据后再发送给客户端,失常状况下客户端通过onmessage事件是能监听到服务器返回的数据的,阐明申请失常。 如果再这个指定工夫内,客户端没有收到服务器端返回的响应音讯,就断定连贯断开了,应用websocket.close敞开连贯。 这个敞开连贯的动作能够通过onclose事件监听到,因而在 onclose 事件内,咱们能够调用reconnect事件进行重连操作http://www.lyouxi.com。 具体代码实现 $(function () {var path = basePath; var jspCode = $("#userId").val(); var websocket; createWebSocket(); /** websocket启动*/ function createWebSocket() {try {if ('WebSocket' in window) {websocket = new WebSocket((path + "/wsCrm?jspCode=" + jspCode).replace("http", "ws").replace("https", "ws")); } else if ('MozWebSocket' in window) {websocket = new MozWebSocket(("ws://" + path + "/wsCrm?jspCode=" + jspCode).replace("http", "ws").replace("https", "ws")); } else {websocket = new SockJS(path + "/wsCrm/sockJs?jspCode=" + jspCode.replace("http", "ws")); ...

August 30, 2021 · 2 min · jiezi

关于游戏:弈剑行遭网暴游戏公司除了宁为玉碎还有什么对策

作者 | oceanfeng 闭关铸剑三年,毁于DDoS攻打厉害。作为一款颇受关注的武侠风多人对战游戏,《弈剑行》正式开服的一瞬间,就受到了黑客组织对游戏服务器的大肆攻打,大部分玩家无奈进入游戏,随后服务器彻底瘫痪。在开发商青度互娱的申明中,能够看到署名为“ACCN”的黑客仅仅为了1万5千元的勒索支出,就对游戏带造成了毁灭性的打击,不得不让人扼腕。尽管青度互娱动摇的示意绝不屈从,原路退回玩家所有充值并将游戏改为单机版,也难以挽回受到的挫伤。《弈剑行》因DDoS攻打而宕机下架,但也因为舆论和玩家们的关注,收到了大量的反对与激励。一方面,TapTap平台方示意会帮助彻底解决问题,大量平安厂商也与开发商踊跃沟通,心愿可能为《弈剑行》提供解决方案;另一方面,大量网友通过微博、知乎发动声援,在游戏畛域掀起了一波拥护DDOS攻打勒索、声讨歹意黑客的浪潮。然而,《弈剑行》并非是业内第一个因DDoS攻打而宕机的游戏,也绝不会是最初一个。截止目前,通过DDoS攻打勒索中小游戏开发商获利,曾经造成了一个残缺的产业链,遍布寰球简直所有国家。以臭名远扬的ACCN为例,就已经攻打过《元气骑士》《现代和平》《人形沉睡》等20余款游戏(不齐全统计),而蒙受过DDoS攻打的游戏制作者更是举不胜举。究其根源,还是因为游戏行业高度倒退,产业链成熟,大量中小开发者凭借优良的创意也能疾速关上市场,而他们应答网络攻击的进攻根本为零,因而成为了歹意攻打觊觎的对象。依据腾讯此前公布的《2020年DDoS威逼报告》显示,仅在2020年,全网DDoS攻打次数就比2019年同期翻了一倍、超大规模攻打更是迅猛增长;其中游戏行业无论是受攻打次数还是受攻打占比,都创了新高,成为DDoS攻打的重灾区。从攻打规模来看,AWS和Google先后颁布曾蒙受超过2Tbps的攻打,正式宣告DDoS攻打迈入2Tb时代。腾讯平安DDoS防护技术总监、研发负责人罗喜军曾示意,DDoS攻打的猖狂能够尝试从攻击者的视角来看:首先,从志愿、动机的角度来看,去年突发的新冠疫情,给人们的生存形式带来了微小的变动,很多流动都从线下切换到了线上,同时带来了互联网服务的高速倒退。业务高速倒退,就会给黑产攻击者带来更多可乘之机,他们的获利空间变大;第二,在于攻击者的能力,即资源。近几年IoT、5G等基础设施在疾速倒退,与此同时,平安问题也会随同产生,比方弱口令或者一些破绽问题,很容易引发黑客攻击,使得设施沦为“肉鸡”,导致DDoS攻打;而且,当初DDoS攻打还有一个趋势,就是它的攻打逐步工具化,当初叫做攻打的SaaS化服务,它能让攻击者的门槛变低。假如在网页上注册账号,只有点一下鼠标或者调用API接口就能够发动攻打;此外,疫情也会使攻击者的动机变强。疫情刺激需要,需要带来资源,资源又在一个继续的增长过程中,而持续增长的资源在动机的强烈驱动下,就可能令攻击者更好地利用资源。综上,攻打动机跟攻打资源这两个因素使得2020年-2021年的攻打趋势有了很大的增长。那么,作为一家初创公司,面对如此危机四伏的环境,应该如何应答呢?别急,面对DDoS攻打并非只能坐等挨打,咱们有“三板斧”,可能帮忙游戏创业者乃至所有提供网络服务面对DDoS攻打威逼的厂商胜利“渡劫”。 01第一板斧扎实建设企业本身的抗攻击能力如同普通人得感冒,或者不是全靠吃药来解决问题,而是身材首先要具备肯定的抵抗力。同理,业务首先要在程序、代码开发、架构等方面具备肯定的抗攻击能力。最根底的就是充沛具备足够高的带宽空间进行防护,不至于在一次攻打之下就彻底宕机;其次是在本身的业务底层上无缝接入平安,不因平安防护适度影响业务运行,也不至于因为一个平安产品的接入就彻底改变业务架构和流程。此外,企业还应该在更大的视角下来对待“平安问题”,不能孤立的看DDoS攻打来了就进攻DDoS攻打,而是应该全面的建设网络安全、身份平安、风控、反外挂、防信息泄露等残缺的平安能力,彻底消除所有平安威逼可能产生的隐患。 02第二板斧深刻架构层面,建设疾速调度或热切换能力这是容灾的问题,也能够叫做疾速复原业务的能力。作为一个游戏研发商和发行商,架构上必须反对分布式,网络节点出问题的时候立刻主动切换,自动化的让用户在另外一个链路上疾速游戏。即便在DDoS攻打下用户断连了,也可能让用户从新连入服务器的时候能疾速复原状态,也能做到数据的残缺同步——游戏的发行商自身,要在架构上强化这方面的能力 03第三板斧寻求业余帮忙,让业余的人干业余的事当真正影响到企业的生存倒退时,还是要找业余的平安服务团队来解决这个问题。很多人说,守业是一件“高危职业”,在游戏行业更是如此。岂但要累赘人力收入、设施收入,而且投入期相当长。在很多游戏零推广投入的状况下,从公测到正式公布这一段时间的口碑至关重要。一旦开局不利,很有可能再无反手之力。与此同时,游戏行业又有着大量年轻人,他们仅有的一些老本基本不足以长时间的与勒索者反抗——这也是为什么很多游戏开发者面对DDoS攻打的勒索,抉择含泪领取几万元的“赎金”的外围起因。因而,咱们强烈建议游戏开发者,征询业余的平安服务商,与业余的小伙伴独特进攻DDoS攻打和其余潜在的平安危险。腾讯早在2006年就启动DDoS反抗技术钻研,并于2010年正式上线了自研DDoS进攻零碎宙斯盾,继续为QQ、微信、战争精英、绝地求生、王者光荣、英雄联盟等提供业余牢靠的DDoS攻防解决方案。在产业互联网时代,腾讯平安打造了集DDoS攻打检测和进攻于一身的平安产品——腾讯云DDoS防护解决方案,为企业一站式解决各类DDoS攻打。针对大流量攻打的趋势,腾讯云DDoS防护建设了相应的能力储备,领有多个Tb级超大容量高防节点,曾为客户胜利抵挡了高达1.23Tbps的国内已知最大流量攻打,目前已在游戏、电商、直播等行业广泛应用,曾助力电商巨头家乐福胜利抵挡大规模DDoS攻打,失去多个行业头部客户认可。面对DDoS攻打技术的降级,腾讯云DDoS防护继续迭代算法,通过IP画像、行为模式分析、Cookie挑战等多维算法,联合弱小的AI智能引擎和多方位的威逼情报,根据威逼变动继续更新防护算法,无效抵挡新的平安威逼。在策略抉择上,腾讯云DDoS防护具备极高的灵活性,不仅反对基于黑白名单、ACL、正则规定、模式匹配等策略进行荡涤防护,还预设了多套策略模板供用户抉择,特设专家模式,实现细粒度防护策略调整,实现了从攻打发动到攻打流量荡涤的秒级检测、秒级响应。针对泛滥游戏厂商开辟海内市场的需要,腾讯云DDoS防护建设了丰盛的海内节点,将DDoS防护能力拓展到韩国、日本、美国、德国等企业出海密集的国家,全面保障企业海内业务平安顺利运行。针对IPv6和IPv4的架构长期并存的趋势,腾讯云DDoS防护优化了防护架构和体验,提供IPv4/IPv6的双栈防护,并反对包含HTTPS协定在内的业务三层到七层的各种DDoS防护场景,确保用户在架构降级期间平稳过渡。基于当先的技术劣势,腾讯云DDoS防护对于业界难以防护的TCP反射、CC攻打、业务流量重放、连贯型攻打等场景都能无效进攻。此外,腾讯云DDoS防护还提供7*24专家服务,为企业在IPO、新品公布、营销大促等关键环节提供全方位业余保障,确保企业在关键时刻的业务稳固。其实,守业就像网游,一方面要人多才会力量大,另一方面也要各职业兼备,且各司其职,能力胜利扛下大Boss,播种战利品。那么,在守业搭档中担当主T的平安公司,无疑施展着至关重要的作用。 END -

August 11, 2021 · 1 min · jiezi

关于游戏:GBA换装迷宫2

换装迷宫2克里斯: 地元素 狂兵士敏特: 女性牧师阿芝:: 女性魔法师切斯塔: 男性弓箭手库拉斯: 男性学者铃: 女性忍者斯任: 男性火属性剑士露蒂: 女性元素属性海贼菲丽娅: 女性学者里昂: 男性暗属性剑士切尔茜:女性弓箭手恐库曼:男性搏斗家佐尼: 男性音乐家玛利: 女性剑士或者厨师伍德洛:男性弓箭手利德: 男性剑士 法拉: 女性搏斗家基尔: 男性暗属性学霍古:男性地属性弓箭手雷斯: 男性剑士梅尔蒂:女性舞蹈家或者猫人恰特:女性元属性盗贼达奥斯: 男性暗属性魔法师或暗属性搏斗家塞修斯: 女性水属性搏斗家瓦尔修勒:女性光属性剑士迪姆洛斯:男性火属性戏法师(魔术师)钻子学生:男性地属性学者阿咪: 女性厨师米拉尔德: 女性雷属性学者利里丝: 女性味武者(与厨师友好度高时送,留神要男主角穿味武者服装)味武者:奇怪厨师 味武者服装 (大概50个工作左右) 金手指教训翻倍:0200D123 FF遇敌:02001CA0 00不遇敌:02001CA0 02金币:02003258 11111111全人物图图鉴:(同时应用)02003FD6:FFFF02003FD8:FFFF

July 28, 2021 · 1 min · jiezi

关于游戏:腾讯网易纷纷出手火到出圈的元宇宙到底是个啥

本文首发于:行者AI最近,一个叫“元宇宙”的概念火到出圈,腾讯、网易、字节跳动、Facebook等各路大佬纷纷入局,甚至连社交软件Soul也称本人是给Z世代提供以灵魂为链接的社交元宇宙。 元宇宙到底是个啥?各路资本又为何如此疯狂?这还要从1992年出版的科幻小说《雪崩》说起。 《雪崩》作者尼尔·斯蒂芬森构想了一个与社会严密相连的三维数字空间。这个空间与事实世界平行,只有戴上耳机和目镜,找到一个终端,就能够通过连贯进入一个由计算机模仿的三维事实。这里,每个人都能够领有本人的分身(avatar),你能够定义本人分身的形象,能够通过分身聊天、斗剑、交友,还能够随便摆布本人的支出。 这个虚构的三维事实就是元宇宙(Metaverse)的雏形。 2018年,电影《头等玩家》将元宇宙的概念搬上了大银幕。这次,元宇宙换了一个名字——绿洲。 This is the "oasis" world, where the only limit is your own imagination. 这里是“绿洲”世界,在这里惟一限度你的是你本人的想象力。 “绿洲”脱胎于事实世界,又独立于事实世界。它有本人的运行逻辑,事实中有的,绿洲有;事实中不可能产生的事件,绿洲里却可能产生。只有你想,你能够化身高达、金刚、鬼娃恰奇,能够和小丑共舞,和春丽战斗,和蝙蝠侠一起勇登珠峰。就算现实生活中,你是个彻头彻尾的失败者,在绿洲里,你也有机会成为鲜衣怒马的少年英雄,一日看尽长安热闹。 元宇宙给了玩家有限的可能,这或者就是元宇宙的魅力,也是元宇宙吸引有数资本圈的大佬入局的起因。正如Roblox CEO Dave Baszucki曾说过的那样:“Metaverse是科幻作家和将来主义者构想了超过30年的事件。而当初,随着领有弱小算力的设施的逐渐遍及,网络带宽的晋升,实现Metaverse的机会曾经趋于成熟”。 在Baszucki眼中,元宇宙是一个咱们能够工作、游玩、娱乐的线上空间。元宇宙具备8个要害的特色:Identity(身份)、Friends(敌人)、Immersiveness(沉迷感)、Low Friction(低提早)、Variety(多样性)、Anywhere(随地)、Economy(经济)、Civility(文化)。 首先你须要一个虚构的身份,你能够是摇滚明星也能够是时尚model,你能够在元宇宙中进行社交,不论是跟已有的敌人分割还是意识新的敌人。这必须是极具沉迷感的,甚至能让你疏忽事实世界,元宇宙内的一切都是同步产生的,没有提早性,丰盛的差异化内容保障了这个虚拟世界的吸引力,你能够随时随地的进入这个世界,无论你在床上还是地铁里。此外,这个世界应该具备本人的一套经济零碎以撑持它的独立运行,也必然领有本人的文化体系促使它的一直倒退。 只管与《头等玩家》中的“绿洲”相比,Roblox的画面并没有真实世界那么真切,一眼看上去,会感觉这不就是一个乐高沙盒游戏?但Roblox为用户提供了一个自在发明的平台,玩家能够施展本人的想象力设计游戏人物形象,构建新的游戏模式,发明本人的世界或是退出他人的世界。 所有Roblox的用户都能够是这款游戏的开发者,这种用户发明游戏与社群造成强互动的运行模式保障了用户的稳定增长,也使得Roblox难以复制,这让资本圈的大佬看到了Roblox或者说元宇宙在游戏将来倒退中的微小价值。 2020年3月,沙盒游戏平台Roblox在美国纽交所上市。作为首个将“元宇宙”写入招股说明书的公司,Roblox上市首日开盘价45美元,当日涨幅54.4%,市值冲破400亿美元。 独一无二,2021年4月,《堡垒之夜》的开发商Epic Games发表取得10亿美金的巨额融资,次要用于元宇宙的研发。 与创意游戏平台Roblox雷同,《堡垒之夜》同样具备元宇宙的偏向,然而这款游戏的娱乐性更强。在《堡垒之夜》中,玩家具备极高的自由度,能够从新搭建游戏场景,能够化身漫威超级英雄守卫堡垒世界,还能够听Travis Scott的虚构演唱会,看诺兰的《盗梦空间》……以Travis Scott的虚构演唱会为例,这场大概10分钟的沉迷式线上上演,吸引了超过1200万名玩家的同时参加,场次横跨亚洲、欧洲、大洋洲、美国等各个地区。这次演唱会一直变换的演唱场地、炫酷的游戏特效、超千万的观众人数,都不是任何一场线下演唱会能够比较的。 值得一提的是,早在2019年,腾讯就与Roblox达成策略单干,而在2020年2月Roblox取得的1.5亿美元G轮融资中也有腾讯参投,此外,腾讯还握有Epic Games 40%的股份,《艾兰岛》、《乐高有限》等沙盒游戏的背地也有腾讯的身影。由此可见,腾讯对于打赢这场元宇宙战斗的信心。 除腾讯外,网易、莉莉丝、字节跳动等大厂也在放慢元宇宙的布局。网易的河狸打算,莉莉丝的达芬奇 UGC 平台、字节跳动对于《重启世界》的投资……都显示出大厂对于元宇宙的器重。VR、AR、5G、云计算、区块链等技术的逐步成熟使元宇宙这个疯狂的、存在于科幻小说中的含糊概念有了实现的可能。 元宇宙的确会产生,但它还十分边远,它很难被一家超级大公司独立搭建,而是须要更多的参与方与有数的内容创作者独特摸索。科幻小说之父儒勒·凡尔纳曾说过“凡是人能设想到的事物,必然有人能将它实现”,咱们期待着元宇宙的呈现。

July 21, 2021 · 1 min · jiezi

关于游戏:用户名和密码用字典保存

题目5、游戏用户名和明码用字典保留已知某零碎的用户名被存到列表 [‘user0’,‘user1’,‘user2’,‘user3’,‘user4’,‘user5’]中了,请编写程序cx5.py实现以下性能:(1)给每位用户创立6位由数字形成的随机初始密码,而后将用户名和明码用字典保留,输入该字典;(2)将用户名和明码存至文件user_inf.txt中。import randomall_chars = '0123456789'#预置字符串user_name = ['user0','user1','user2','user3','user4','user5']#用户名列表user_pwd_dict = {}#空字典for name in user_name: pwd = ''#空明码for i in range(6): pwd += random.choice(all_chars)#随机选取字符串中字符,利用循环造成6位明码 相当于random.randint(0, 10)然而这里是字符串,故而不能用user_pwd_dict[name] = pwd#键值搭配print("已调配初始密码,字典数据为:",user_pwd_dict)#打印出字典 fid = open('user_inf.txt','wt')#windows零碎下的写入模式,打开文档for name,pwd in user_pwd_dict.items():#把字典中每对 key 和 value 组成一个元组,并把这些元组放在列表中返回 fid.write(name + ':' + pwd + '\n')#换不换行都不影响fid.close()#敞开文档print("用户名和明码已存至user_inf.txt中!")numpy.random.choice(a, size=None, replace=True, p=None) 从a(只有是ndarray都能够,但必须是一维的)中随机抽取数字,并组成指定大小(size)的数组replace:True示意能够取雷同数字,False示意不能够取雷同数字数组p:与数组a绝对应,示意取数组a中每个元素的概率,默认为选取每个元素的概率雷同。字典的相干常识字典是一种可变容器模型,且可存储任意类型对象,字典的每个键值对(key=>value)都是用冒号:宰割每个键值对之间用逗号,宰割,整个字典包含在花括号{}中格局如下:my_dict = {key1:value1, key2:value2}

July 20, 2021 · 1 min · jiezi

关于游戏:列表中的素数

题目4、列表中的素数游戏 编写程序文件cx4.py,实现如下性能:1)定义一个函数lt(m),性能是生成一个元素由m个1-200之间随机整数形成的列表。2)定义一个函数prime(n),判断整数n是否是素数。3)利用lt函数,生成一个由12个1-200之间正整数形成的列表ls,再用prime函数找出该列表中的素数,进行输入显示,同时求出素数之和并输入,显示格局如下图所示(随机产生的数据会有不同,参考输入格局):import random 判断整数n是否是素数def prime(n): flag=True#flag是个判断标记for i in range(2,n): if n%i==0: flag=False#和判断标记相同 return 0 break#无余数非素数else: return 1 产生m个[1-200]范畴的随机数,并放到列表lt中def lt(m): ls=[random.randint(1,200) for i in range(m)]return ls生成一个由12个1-200之间正整数形成的列表lsls=lt(12)#12个随机数的列表lsprint("随机生成的列表为:",ls)#输入这个列表print("素数有:",end="")#end=""使列表中的素数紧跟在冒号前面,不换行 求出素数之和s=0for i in ls: if prime(i)==1:#0的话输入的就是非素数了 print(i,end=" ")#输入素数,且素数间以空格为距离 s=s+iprint("\n素数和为:",s)

July 20, 2021 · 1 min · jiezi

关于游戏:随机整数列表

题目2 随机整数列表游戏 编写程序文件cx2.py,实现如下性能:1) 定义一个函数Pzc(n),判断整数n是否能同时被3整除。2) 定义一个函数Lst(n),性能是生成一个元素由n个0-100之间随机整数形成的列表。3) 利用下面的函数,生成一个由15个100以内正整数形成的列表A,找出该列表中能同时被3整除的元素放到列表B中,统计个数并按从小到大的程序显示进去。显示格局如下图示例:image.png sort() 函数用于对原列表进行排序,如果指定参数,则应用比拟函数指定的比拟函数。语法sort()办法语法:list.sort(cmp=None, key=None, reverse=False)参数cmp -- 可选参数, 如果指定了该参数会应用该参数的办法进行排序。key -- 次要是用来进行比拟的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。reverse -- 排序规定,reverse = True 降序, reverse = False 升序(默认)。返回值该办法没有返回值,然而会对列表的对象进行排序。因为每个Python模块(Python文件)都蕴含内置的变量__name__,当运行模块被执行的时候,__name__等于文件名(蕴含了后缀.py)。如果import到其余模块中,则__name__等于模块名称(不蕴含后缀.py)。而“main”等于以后执行文件的名称(蕴含了后缀.py)。所以当模块被间接执行时,name == 'main’后果为真;而当模块被import到其余模块中时,name == 'main’后果为假,就是不调用对应的办法。简而言之就是:name 是以后模块名,当模块被间接运行时模块名为 main 。当模块被间接运行时,代码将被运行,当模块是被导入时,代码不被运行。 import random 判断整数n是否能同时被3整除def Pzc(n): if n%3==0: return 1else: return 0生成一个元素由n个0-100之间随机整数形成的列表。def Lst(n): ss=[random.randint(0,100) for i in range(n)]return ssdef main(): B=[]A=Lst(15)print("随机生成的列表A为:",A)for m in A: if Pzc(m)==1: B.append(m)#在列表开端增加新的对象list.append(erd)B.sort()#具体用法见上文print("A列表中有{}个数能被3整除,别离是{}:".format(len(B),B))main()#可由上面的正文替换'''if name == '__main__': main()'''

July 20, 2021 · 1 min · jiezi

关于游戏:所有前端都要看的2D游戏化互动入门基础知识

简介: 在非游戏环境中将游戏的思维和游戏的机制进行整合使用,以疏导用户互动和应用本文作者:淘系前端团队-Eva.js作者-明非 背景当初越来越多的公司和 App 开始应用游戏化的形式去做产品了,所谓游戏化,是指在非游戏环境中将游戏的思维和游戏的机制进行整合使用,以疏导用户互动和应用的办法。 支付宝外面的蚂蚁庄园、蚂蚁森林,通过游戏和公益的联合实现用户的留存和沉闷。淘宝支付宝的芭芭农场、京东的东东果园、拼多多的多多果园、美团的小美果园...无一不是通过游戏化的形式去晋升用户留存的计划。 本篇文章,咱们会列出一些游戏化互动类的游戏,而后对一个案例进行拆分,带大家学习一些2D互动最根底的常识,让大家可能疾速上手写互动游戏。 能做什么 咱们来看几个2D互动我的项目,目前,大多数的互动都是以游戏的模式展示,通过游戏的玩法和粗劣的成果,让用户有更好的互动体验,咱们通过养成,采集,塔防,抓娃娃等相似游戏的模式,联合业务属性,达到更好的业务成果。 根底学习2D互动罕用能力 首先,咱们看一下2D互动游戏所用到的罕用能力,第一局部是前端常识,次要包含渲染所需的绘制工具,游戏循环,资源加载的能力。 而后是根底的绘制和动画能力,也就是后面提到的一些游戏根底元素。在游戏开发中,会波及到很多数学相干的常识,比方让游戏中的物体模仿实在的物理成果,或者像一些游戏中的人机对战中的机器人,是应用游戏 AI 来实现的,在本文中不会过多解说数学类常识。 互动游戏是如何运行起来的 互动游戏是如何运行起来的呢? 首先,咱们晓得,目前很多前端我的项目都是通过数据带动视图的,游戏也是这样的,比如说,咱们在游戏外面有一个飞机,那么,咱们须要定义飞机的尺寸,以及他在游戏中的地位,和他对应的飞机图片,这些属于游戏数据,咱们将数据提交给渲染引擎,渲染引擎依据这些数据内容将对应的内容渲染到画布上。 游戏是动静运行的,为了实现一些动画/实在物理成果成果,咱们通过动画,AI,物理引擎等工具控制数据的变动,而后通过循环来继续批改数据,并且渲染到画布实现游戏的运行。 循环 咱们晓得,通过循环来实现游戏的运行成果,接下来咱们来看一下在前端浏览器环境下,游戏循环是如何实现的。 浏览器提供了 requestAnimationFrame 办法,要求浏览器在下一次绘制之前,调用制订的回调函数,这个办法个别是用于更新动画的。 浏览器在的每一次重绘咱们叫做1帧,浏览器默认的绘制频率是60帧,也就是说,失常状况下,浏览器一秒会刷新60次。 通过上面的办法,咱们能够保障每一帧渲染之前,咱们能够进行数据的计算以及调用渲染办法: const loop = () => { requestAnimationFrame(loop) // 计算数据 // 绘制图形}requestAnimationFrame(loop)因为requestAnimationFrame办法只会在下一次绘制前被调用,所以,咱们须要在每次调用办法的时候去调用一次这个办法保障游戏持续运行,所以在loop办法外面会反复调用这个办法。 个别状况下,咱们会把这个办法放在函数的最后面,因为,如果在计算数据和绘制图形的过程中报错了,会导致程序无奈执行到这个办法,游戏也就停掉了。 画布 在 html 中,咱们个别应用 canvas 标签来绘制图像,它自身没有绘制能力,应用 getContext 获取绘制上下文,调用上下文下面的办法进行绘制。 罕用的绘制上下文有 Canvas API 和 WebGL,个别 CanvasAPI 来绘制2D图像,WebGL 可绘制 2D 和 3D 图像,他的性能更高。 canvas 提供了一些比拟根底的 API,然而在互动游戏中的元素是比较复杂的,所以个别都会有渲染引擎和游戏引擎来承接这些元素。 本文不会具体解说 Canvas,能够到 MDN 等平台学习。 根底渲染接下来我会介绍一下,在2D游戏化互动游戏中,咱们常常用到几种渲染计划。 图片文本图形精灵九宫格遮罩图片和文本就不用说了,是视图开发中最罕用到的。咱们从图形开始说 图形 个别在开发中会常常应用一些简略的图形,图片不仅会用在间接展现内容,也会用在对渲染内容的遮罩,例如一张图片只显示图形内的内容,也会用在按钮区域判断、物理引擎碰撞的形态等等中央。 精灵 ...

July 13, 2021 · 2 min · jiezi

关于游戏:5-用户名和密码用字典保存

题目5、游戏用户名和明码用字典保留已知某零碎的用户名被存到列表 [‘user0’,‘user1’,‘user2’,‘user3’,‘user4’,‘user5’]中了,请编写程序cx5.py实现以下性能:(1)给每位用户创立6位由数字形成的随机初始密码,而后将用户名和明码用字典保留,输入该字典;(2)将用户名和明码存至文件user_inf.txt中。 import randomall_chars = '0123456789'#预置字符串user_name = ['user0','user1','user2','user3','user4','user5']#用户名列表user_pwd_dict = {}#空字典for name in user_name: pwd = ''#空明码 for i in range(6): pwd += random.choice(all_chars)#随机选取字符串中字符,利用循环造成6位明码 相当于random.randint(0, 10)然而这里是字符串,故而不能用 user_pwd_dict[name] = pwd#键值搭配print("已调配初始密码,字典数据为:",user_pwd_dict)#打印出字典fid = open('user_inf.txt','wt')#windows零碎下的写入模式,打开文档for name,pwd in user_pwd_dict.items():#把字典中每对 key 和 value 组成一个元组,并把这些元组放在列表中返回 fid.write(name + ':' + pwd + '\n')#换不换行都不影响fid.close()#敞开文档print("用户名和明码已存至user_inf.txt中!")numpy.random.choice(a, size=None, replace=True, p=None) 从a(只有是ndarray都能够,但必须是一维的)中随机抽取数字,并组成指定大小(size)的数组replace:True示意能够取雷同数字,False示意不能够取雷同数字数组p:与数组a绝对应,示意取数组a中每个元素的概率,默认为选取每个元素的概率雷同。字典的相干常识字典是一种可变容器模型,且可存储任意类型对象,字典的每个键值对(key=>value)都是用冒号:宰割每个键值对之间用逗号,宰割,整个字典包含在花括号{}中格局如下:my_dict = {key1:value1, key2:value2}

July 9, 2021 · 1 min · jiezi

关于游戏:4-列表中的素数

题目4、列表中的素数游戏 编写程序文件cx4.py,实现如下性能:1)定义一个函数lt(m),性能是生成一个元素由m个1-200之间随机整数形成的列表。2)定义一个函数prime(n),判断整数n是否是素数。3)利用lt函数,生成一个由12个1-200之间正整数形成的列表ls,再用prime函数找出该列表中的素数,进行输入显示,同时求出素数之和并输入,显示格局如下图所示(随机产生的数据会有不同,参考输入格局): import random#判断整数n是否是素数def prime(n): flag=True#flag是个判断标记 for i in range(2,n): if n%i==0: flag=False#和判断标记相同 return 0 break#无余数非素数 else: return 1 #产生m个[1-200]范畴的随机数,并放到列表lt中def lt(m): ls=[random.randint(1,200) for i in range(m)] return ls#生成一个由12个1-200之间正整数形成的列表lsls=lt(12)#12个随机数的列表lsprint("随机生成的列表为:",ls)#输入这个列表print("素数有:",end="")#end=""使列表中的素数紧跟在冒号前面,不换行#求出素数之和s=0for i in ls: if prime(i)==1:#0的话输入的就是非素数了 print(i,end=" ")#输入素数,且素数间以空格为距离 s=s+iprint("\n素数和为:",s)

July 9, 2021 · 1 min · jiezi

关于游戏:3-列表数据求和

题目3、列表数据求和游戏文件与计算问题,要求如下:(1) 定义数据求和的函数,函数名字为:addlist()。(2) 预置列表List=[1,3,8,9,5,6]。(3) 从列表List中读取数据,并用addlist()函数进行求和。(4) 将求和的计算结果存入文件t1.txt中。 1:文件的写入操作:关上fp=open(‘ceshi1.txt’,mode=‘w’,encoding=‘utf-8’)塞进去fp.write(‘把大象塞进去’)敞开fp.close()2:文件的读取操作:关上fp=open(‘888’,mode=“r”,encoding=‘utf-8’)读取res=fp.read()print(res)敞开fp.close()#数据求和函数def addlist(n): sum=0 for i in n: sum=sum+i return sumList=[1,3,8,9,5,6]jieguo=addlist(List)print(jieguo)#文件的写入操作如下fp= open('t1.txt',mode='w+')fp.write(str(jieguo))fp.close()

July 9, 2021 · 1 min · jiezi

关于游戏:2-随机整数列表

题目2 随机整数列表游戏 编写程序文件cx2.py,实现如下性能:1) 定义一个函数Pzc(n),判断整数n是否能同时被3整除。2) 定义一个函数Lst(n),性能是生成一个元素由n个0-100之间随机整数形成的列表。3) 利用下面的函数,生成一个由15个100以内正整数形成的列表A,找出该列表中能同时被3整除的元素放到列表B中,统计个数并按从小到大的程序显示进去。显示格局如下图示例: sort() 函数用于对原列表进行排序,如果指定参数,则应用比拟函数指定的比拟函数。语法sort()办法语法:list.sort(cmp=None, key=None, reverse=False)参数cmp -- 可选参数, 如果指定了该参数会应用该参数的办法进行排序。key -- 次要是用来进行比拟的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。reverse -- 排序规定,reverse = True 降序, reverse = False 升序(默认)。返回值该办法没有返回值,然而会对列表的对象进行排序。因为每个Python模块(Python文件)都蕴含内置的变量__name__,当运行模块被执行的时候,__name__等于文件名(蕴含了后缀.py)。如果import到其余模块中,则__name__等于模块名称(不蕴含后缀.py)。而“main”等于以后执行文件的名称(蕴含了后缀.py)。所以当模块被间接执行时,name == 'main’后果为真;而当模块被import到其余模块中时,name == 'main’后果为假,就是不调用对应的办法。简而言之就是:name 是以后模块名,当模块被间接运行时模块名为 main 。当模块被间接运行时,代码将被运行,当模块是被导入时,代码不被运行。 import random#判断整数n是否能同时被3整除def Pzc(n): if n%3==0: return 1 else: return 0#生成一个元素由n个0-100之间随机整数形成的列表。def Lst(n): ss=[random.randint(0,100) for i in range(n)] return ssdef main(): B=[] A=Lst(15) print("随机生成的列表A为:",A) for m in A: if Pzc(m)==1: B.append(m)#在列表开端增加新的对象list.append(erd) B.sort()#具体用法见上文 print("A列表中有{}个数能被3整除,别离是{}:".format(len(B),B))main()#可由上面的正文替换'''if __name__ == '__main__': main()'''

July 9, 2021 · 1 min · jiezi

关于游戏:每个程序员都需要知道一些游戏网络知识

作为一个程序员,你有没有设想过多人游戏是如何实现的?在外行人看来游戏很神奇:两个或者更多的玩家在网络上分享独特的经验,就像他们实在的存在于雷同的虚构的世界一样。游戏看起来犹如一个微小的魔术,微妙而又刺激,但作为一个开发人员咱们晓得,实在的状况和咱们所看到的并不一样,那只是一种错觉。你感触到的共享事实,实际上是在那个时刻内,由你本人的独特视角和地位所感知的近似状况。 一、Peer-to-Peer 帧同步最后的游戏是通过peer-to-peer来联网的,每个计算机通过网状拓扑的构造的彼此连贯并替换信息。你依然能够看到这种模型存在于RTS游戏中,而且基于某些起因它还很乏味,兴许是因为它是大多数人认为游戏网络工作形式的第一种形式。 解决游戏信息的根本思维就是把游戏的数据抽象并转换成一系列命令音讯,当解决每个转换的时候就间接演变为游戏的状态。比方:挪动单位、攻打物体、建造修建。这所有都须要在线的每个玩家机器,从一个初始化命令开始之后,都运行完全相同的命令和转换数据。 当然了,这只是一个过于简略的解释,同时也隐去了很多细节,不过咱们通过这个根本的思路能够晓得RTS游戏的网络是如何工作的。这些看起来是如此简略和优雅,但可怜的它们有几个因素限度者咱们。 第一个限度,要保障游戏状态齐全确定统一的是异样艰难,特地是放弃每台机器上每个转换输入都放弃雷同。比方,一个单位在两台机器上有稍微不同的门路,在一台机器上早一些达到并开始了战斗,后果反败为胜,而在另一台机器上,因为略微晚一些达到而失败。就像一只蝴蝶扇动了翅膀,而后在世界的另一边导致了飓风的呈现,随着工夫的推移,一个渺小的区别就会导致两边齐全的不同步。 第二个限度,为了保障游戏的所有玩家输入统一,这就须要等到所有玩家的以后回合数据都达到之后才能够模仿播放这一回合动作。这就意味着游戏中的每一个玩家都须要期待网络提早最高的那个玩家。RTS游戏通常代表性地通过立刻提供音频反馈与(或是)播放吟唱(过渡)动画来覆盖这段提早,然而最终真正影响游戏的动作要在这段提早过来之后能力进行。 第三个限度,因为游戏中状态扭转的同步是通过发送命令信息来同步的。所以为了游戏中玩家状态都统一,须要所有的玩家都要从雷同的初始状态来开始游戏。这意味着每个玩家必须在开始游戏之前先退出房间而后一起开始游戏,只管实践上也能够反对让某些玩家晚些退出游戏,然而在一场进行中的游戏中取得一个齐全确定的起始点的难度相当大,所以这种状况并不常见。 只管有这些因素限度困扰者咱们,不过这个模型还是很适宜RTS游戏的,并且它依然存在于明天的游戏当中,例如“Command and Conquer”、“Age of Empires”与“Starcraft”等。起因就是在RTS游戏中,外面蕴含了上千多的单位,这些单位都有本人的状态须要同步,而且他们数据量都太大了,很难用来在玩家之间替换。别无选择,咱们只能通过这些游戏状态扭转的命令来同步。所以以上这些就是 peer-to-peer 帧同步的网路游戏模型的介绍了,对于其余类型的游戏,最先进的技术曾经开始呈现了。让咱们当初从Doom, Quake 以及 Unreal经典游戏中开始一起察看动作游戏的技术演变。 二、客户端/服务器(c/s架构)在动作游戏的时代,以上帧同步的限度在Doom 游戏中变得更加显著,只管在局域网中体验还不错,但在对于互联网的用户来说它体验太蹩脚了: 只管能够应用一个猫(调制解调器)把两个Doom 机器通过互联网连贯在一起,但他们一起游戏会异样迟缓。范畴从无奈游戏(例如:14.4Kbps PPP 连贯)到略微能够玩(例如 :28.8Kbps 猫运行一个被SLIP驱动压缩的数据)之间游戏联机都异样迟缓。因为这些连贯形式只是边际效用,本文将仅关注间接的网络连接。这个问题是因为Doom网络局部原本就是只为局域网而设计的,并且应用了后面介绍的peer-to-peer 帧同步模型。每一回合每个玩家的输出的信息(比方要害按键等)都与其他人进行同步告诉,并且任何玩家在播放这一帧动画之前,必须得等到所有其余玩家的要害按键信息都被接管到,才能够去模仿播放。 也就是说,在你能够转身(转换),挪动或者射击之前,你必须期待提早最大的猫(调制调解器)玩家的输出。只是想想上述那个人所写的“这些连贯形式只是边际效用”就会让人恨之入骨和丧气了。 为了扭转这种现状,只能在局域网以及大学网络和大型企业能力取得良好连贯而进行游戏,是须要扭转这种网络模型了。在1996年,这变成了事实并被实现了,John Carmack过后 公布雷神之锤,他采纳客户端/服务器(C/S)架构代替了P2P模型。 现在游戏中的玩家能够不用再运行雷同的代码以及间接互相通信,每个玩家的机器是都是一个“客户端”,他们都通过一台叫做“服务器”的机器进行通信交互。游戏的最终状态确定不再依赖于每台客户端机器来独特确认,而是由服务器来确定最终后果。每个客户端如同一个哑终端,用来展现一个近似值的表演,真是的游戏状态是运行于服务器之上。 在一个纯正的c/s架构中,你不用在本地运行游戏代码,而是把一些例如按键、鼠标挪动,点击等输出信息发送到服务器。服务器会在游戏世界中更新你的玩家状态,而后再封包一个蕴含你角色信息以及邻近玩家数据的包回复给你的客户端。所有的客户端在每个音讯更新的间隙做一个插值预测,以改善在每个状态更新期间,物体能够平滑的挪动,如此,你就有一个能够联网的客户端/服务器架构的游戏了。 这曾经是向前迈出了极大的一步。游戏的体验依赖于客户端和服务器的连贯,而不是游戏中提早最大的那个玩家。如此能够反对玩家在游戏中自在的进入和退出,同时因为客户端/服务器升高了均匀每位玩家的带宽,从而能够减少更多的在线玩家。 然而这里依然有一些问题存在于 c/s 架构中: 我记得我交代了所有从DOO到Quake中对于网络的决策,然而重要的是我正在应用谬误的假如来做一个好的网络游戏。我原先设计的指标是网络提早<200ms。人们通过一个好的网络供应商连贯互联网,从而能够取得一个好的游戏体验。但大失所望,世界上99%的用户应用猫(调制调解器)通过 slip或者ppp 进行连贯,而他们经常都会通过槽糕而又拥挤的ISP。这会带来最低300+ms 的 网络提早。一个音讯要通过,客户端>用户猫>ISP猫>服务器>ISP猫>用户猫>客户端。上帝,这太逊了。 OK,我做了一个谬误的设定。我在家里应用T1 宽带,所以我只是不理解在PPP网络下的生存。我当初就解决它。 这个问题当然是提早。 接下来John在他公布QuakeWorld的时候将扭转这个行业。 三、客户端预测(Client-Side Prediction)在原来的Quake游戏中,你会感觉到电脑与服务器之间的提早。比方,你按键向前挪动,在你真正挪动之前,你须要等到数据包发送服务器而后再回复到你的客户端,你才能够真正的挪动。按键停火,在你的射击之前同样须要雷同的期待。 如果你玩过任何FPS游戏,比方:Modern Warfar,你会发现并没有提早产生。那么fps游戏是如何做到在多人状况下,你的动作看起来并没有提早? 这个问题被分为两个局部来解决。第一个局部是客户端挪动预测,这事John Carmack 为 QuakeWorld游戏多开发的,起初被合并到了Tim Sweeney的空幻网络模块。第二个局部就是提早弥补,它是有Valve公司的Yahn Bernier在Counterstrike所开发。那么在这个章节,咱们把焦点放在第一局部——暗藏用户挪动的提早。 当写到对于他行将公布的QuakeWorld打算的时候,John Carmack 讲到: 我当初容许客户端能够预测用户的挪动,直到服务器的权威信息回复之前。这是一个重大的构造变更。客户端须要晓得对于对象的硬度、摩擦力、重力等一系列根底属性。我很伤心的看到,客户端仅作为一个终端存在将会来到,但作为一个实用主义者,我必须超过这种现实情怀。那么当初咱们为了打消提早,客户端须要运行更多的代码。它当初不再是一个只把输出发送给服务器而后再把返回信息进行插入的哑终端。当初客户端的机器能够运行一部分游戏代码,它能够在本地预测你的角色挪动并且能够即时响应你的输出。 当初当你即刻按键向前,你的游戏会立即向前挪动,不会再去期待数据往返一次客户端和服务器之间才来回应你的操作。 这种形式的难点不在于预测,这种预测工作,就像失常的游戏代码一样 —— 依据玩家的输出,及时地更新游戏角色的状态。而难点在于,当客户端和服务器对于玩家角色所做的事件(动作)核检不统一的时候,客户端如何基于服务器信息进行更正。 当初你会想,hey,如果代码运行在客户端——为何不以客户端的信息为准?客户端能够本人的为角色模仿运行代码,并且只须要在每次发送数据包时告知服务器这些信息。如果每个客户端都对服务器发送雷同的信息,通知服务器“这是我当初的地位信息”,那么将会带来这样的问题。客户端会很容易被黑客攻击并管制,这样在RPG游戏中,一个舞弊便能够立刻规避对方技能击中,或者当你射击的时候霎时挪动到你的身后。 所以在FPS游戏中,尽快每个玩家的客户端能够预测他们本人的角色进行操作挪动,但最终每个玩家的角色状态相对以服务器为准。这就是乏味的中央。如果客户端和服务器产生了不统一,客户端必须基于服务器的信息为准并更新,然而因为客户端和服务器之前有提早,服务器的修改必然是过来的动作。比方,如果信息从客户端到服务器耗时100ms,而后返回又耗时100ms,那么任何服务器的的修改都是客户端200ms之前的行为动作,这个工夫正好是客户端预测角色挪动的工夫。 如果客户端每个动作都会被服务器修改,那么你将会看客户端被拉回了原先的地位,如此客户端将做不了任何事后预测的运算。那么咱们如何解决这个问题,仍然能够放弃客户端提前预测? 解决方案就是在客户端创立一个buffer,而后用来循环放弃角色的状态以及原本玩家的输出。当客户端收到了服务器的更正信息时候,它首先抛弃掉buffer外面比(服务器回复的)更正状态要老的状态信息,而后基于(更正的)正确的状态重放存储在buffer外面的输出信息,重发的这些输出信息的范畴是从正确状态到以后预测工夫之间。如此实际上,客户端只是看似无形中“倒带和重放”当地玩家角色静止的最初n帧,同时放弃世界其余中央没有变动。 这种办法能够让玩家感觉在管制游戏的时候没有提早,同时也改善了客户端和服务器之间代码运行的一致性——在等同输出的状况下保持一致的后果。当然了,修改的状况很少产生,Tim Sweeney 如此形容: ...

April 8, 2021 · 1 min · jiezi

关于游戏:游戏服务器和Web服务器的区别

用Go语言写游戏服务器也有一个多月了,也可能显著的感触到两者的区别。这篇文章就是想具体的聊聊其中的区别。当然,在理解区别之间,咱们先简略的理解一下Go语言自身。 PS:这里仅拿SLG手游举例子 1. Go语言的特点Go语言跟其余的语言例如Java比起来,算得上一门很年老的语言。Go语言是由Robert Griesemer、Rob Pike和Ken Thompson于2007年在Google开发。并于2009年正式公布。 Go语言的设计理念围绕着简洁这两个字,认为少即是多。如果你相熟Java,用Java那一套语法命名跟Go做比照,能够很显著的领会到这种感觉。 Go的特点能够简略的概括成以下几个点。 1.1 动态类型和编译型首先Go是动态类型,动态类型就是编译时就晓得每一个变量的类型,得益于此,在编译的阶段就可能发现很多问题。而如果是动静语言,例如JavaScript,有些问题直到运行时能力发现。 Go是编译型语言,看到编译型大家脑子里可能会想到另外一个词解释型。两者的区别从字面上来了解其实曾经能够看进去,我用一个简略的例子来类比一下。 编译型 去餐馆吃饭,点了菜之后,饭店会等所有的菜做好了再上解释型 去餐馆吃饭,点了菜之后,陆陆续续的边吃边上1.2 跨平台顾名思义,你写的Go源码在所有的零碎都可能运行。 这点其实很好了解,例如Java的口号是"Write once, run anywhere"。咱们都晓得Java是编译型的语言,然而Java在编译的时候生成的是字节码,这个字节码与以后的操作系统无关,与CPU也无关。 这种字节码必须依赖Java虚拟机能力运行,而虚构机会将操作系统和CPU之间的差别与用户屏蔽。对于编程的人来说这个过程其实无感知的。而对Java来说,语言自身的跨平台并不能代表代码能够跨平台。 Go的跨平台从某种方面来说,与Java类型,咱们须要装置与以后操作系统绝对应版本的Go。编译进去的可执行文件会依据操作系统的不同而有所不同。 1.3 主动垃圾回收与JVM一样,Go在运行时的内存治理(GC)由Go语言自身来治理,不须要程序员的参加,然而咱们能够干涉。 1.4 原生的并发编程何为原生?咱们都晓得,在Java中如果要实现并发, 须要内部的类库反对(Thread),而Go不须要从内部再引入任何依赖。反对应用关键字go即可。而且Java中是通过共享内存进行通信的,相熟Go的应该都看过一句话“不要通过共享内存来通信,而应该通过通信来共享内存” 1.5 欠缺的构建工具从获取、编译、测试、装置、运行和剖析等一系列流程都有本人的内置工具。例如获取能够应用go get命令来下载更新指定的代码包,并且对它们进行编译和装置,能够应用go build 对源码进行编译,用go run命令来运行Go的程序,用go fmt来疾速格式化代码,对立代码格调。 1.6 多范式编程目前支流的编程范式有命令式编程、函数式编程和咱们最相熟的面向对象编程。在编写Go的代码的时候,咱们能够抉择应用面向对象的办法,也能够应用函数式编程的思维,互相联合,相辅相成。 例如,在Go外面也能够用接口来形容行为,也能够应用纯函数来避免出现副作用。因而,多范式编程就是指这个语言反对多种编程范式的。 1.7 代码格调强对立应用Go的内置工具go fmt即可疾速的将代码格式化成官网对立的规范,以此来达到代码格调对立的目标。甚至能够用golangci-lint来检测你的语法跟内置的规范语法是否有抵触,齐全能够将这个检测工具挂在git的钩子上,以此来达到强制的代码格调对立的目标。 1.8 沉闷的社区还有一个很重要的特点是,国内的Go的社区非常的沉闷,这对于Go在国内的遍及起到了很大的作用。 2. 用Go的劣势先说一下我对Go语言的认识,我认为Go在服务器这块是十分有劣势的。当前如果有高并发的利用场景,那么大概率这个服务就是用Go写的。不晓得大家有没有发现,摩尔定律正在生效。近十年内,硬件的原始解决能力都没有太大的晋升。显然,一味的减少晶体管的数量曾经不是解决问题最好的办法。 NASA前不久公布到官网而后又迅速删掉的文章走漏了,Google可能曾经实现了量子霸权,艰深一点说就是领有超过所有传统计算机的计算能力。而搁置更多的晶体管的代价也越来越高,所以当初厂商都在向处理器中增加更多的内核来晋升性能。 就像大家相熟的Java,尽管Java自身反对多线程,然而在Java上应用多线程编程代码算是比拟低廉的。在Java中创立一个新的线程就会耗费靠近1M左右的内存。如果你真的须要反对运行上千个线程,那么服务很可能运行着就OOM了。除了内存耗费外,还会存在因为反对多线程带来的并发和死锁等问题。 而Go中,应用协程来代替线程。而且一个协程所耗费的内存比线程少了很多倍。同样的物理设施限度,你可能只能启动最多几千个线程,而协程可能启动上百万个。而且不同的Goroutine能够通过信channel进行平安的通信。 3. 游戏服务器和Web服务器的区别有些对游戏服务器的介绍可能会说,游戏服务器是一个须要长期运行的程序,而后怎么怎么样。我集体认为Web服务器一样的须要长期运行,也须要响应不定点不定时来自用户的申请。两者从宏观上来看其实没有实质的区别。同时Web服务器也会对于稳定性和性能有要求,游戏服个别分为大小服,咱们这里都依照小服举例子。 3.1 状态首先要提到的就是状态。可能你会据说过一个概念,游戏服务器是有状态的,而Web服务器是无状态的。什么意思呢?Web服务器的数据流大多间接会到数据库中。而游戏服务器的数据流首先会到内存中,而后定期的写入数据库(落地)。 换句话说,游戏服务器自身的数据与数据库中的数据在运行期间会存在一个数据不统一的窗口。如果此时游戏服务器宕机了,那么就会造成数据首先到的内存数据与数据库存的数据不统一。 而Web服务器则不会有这样的问题,Web所有的数据状态都会落地,而且能够针对操作加上事务,不必放心因为操作失败而引入脏数据。正因为有了状态的束缚,游戏服务器就会很谨慎的应用内存、CPU。以求在资源无限的状况下,最大化的进步的承载量,并且升高服务提早。当然,Web服务器会为了升高某个接口的响应工夫而去做对应的优化。 3.2 扩容在Web服务器中,如果你不能评估一个服务所面临的压力,又不想因为刹时的热点拜访导致服务间接不可用的话,齐全能够设置成主动扩容,因为每个服务只是单纯的接管申请,而后解决申请、返回后果,不会将数据保留在服务器的内存中。要有数据存到内存,那也是在Redis中。而Redis数据失落对数据的一致性根本没有影响。 然而在游戏服务器这边很难做到像Web那样灵便。首先,数据的流向不是数据库,而是内存。 举个很简略的例子,玩家的主城被攻打着火了,如果有了主动扩容,很有可能在落地的窗口内,玩家再申请一次,申请到了另一个实例。主城又没有着火了。因为数据都会先存在内存中。 再举一个例子,玩家氪金买了一个礼包。而后退出游戏,落地窗口内再次上线没了。这就不是单纯的数据问题了,玩家这是花了真金白银买的道具,忽然就没了,一两个还好解决,如果多个玩家都呈现这样的问题,那这就属于重大的线上事变了。修复数据的工作量非常的大。 所以,对于一个游戏服务器,所能应用的内存和CPU的资源是十分无限的,不像Web服务器能够不必花很大的代价做到横向扩大。这也就是为什么游戏服务器会非常非常的重视代码的性能以及稳定性。 3.3 稳固就像下面说的例子,如果游戏服务器运行中出了BUG,导致服务间接不可用,或者说通过这个BUG刷到了大量的道具,将是一个十分重大的线上事变。 而对于Web服务器来说,如果是管理系统之类的,有可能会有脏数据值得一提的是,脏数据对于Web来说,排查起来也是一件很头疼的事件。如果没有脏数据,只是服务暂且不可用,而且如果用的是微服务架构,重启服务的代价是相对来说比拟小的,只有正在重启的服务的业务是不可用的,其余的局部则能够失常的拜访。 而对于游戏服务器来说,服务器重启影响的是全服的玩家。玩家在停服期间,甚至连游戏都进不了,特地的影响玩家体验。而且,如果停服之前服务器的数据落地呈现了问题,服务重启之后会将数据从数据库load到内存中,此时同样会造成数据不统一的问题。 3.4 性能从我的教训来看,在做Web服务器的时候,没有为了缩小GC的压力,为了少占用内存去做过多的优化。当然这是因为我的项目自身的体量不大,如果QPS很高的话,Web服务器同样很须要重视性能,只不过游戏服务器须要始终特地留神这个方面。 不过在Web,如果访问量很大的话导致单个服务不能扛住压力,大部分人首先想到的解决方案应该就是搞多个实例,毕竟能够做到很轻松的横向扩大。 在游戏服务器里,会把服务器的资源看的相当的贵重。例如,能不落地的字段就相对不要落地,某个字段的值能够通过已知的条件算进去的,就尽量不要定义在代码里。不过这也要看具体情况衡量运算量和调用的频率。因为上线之后,如果遇到了数据不统一,保护的数据越少,修复数据的难度就越小。 3.5 谨严这一点上来说,我认为是两者都很关注的一个重点。只不过,在游戏服务器的某些状况中,如果服务器抛出异样或者panic。其造成的结果会被游戏非凡的环境放大。 ...

April 8, 2021 · 1 min · jiezi

关于游戏:PvP竞赛游戏设计与实现

写在后面 这个月接手了两个较大的需要,其中一个是比赛类游戏,还有一个是抢红包的玩法。两种都波及人与人之间肯定的互动,游戏趣味性绝对较高,从数据上反馈用户也会绝对更加喜爱。 本文先介绍第一个需要的背景、设计与实现。对于抢红包的将放在下一篇文章进行探讨。 需要背景 之前有一阵子,有个很火的小游戏-阳光养猪场,那个养猪合成而后提现的,常常在短视频平台做广告。实质就是用户会每天来进行养猪,到肯定等级就能够提现。 产品感觉每个用户与猪场是独立互动的,用户与用户之间没有什么互动,想搞一场养猪大赛来进步用户与用户之间的互动,并通过PvP比赛机制刺激用户养猪,从而进步用户对产品的各项数据,比方UV、DAU啊等等…… 最终成果大略是,用户进入猪场便开启一轮养猪大赛,随机匹配几名对手,在规定工夫内依照养猪次数进行排名,最终依照名次发放肯定的处分。 需要剖析 首先,一场养猪大赛的流程是用户上线,零碎主动为其随机匹配N名对手组成一队。比赛在无效工夫内,须要记录下每名玩家的养猪次数,便于用户实时统计查看对手的次数,确认本人的名次。所以,一场比赛次要包含比赛固有信息、队伍成员信息、选手养猪次数信息等外围信息。当然还会有一些其余辅助类信息,比方给用户展现所有对手的头像昵称、地区等级等信息给用户更真切的游戏体验。 那么进行一场这样的比赛,须要哪些数据呢? 比赛固有信息蕴含开始工夫和完结工夫,每个比赛都会有一只队伍,之间是一对一的关系,除非同一批人进行多轮比赛。每支队伍包含成员数量,每名成员的根本信息以及最外围的实时养猪次数信息。结算时还包含各个排名对应的处分信息。 可能以上都还好,读者应该和我刚拿到需要的时候一样,对如何匹配对手感到好奇。不禁想到咱们在玩LOL之类的游戏是如何匹配的,它会依照咱们本人的胜率、段位程度匹配旗鼓相当的对手,这样保障了游戏体验,维持均衡。所以养猪小游戏也是一样,用户的养猪能力也是分三六九等的,咱们须要依据用户以后的等级匹配对应等级的对手。至于如何确定用户以后的等级,这就须要你提前设置好一些规定对用户进行划分,在比赛上线之前,这个划分等级先先提前预埋。比方每天养猪100次的是A等,100~200次的是B等……这样划分好后,咱们还须要筹备一个反向索引,即A等有哪些用户(uid),B等有哪些,这样在匹配对手时,咱们就能够先判断本身是哪一等,再去按规定随机去其余等级的桶里捞uid,这样一队人就组成功了。 技术选型 晓得流程,定义好了数据结构,咱们就能够进行大抵的技术选型。 首先,思考到比赛自身是一个有时限的游戏,相当于有肯定的过期性,最适宜存储数据的首先想到用redis。而且这种实时PvP的比赛,查问与写入量都很大。 思考到当结算曾经到了结算工夫,用户能够支付了,然而redis过期了,数据岂不是没了?这一点倒不必放心,一是自身就能够设置处分支付时限,告知用户规定;二是咱们能够比赛结算时将后果进行落库等形式长久化。 对于上述讲的匹配对手局部,这次要波及的是一些离线数据,关乎到用户的历史行为,比方用户的养猪次数,他们的等级划分。目前业务遵循,用户的在游戏内的行为会进行记录,会落到MySQL、ES等存储上,甚至进一步异步抽数到大数据侧。BI同学能够通过大数据分析平台离线计算用户行为,依照业务的指标从新整合出一份数据。比方业务代码会将用户每次养猪行为记录到ES,之后同步到HIVE,BI便能够间接从HIVE表中对用户过来一整天的数据进行统计,最终依照规定划分出ABCD几个等级,也能建设反向索引。所以,这整个造成了一个闭环。(当然我对这个环认知肤浅,显著感觉到了大数据那块说的比拟抽象不业余) 具体实现 思考到实现老本,一期实现的成果是一个单向的比赛,即用户随机匹配n个对手,但本人并不是他们的对手。认真想想这样的差异? 如果是双向的,那么每场比赛是n个成员专用的信息,那么比赛和队伍、成员的关系是一对一和一对多的关系。而如果是单向的,齐全能够了解为比赛和成员也是一对一的关系,因为对手们不care是谁把“我”当成了对手,只有比赛的配角才care,只须要创立比赛的时候记录下匹配的对手名单即可。在技术实现上,单向的也更为简略,只须要将比赛信息、队伍中对手信息存在一个redis key中即可。如果是双向的,这须要比赛信息和队伍id保留在一个key,其实队伍id对应n的选手信息保留在一个key,所以成员都要保留一个本人以后对应的比赛信息key。 在对手匹配上,BI同学能够提前把每个等级用户们的uid进行存储到redis中,构造例如是:A-uidList,B-uidList……在匹配对手时,可能会所有人都拜访同一个redis key,所以也会造成热key问题。同时每个等级的uid汇合会十分宏大,而咱们每次匹配对手也仅仅随机取其中几个。这样势必须要咱们将uid汇合进行打散到多个桶中,既能解决热key也能解决大key问题。比方A等级10w个uid分到1000个桶中,每个桶仅寄存100个uid即可。 至于最外围的养猪次数怎么实时统计呢?既然是单向的比赛,我可能是周期是昨天明天的48h,对手的可能是明天今天的48h,所以必须将用户养猪次数按最小的工夫粒度存储。这里的最小指的是满足业务需要的最大粒度。比方每小时的用户养猪次数记录在同一个redis key下,key的构造能够为:prefix+uid+date+hour。这样在统计每个比赛的所有成员养猪次数信息时,能够依照比赛开始工夫截止以后工夫,批量查问所有合乎时间段的redis进行聚合。当然按小时粒度曾经足够小了,天级别的粒度也够咱们的需要了。 其余一些细枝末节的信息,比方处分,用户昵称头像等,这些存储到适合的中央都行,有现成接口调用不存储也可,怎么不便怎么来。 双向比赛 无妨想一想,如果要实现双向的怎么搞呢? 首先匹配对手的计划还是不变,次要变动的是比赛信息的存储,以及养猪次数的记录。 因为比赛和队伍、成员曾经不能看做是一对一的关系,那么就须要依照设计DB的那套办法对其关系进行梳理。每个比赛id关联一个队伍id,每个队伍id关联着n名uid,每个uid又关联一个比赛id,同一队伍的uid关联的当然也是同一比赛id。 从玩家角度讲,本人首先在redis存储本人以后的比赛id,而后redis对应会有一个以比赛id为key的值,外面寄存了所有成员uid(这里简化了队伍id)。 因为处于一队的成员们共享同一个比赛,所以每个人每次喂食都去批改本人的次数即可,齐全能够把养猪次数记在比赛id的key信息外面。链路即用户养猪后,先,查到以后本人的比赛id,而后再去查比赛信息,而后给本人的次数+1。别的成员会立即看到次数上涨了。 看似如同更简略了? 其实问题不在这里,而在于创立比赛时可能呈现并发行为,A选了B和C,B又选了D和E,这可能是同时的。所以这样游戏的整体交互流程须要进行变动,创立比赛不是由每个人本人创立,而应该由零碎对立进行创立调配,让零碎“串行”的去创立队伍,调配人员,解决并发。认真想想,咱们开始一局LOL较量时,匹配期待一段时间是为什么? 机器人 养猪比赛容许并列名次,如果大家都跟磋商好一样,都不养猪,都能拿第一,是不是很不错,一点也不卷。所以咱们要给它一个push,更好的调动用户们的养猪积极性。 产品说机器人可不能很呆,次数变化无穷,也得像真人一样,过一会儿养一次猪,23333。而且机器人也得有难度之分,就像LOL人机模式一般、个别、末日,其余网页游戏不同等级的BOSS一样。 怎么实现这种mock行为呢? 首先机器人这种模仿真人,齐全能够将“过来式”的真人行为表现在机器人身上,一样BI统计好养猪次数,依照小时划分好,业务代码计算机器人养猪次数时进行聚合即可。依照这种思路,置信难度之分齐全能够实现。

April 1, 2021 · 1 min · jiezi

关于游戏:一个猜数字网页游戏利用java制作一个猜数字小游戏

明天就跟大家聊聊无关利用java制作一个猜数字小游戏,可能很多人都不太理解,为了让大家更加理解,小编给大家总结了以下内容,心愿大家依据这篇文章能够有所播种。 具体方法如下: package com.swift; import java.util.Random; import java.util.Scanner; public class GuessBigSmall { public static void main(String[] args) { Scanner scan=new Scanner(System.in); Random random = new Random(); int number = random.nextInt(1000) + 1; for (;;) { System.out.println("请输出猜的——正整数——数字:"); int guessNumber=scan.nextInt(); if (guessNumber>number) { System.out.println("猜大了。"); continue; } else if (guessNumber System.out.println("猜小了。"); continue; } else { System.out.println("祝贺,猜对了。"); break; } } } } 另一种生成随机数办法 package com.swift; import java.util.Scanner; public class GuessBigSmall2 { public static void main(String[] args) { Scanner scan = new Scanner(System.in); ...

April 1, 2021 · 1 min · jiezi

关于游戏:Unity-3D网页游戏与flash网页游戏的较量

近几年来,网页游戏成为了游戏界关注的焦点,因为其制作简略,成本低并且收益率较高,因而成为了泛滥游戏厂商追赶的对象,然而除了商家夸大的炒作宣传外,很少有页游佳作呈现。然而,随着Unity 3D游戏引擎的呈现,网页游戏的3D化成了页游冲出重围的杀手锏,那么在flash网页游戏称霸的明天,Unity 3D网页游戏在和传统FIASH页游的较量中到底鹿死谁手呢? Unity 3D介绍:Unity 3D是一款跨平台的3D图形引擎,已知可能在网页及苹果零碎中运行。采纳Unity 3D引擎开发的网页游戏,第一印象便是视觉效果的微小晋升,是一个让你轻松创作的多平台的游戏开发工具,是一个全面整合的业余游戏引擎。 绝对于PHP/ASP/JSP/.net/JavaScript/Vbscirpt等低端程序语言及超简单的Java编程语言,Unity 3D游戏引擎无疑为宽广页游制作商们开拓了一条新的制作路径,比起个别JavaScript/Vbscirpt或flash,Java语言制作的一些中看不重用的页游界面,应用Unity 3D作为游戏引擎制作出的弱小平面三维成果给你感觉相对是殿堂级的感触。 时势造英雄 U3D网页游戏的劣势 比肩客户端游戏的高质画面 得益于Unity 3D游引擎弱小的画面图形处理技术,U3D网页游戏在游戏画面的疾速转换,游戏背景的shader解决和3D画面的色调渲染上均达到了与端游平分秋色的水平,齐全能够满足以后游戏玩家的 3D解决需要。 繁难的开发技术 U3D网页游戏制作脚本Mono脚本——一个基于.NET Framework的开源语言,因而程序员可用JavaScript.C#或Boo加以编写,对于被传统Java语言程序折磨得死去活来的游戏制作者来说,无疑是一个天大的好消息,而其独特的The Unity Asset Server是一个反对各种游戏和脚本的版本控制计划,应用PostgreSql作为后端,这样就为U3D网页游戏提供了一个广大的技术扩大空间。 英雄也有得志时 U3D网页游戏的劣势 折磨人的插件 U3D网页游戏自身并不能实现全3D性能,须要借用插件能力实现纯3D成果,这比起flash或Java语言制作的即开即玩游戏推广起来要麻烦一些,毕竟网页游戏自身就以无需下载客户端,快捷不便著称的,如果关上画面就是360等杀毒软件的插件平安揭示,预计很难满足玩家们胃口。 过大的网络耗费 U3D页游的网络资源占用很高,绝对应个别flash或Java语言制作的低消耗传统网页游戏,对于网速的要求较为突出,凭目前咱们中国的网速来说预计玩家们须要一个漫长Loading工夫。 霸者雄风 flash网页游戏的劣势 无需插件,弱小的浏览器反对 浏览器端采纳flash或Flex开发的网页游戏,这类因为flash10的反对,能够不必插件既能够进入游戏,无需下载客户端,只需关上IE网页,即可进入游戏,不存在机器配置不够的问题,最重要的是敞开或者切换极其不便,尤其适宜上班族。 节约型设计,占用网络资源少 目前互联网上最快捷的视频传输格局就是flash格局,对多媒体的反对度比拟高,因而用flash作为游戏引擎对于目前国内这种低下的网络环境来说相对是好处多多,起码可能做到快捷不便,即开即玩。 躲不过的滑铁卢 flash网页游戏的劣势 先天不足,游戏画面品质低下 受限于flash自身,在解决大规模场景的地图、即时战斗、同屏角色效率问题上有很大的局限,尤其是游戏人物的微表情等细节问题上解决的成果切实让人难以承受,这一点也是令很多flash页游开发者最为头疼的一个问题。 后继乏力,游戏拓展空间狭隘 尽管很多新游都打出了3D噱头,但以flash为根底开发的网页游戏撑死也就只能达到2.5D的程度,只能在游戏的平面场景成果、背景的色调渲染上达到或靠近3D的成果,因而只不过走了个擦边球而已,显然flash页游的开发拓展空间比起U3D页游来说的确很狭隘。

April 1, 2021 · 1 min · jiezi

关于游戏:php网页游戏开发代码PHP游戏编程25个脚本代码

清单 1.简略的掷骰器 许多游戏和游戏零碎都须要骰子。让咱们先从简略的局部动手:掷一个六面骰子。实际上,滚动一个六面骰子就是从 1 到 6 之间抉择一个随机数字。在 PHP 中,这非常简略:echo rand(1,6);。 在许多状况下,这基本上很简略。然而在处理机率游戏时,咱们须要一些更好的实现。PHP 提供了更好的随机数字生成器:mt_rand()。在不深入研究两者差异的状况下,能够认为 mt_rand 是一个更快、更好的随机数字生成器:echo mt_rand(1,6);。如果把该随机数字生成器放入函数中,则成果会更好。 清单 1. 应用 mt_rand() 随机数字生成器函数 function roll () { return mt_rand(1,6); } echo roll(); 而后能够把须要滚动的骰子类型作为参数传递给函数。 清单 2. 将骰子类型作为参数传递 function roll ($sides) { return mt_rand(1,$sides); } echo roll(6); // roll a six-sided die echo roll(10); // roll a ten-sided die echo roll(20); // roll a twenty-sided die 从这里开始,咱们能够持续依据须要一次滚动多个骰子,返回后果数组;也能够一次性滚动多个不同类型的骰子。然而大多数工作都能够应用这个简略的脚本。 随机名称生成器 如果正在运行游戏、编写故事或者一次性创立少量字符,有时会疲于应酬一直呈现的新名字。让咱们看一看可用于解决此问题的一个简略随机名称生成器。首先,让咱们创立两个简略数组 — 一个用于名字,一个用于姓氏。 清单 3. 名字和姓氏的两个简略数组 $male = array( ...

April 1, 2021 · 4 min · jiezi

关于游戏:怎么在手机上测试php网页游戏GitHub-0510zlOnlinetest-移动端在线

财产测试游戏: 需要: 页面 加载页Loding 展现页面welcome 流动介绍页面intro 测试题目展现页面question 后果弹出:msg 分享 微信性能 微信js-sdk 分享 我的项目流程 graph TB A(Lading页面)-->B(welcome页面) B(welcome页面)-->C(intro页面) C(intro页面)-->D(question页面) D(question页面)-->|胜利|E[胜利信息] D(question页面)-->|失败|F[失败信息] D(question页面)-->|下一题|G[下一题] G[下一题]-->|下一题|D(question页面) loading页面(页面图片加载结束) welcome页面(3秒跳转/点击敞开跳转) 游戏阐明页面(点击按钮) 题目展现(抉择答案)判断 胜利页:胜利信息、图片、音效 失败页:失败信息、图片、音效 下一题:本题剖析、下一题按钮:回到题目展现页 应用的技术: html5:spa单页利用 css:手机端reset.css/手机端页面自适应实现 js:zepto json 数据存储 php 次要用于微信 性能点以及实现(及遇到的坑): css篇 reset.js ==2. 手机端自适应== 遵循支流媒体的分辨率,通过媒体适配器,进行字体等比率缩放,font-size用rem,宽度应用100%,是我参考了许多挪动端适配文章最好的解决办法。 / 媒体选择器/ @media screen and (min-width: 641px) { html, body { font-size: 20px; } } / scale to 320px 2/ @media screen and (min-width: 601px) and (max-width: 640px) { ...

April 1, 2021 · 3 min · jiezi

关于游戏:python游戏服务器搭建教程一文教你如何搭建http游戏服务器

前言 关键词:NodeJs、express、http服务器 一、搭建一个http的服务器 什么是弱联网游戏的主体,不须要网络就能游戏 → 单机游戏。 然而为了优化游戏体验,造就用户黏性,通常会设计好友排行、得分、道具、抽奖等环节须要联网,这些就须要用弱联网技术来做。 弱联网技术个别须要拜访服务器,通常采纳http服务器 ,也就是web服务器+数据库。 用什么技术? 支流的服务器开发语言,都有http的技术,成熟的利用。Java:Tomcat,Python:tornado,C#:IIS; Node.js中有个 express模块,是轻量级http服务器。应用JavaScript开发。 搭建http服务器(1)装置Node.js: www.baidu.com --> Node.js --> node -v -->打印进去Node.js版本; (2)装置express: express基于Node.js http框架。 百度搜寻进入GitHub官网,点击进入,搜寻express,如上图。而后,点击进入。在磁盘新建一个文件夹webserver,进入此文件夹,按住Shift键同时,右击,抉择【在此处关上命名窗口】,之后执行命令:npm install express,装置express。 (3)搭建一个http server --> 6行代码; 在文件夹webserver中新建main.js文件,批改文件内容如下: 1.  var express = require('express'); // creatorApplication: 帮忙咱们创立一个web app实例;3.  var app = express(); // app 的实例;5.  // 百度新闻:国内http://news.baidu.com/guoji   --->一个站点外面不同地址;6.  // 百度快慰:国内http://news.baidu.com/guonei7.  // http://news.baidu.com/: 站点:  IP(服务器IP + 域名解析) + 端口;8.  // 域名 ---》DNS服务器---》解析失去IP地址;9.  // http://news.baidu.com/ ---> http://news.baidu.com:80/10.  // 站点IP: 127.0.0.1, 端口: 服务器指定: 8080;11.  // http://127.0.0.1:8080/12.  // 地址的响应申请, --->处理函数;13.  // 地址:响应申请14.  // http://127.0.0.1:8080/lucky --->  funtion()15.  // req 客户端发过来的申请对象,数据都再外面;16.  // res: 服务端会数据给客户端的 对象;18.  app.get('/lucky', function(req, res){19.  var ret = 1+ Math.random() * 7;20.  ret = Math.floor(ret);21.  res.send(""+ ret);22.  }); ...

April 1, 2021 · 1 min · jiezi

关于游戏:即时游戏中的信息融合与既视现象

1、即时游戏中的信息交融 信息交融(information fusion)起初被称为数据交融(data fusion),起源于1973年美国国防部赞助开发的声纳信号处理零碎,其概念在20世纪70年代就呈现在一些文献中。在20世纪90年代,随着信息技术的宽泛倒退,具备更狭义化概念的“信息交融”被提出来。在美国研发胜利声纳信号处理零碎之后,信息交融技术在军事利用中受到了越来越宽泛的青眼。 起初,狭义上认为信息交融是将几种不同的信息合成一体。直观上讲,信息交融是以不同的信息为前提,采纳合成的伎俩,最初造成一个新的信息。须要留神,信息交融的后果对于最终决策起着至关重要的作用,这当然是以正确的信息交融为前提。 信息交融始终以来往往和传感器、军事技术联合在一起,而在即时游戏畛域,信息交融并没有明确定义,本文的钻研内容为即时游戏中的信息交融景象,对此,本文也对即时游戏中的信息交融下了一个定义:在即时游戏中,信息交融是指玩家在接管不同的游戏数据信息(比方血量、地位、工夫、技能等)时,对信息进行交融,并对交融的信息做出决策。 玩家在对经验过的场景、突发情景、技能图标等信息造成肯定记忆或反馈习惯后,当相似的繁冗信息输出时,玩家对接管的信息进行认知,并产生一种似曾相识的感觉,同时玩家因为记忆水平、注意力情况不同,在对输出信息进行交融时会有认知差别以及反馈差别,进而造成不同的信息交融后果,并对最终的决策和工作的实现产生的不同影响。这种游戏中产生的似曾相识的感觉也称为游戏中的既视感。 2、神秘的既视景象——似曾相识感 既视景象又称既视感,就是未曾经验过的事件或场景好像在某时某地经验过的似曾相识之感,目前对于“似曾相识”景象有一种解释差不多成为规范:“对以后的、从未经验过的事物、场景产生的一种主观的相熟感。” 跟敌人到一个你从未到过的馆子里吃饭,进门的霎时,你忽然有种恍惚和强烈的似曾相识感:碗筷摆放的地位、四周陌生人的觥筹交错,甚至是餐馆的构造布局和暖黄的灯光,忽然变得如此相熟。此情此景,你如同早曾经在某个时刻都经验过了,甚至连敌人接下来要说的话和坐姿你都能猜个八九不离十。这种“似曾相识”感,来去不受咱们本人管制,经验的时候你会感觉神奇与讶异不已,认为本人受入地眷顾,具备了某种先知先觉的超能力。它来袭时,随同着一种强烈的真切感和相熟感,同时也让人感到神秘、诡异和困惑,因而人们会用“第六感”、“前世”等词汇来描述它,甚至用一些诸如梦幻、先知和轮回转世等神秘主义来解释这种景象。考察显示,有三分之二的成人都曾遇到过“似曾相识”事件。有网友用“可遇不可求”来形容这种微妙的感觉,“看到的时候齐全分不清是事实还是梦幻,整个人处在一种很‘恍惚’的状态。”有一位网友这样形容他的戏剧性深刻印象:“遇到某些场景时,总感觉似曾相识,如同在某个时候产生过,而且有的时候,当闻到一种气体,或者光线配合声音,变换到某个角度时,也会忽然有这样的感觉,画面中谈话人的声音,那相熟的气息,好像本人早已经验过。” 因为到目前为止,还是简直没有太多牢靠的形式在试验中触发似曾相识感,因为不论哪种“似曾相识”景象都不能为科学家的察看试验当场提供行为,所以支流心理学家的钻研始终难以顺利进行。与此同时,其余学科对该景象的趣味却十分浓重。 脑神经专家认为,大脑时刻在进行潜意识流动,虚构出各种情境,事实中遇到类似情景时,就会与虚构的记忆相响应而产生即幻象;医学工作者认为“似曾相识”是由记忆谬误造成的,大脑中的记忆缓存区先暂存记忆,在存储时产生了谬误,认为眼前事物就是历史记忆库中的,这样的错觉通常在大脑疲劳时产生。 一些物理学的解释更为乏味。以物理学的“时光倒流”来剖析,人的管制神经传给记忆神经的速度大于光速后,四维空间产生临时凌乱,大脑反馈传到记忆神经时,人就会感觉已经产生过。基于爱因斯坦的相对论、高能物理学和其余边缘物理学家提出,灵魂是一种携带微小能量的高能粒子,可能冲破工夫和空间的阻碍,使记忆进行时空穿梭而使人产生似曾相识之感。时空穿插观点则是从爱因斯坦对于时空的观点登程,认为这个世界有许多平行的时空,每个时空都有本人的法则,个别不会穿插。当呈现例外情况,即时空错乱时,如碰巧遇到与将来时空的穿插,就会很短暂地进入将来时空,在没有觉察的状况下,又很快回来。当人在当初的时空经验到将来的那个时段时,察觉场景与记忆贮存统一,就产生了似曾相识之感。物理学家的假说给“似曾相识”景象提供了更广大的空间,却给这一景象削减了更多神秘感和灵异成分。美国达拉斯南卫理公会大学的心理学传授阿兰·布朗示意:“这个畛域被许多迷信无法解释的实践净化了,成为了许多科学家不违心触碰的辣手问题。 3、即时游戏中的既视景象 只管在科学界既视景象曾经简直成为了一个禁区,而钻研事实中的既视感难度也的确非常大,但本文通过对北京某大学的局部即时游戏玩家进行访谈后,对即时游戏中的既视景象和事实中的既视景象做了一个比照,并必定了本文对即时游戏中的既视景象进行钻研的可行性,以下也将具体论述。 在即时游戏畛域,玩家,尤其是游戏经验丰富的玩家往往会发现这样的状况,当到过一个场景后,去另外一个相似场景,往往会感觉以前来过这个中央,甚至会顺着以往的记忆去某些区域。又或是当玩过某款游戏后,从新接触另外一款游戏,在面对某些突发状况,比方敌人来袭时,会不盲目的按动某个键位,而这个键位兴许正是之前那款游戏在对敌时须要按动的关键性键位,这所有的叙述,置信接触过即时游戏的玩家都会引起共鸣,而这,正是即时游戏中的既视景象。 和事实中的既视感有类似又有不同,类似的是它们都是对未曾经验的事件和场景产生的一种莫名的主观的相熟感。不同的是,事实中的既视感产生并不是那么频繁,而且往往被认为是一种错觉,是一种预知性的,不真切的相熟感,因为事实中的记忆繁冗,你往往难以回忆起让你产生既视感的记忆来自于何时,何地,是哪个霎时,所以事实中的既视感难以在实验室模仿,是可遇而不可求的,所以成为了科学界许多人不敢去触碰的禁区,所以也被披上了一层神秘的外纱。 而即时游戏中的既视感大多源于游戏经验,与事实的丰富多彩,变动万千不同,游戏产业的高速倒退,带来了形形色色的各类即时游戏供玩家们抉择,但对即时游戏做过深刻探索的,或是资深的游戏玩家,都不难感触到,不同的即时游戏之间其实也有诸多类似的因素,而很多即时游戏采纳的是同样的游戏模式,能够说当接触过一款即时游戏后,你再接触一款即时游戏时,你必然会发现有很多你相熟的中央,不论是操作流程也好,血蓝条的地位也好或是对敌技能开释也好。类似的体验必然会带来相熟感,所以在即时游戏中,既视感的呈现会比事实中频繁很多。而游戏记忆也并不会像事实记忆那么繁冗,玩家们在产生既视感时,甚至能回忆起是已经的哪个或是哪些霎时,让本人在此刻产生了这样的相熟感,进而这样的既视感还能促使玩家通过回顾想出解决当前状况的方法,所以即时游戏中的既视感并没有那么神秘,而本文也将利用游戏中的相似之处,通过试验触发即时游戏中的既视感,并钻研即时游戏中的既视景象。 4、工业设计中的既视景象的使用 日本驰名设计师深泽直人将既视感熟练地使用到新产品的设计中,唤起人们对新产品的相熟感。他往往会去抽取现存的人和物体之间本就存在的关系,寻找一种对于物体独特领有的记忆导入新设计中。简略来说就是“without thought”。 直观体现了“withoutthought”这个概念的示范性作品,正是深泽直人设计的MUJI CDPlayer。第一次看到它,人们大部分的注意力就集中到这个拉线式开关上,在再简略不过的设计元素中,不须要揭示,直觉就会去拉动那条悬挂在地面的线,启动开关,音乐流泻而出,在下意识的动作中进而失去一个惊喜,谁能不为这个绝妙的设计所感动?这个早已相熟的拉线动作,它简直是在有意识的状态下进行,且时常呈现在生活中,设计师只是将它放进设计中,赋予CD Player一个“似曾相识”的新款式。这个设计让人们自然而然地应用:without thought。这就是所谓的,直觉设计。 咱们又能够这么了解:人往往在有意识状态下会对同一事物产生雷同的反馈,他们在观看同一物件时,总会天然的找出对它感到有共鸣的中央。如果设计师能从生存和环境的察看中,抓住这些能让人产生共鸣、让人不假思索就天然能了解的元素,使用进设计中,这个产品天然会是一个好的设计。 而即时游戏中,信息的输入输出频繁疾速,玩家的意识流动更加激烈。适当在设计上奇妙使用既视感想必也能收到奇效。但在即时游戏中,既视感与哪些因素关系严密?在设计时,又要如何把握这些因素让设计者能更好的在设计中把握既视感呢?这也引发了我的一系列的思考。 对即时游戏中既视感的猜测 基于对MUJI CD Player的思考,咱们认为既视感疏导的是“without thought”有意识的行为,但引发既视感,须要意识参加吗? 设计中退出一根拉线,咱们会不盲目去拉,但如果摆在咱们背后的是一根拉线,一个快门,一个开关……,咱们会怎么?此时,咱们的注意力被扩散了,咱们的第一抉择,还是那根拉线吗? 所以在此,我大胆的做出了如下假如:留神作为意识流动中最不可缺的性能,是最早在心理学中提出的概念之一,尽管既视感疏导的往往是有意识行为,但要产生既视感,首先要有留神这一意识行为,又因为即时游戏中的信息交融景象显著,使用户往往面临着诸多繁冗信息输出,并且要对各类信息进行交融,并依据交融信息做出决策,所以用户在游戏过程中,势必会面临着注意力调配的问题。 所以在正式试验我将钻研的内容之一就是,注意力强弱对既视感的影响。具体也就是钻研,如果在即时游戏中,用户是在注意力集中的状况下更容易产生既视景象,那么别离在注意力集中和扩散的状况下进行试验,试验后果肯定会呈现显著差别。但如果既视景象属于不须要调配过多注意力的一种潜在记忆,只是稍稍一当心便可轻易触发,那么在注意力被扩散的状况下,试验后果应该与注意力集中时相近。 同时,即时游戏中既视景象和记忆水平是否相干,将是我钻研的第二个问题,对于这一个问题,首先,我会在预试验将其论证,而后再在正式试验进一步深入。对场景的记忆水平,是否会影响既视感的产生,这既是对近年来科学界普遍认为既视景象的产生与长时记忆无关的一个论证,也是对第一个钻研内容的一个补充。在即时游戏中,是不是对场景的记忆水平越深,越容易产生既视景象?或者有可能对场景的记忆水平在注意力集中时对既视景象的产生影响不是很大,但当注意力不集中时,记忆水平将会对既视景象的产生显著影响。

March 31, 2021 · 1 min · jiezi

关于游戏:网易游戏基于-Flink-的流式-ETL-建设

一. 业务背景网易游戏 ETL 服务详情网易游戏的根底数据次要日志形式采集,这些日志通常是非结构化或半结构化数据,须要通过数据集成 ETL 才能够入库至实时或离线的数据仓库。尔后,业务用户才能够不便地用 SQL 实现大部分数据计算,包含实时的 Flink SQL 和离线的 Hive 或 Spark。 网易游戏数据集成的数据流与大多数公司大同小异,次要有游戏客户端日志、游戏服务端日志和其余周边根底的日志,比方 Nginx access log、数据库日志等等。这些日志会被采集到对立的 Kafka 数据管道,而后经由 ETL 入库服务写入到 Hive 离线数据仓库或者 Kafka 实时数据仓库。 这是很常见的架构,但在咱们在需要方面是有一些比拟非凡的状况。 网易游戏流式 ETL 需要特点 首先,不同于互联网、金融等行业根本罕用 MySQL、Postgres 等的关系型数据库,游戏行业经常应用 MongoDB 这类 schema-free 的文档型数据库。这给咱们 ETL 服务带来的问题是并没有一个线上业务的精确的 schema 能够依赖,在理论数据处理中,多字段或少字段,甚至一个字段因为玩法迭代变更为齐全不同的格局,这样的状况都是可能产生的。这样的数据异构问题给咱们 ETL 的数据荡涤带来了比拟高的老本。 其次,也是因为数据库选型的起因,大部分业务的数据库模式都遵循了反范式设计,会刻意以简单内嵌的字段来防止表间的 join。这种状况给咱们带来的一个益处是,在数据集成阶段咱们不须要去实时地去 join 多个数据流,害处则是数据结构可能会非常复杂,多层嵌套非常常见。 而后,因为近年来实时数仓的风行,咱们也同样在逐渐建设实时数据仓库,所以复用现有的 ETL 管道,提取转换一次,加载到实时离线两个数据仓库,成为一个很天然的倒退方向。 最初,咱们的日志类型多且变更频繁,比方一个玩法简单的游戏,可能有 1,000 个以上的日志类型,每两周可能就会有一次发版。在这样的背景下 ETL 出现异常数据是不可避免的。因而咱们须要提供欠缺的异样解决,让业务能够及时得悉数据异样和通过流程修复数据。 日志分类及特点 为了更好地针对不同业务应用模式优化,咱们对不同日志类型的业务提供了不同的服务。咱们的日志通常分为三个类型:经营日志、业务日志和程序日志。 经营日志记录的是玩家行为事件,比方登录帐号、支付礼包等。这类日志是最为重要日志,有固定的格局,也就是特定 header + json 的文本格式。数据的主要用途是做数据报表、数据分析还有游戏内的举荐,比方玩家的组队匹配举荐。 业务日志记录的是玩家行为以外的业务事件,这个就比拟宽泛,比方 Nginx access log、CDN 下载日志等等,这些齐全没有固定格局,可能是二进制也可能是文本。主要用途相似于经营日志,但更加丰盛和定制化。 程序日志记录是程序的运行状况,也就是平时咱们通过日志框架打的 INFO、ERROR 这类日志。程序日志主要用途是检索定位运行问题,通常是写入 ES,但有时数量过大或者须要提取指标剖析时,也会写入数据仓库。 ...

March 30, 2021 · 4 min · jiezi

关于qt5:saba开发笔记一saba介绍编译使用以及测试

若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/115188985 长期继续带来更多我的项目与技术分享,征询请加QQ:21497936、微信:yangsir198808 红瘦子(红模拟)的博文大全:开发技术汇合(蕴含Qt实用技术、树莓派、三维、OpenCV、OpenGL、ffmpeg、OSG、单片机、软硬联合等等)继续更新中…(点击传送门) Qt开发专栏:开发技术上一篇:没有了下一篇:敬请期待... 前言 Saba模型加载器,demo应用的glfw和dx11,所以须要本人手动创立框架,当初要内嵌入Qt中,本章先接力编译saba。 Saba简介 一个开源的3D模型加载器。 编译saba之前须要先编译bullet和glfw,未提供的请自行百度。 编译Bullet库步骤一:下载解压 Github:https://github.com/bulletphysics/bullet3 CSDN粉丝免积分下载:https://download.csdn.net/download/qq21497936/16083901 QQ群:1047134658(点击“文件”搜寻“bullet”,群内与博文同步更新) &emsp;&emsp;![在这里插入图片形容](https://img-blog.csdnimg.cn/20210324220831469.png)步骤二:CMake配置 配置要调按下图调整下: 步骤三:CMake生成工程 步骤四:VS2015 WIN64编译 步骤五:vs2015win64 releae版本和debug版本别离编译 步骤六:生成的库截图进去以便后续须要 编译Saba库步骤一:下载解压 Github:https://github.com/benikabocha/saba 粉丝免积分下载:https://download.csdn.net/download/qq21497936/16083902 QQ群:1047134658(点击“文件”搜寻“saba”,群内与博文同步更新) 步骤二:CMake配置 短少Bullet库,增加后持续: 去掉这个,不然会卡glfw处,如下图: 步骤三:生成工程 步骤四:VS2015 WIN64编译 通过论证是版本问题,须要规定一下版本,bullet3-3.06,所以更改版本后,红瘦子又从新走一遍。 步骤五:编译胜利 命令行测试 读者能够本人找个模型。 simple_mmd_viewer_glfw.exe -model kizunaai/kizunaai.pcm 上一篇:没有了下一篇:敬请期待... 若该文为原创文章,转载请注明原文出处本文章博客地址:https://blog.csdn.net/qq21497936/article/details/115188985

March 24, 2021 · 1 min · jiezi

关于游戏:应对游戏业务的四大崩溃场景有妙招安全畅玩不是梦

摘要:本文具体介绍了游戏类业务常见的攻打场景及影响,针对具体的受攻打场景提出无效的解决措施。【场景汇总】 【解决措施】场景一:DDoS & CC景象形容攻击者模仿海量失常的服务申请,占用大量的游戏服务资源至枯竭,从而使失常的游戏玩家无奈应用服务,造成掉线、卡顿等游戏体验与口碑降落的状况。 解决措施1、购买高防IP: 原理: ① 将受攻打的域名解析到高防IP ② 通过高防IP代理源站IP对外提供服务,将所有的公网流量都引流至高防IP ③ 暗藏源站,防止源站(用户业务)蒙受大流量DDoS攻打。 选型举荐: l 服务区域:业务服务器在国内抉择DDoS高防(大陆),在海内抉择DDoS高防(国内)l 线路资源:电信联通挪动l 保底防护带宽:倡议保底防护带宽高于日常蒙受攻打的峰值。l 弹性防护带宽:购买高防实例后,能够依据业务理论状况,批改弹性防护带宽。l 端口数、防护域名数:默认提供50个,如需扩容可分割华为云客户经理商务定制。l 业务带宽:倡议此业务带宽规格大于或等于源站进口带宽,否则可能会导致丢包或者影响业务。网站类业务接入操作步骤: 购买→配置域名接入→放行回源IP→放行回源IP→验证配置→批改DNS 具体配置领导见链接:https://support.huaweicloud.com/qs-aad/index.html 非网站类业务接入操作步骤: 购买→配置域名接入→增加转发规定→放行回源IP→验证配置→批改DNS 具体配置领导见链接: https://support.huaweicloud.com/qs-aad/aad_07_0002.html 2、更换业务服IP 景象:因屡次DDOS攻打而被解冻的客户IP要求必须应用DDOS高防能力冻结,如客户无志愿购买平安服务,倡议更换业务服EIP。 前提条件:已配置CES事件监控-带宽超限监控告警,当理论带宽超限,会产生告警,零碎会主动进行告诉。 配置领导链接:https://support.huaweicloud.c... 更换流程: Ø 产生带宽超限,在云监控服务中,单击“事件监控”。单击“查看事件”,查看超限详情,失去超限IP,在ECS控制台通过EIP查问到对应的ECS; Ø 购买新的EIP绑定原业务ECS,并从业务侧批改业务侧IP(游戏客户EIP用量大,倡议提前扩充配额防止此时购买); Ø 如原业务主机已无奈运行,倡议间接应用镜像重开一台游戏业务主机(前提需业务主机为无状态主机且已有镜像)。 场景二:业务服务器平安景象形容客户收到华为侧运维人员主机平安危险告诉(挖矿、木马、肉鸡); 客户主机上并未设置大量的并发工作,CPU使用率很高,在过程治理中发现生疏过程占用大量系统资源,或通过抓包剖析流量能够确定主机与不明地址存在连贯,并有非客户业务的job下发等异常现象。如下图所示,CPU使用率突增,且存在两个异样过程:.gpg 和pnscan ,其中“.gpg ”CPU占用率高达94%: 解决措施1、平安组、ACL Ø 通过抓包剖析网络数据包或通过netstat查看网络连接状态,可发现有大量对外连贯,失去近程异样地址 Ø 配置平安组策略,敞开默认近程端口,敞开ANY策略; Ø 开启网络ACL性能将近程异样地址退出回绝ACL规定, ACL应用参考:https://support.huaweicloud.com/productdesc-vpc/zh-cn_topic_0051746676.html 2、平安服务: Ø 通过装置平安杀毒软件对服务器进行全盘扫描并清理(客户自行应用第三方平安服务解决); Ø 购买HSS服务企业版并设置罕用登陆地、开启恶意程序隔离查杀、双因子认证等防护性能 具体参考:https://support.huaweicloud.com/usermanual-hss/hss_01_0051.html#section4 ...

December 24, 2020 · 1 min · jiezi

关于游戏:腾讯安全游戏行业云上安全报告发布9成云上主机存在安全基线问题

在数字化、挪动化的浪潮下,游戏产业迅速倒退,尤其疫情过后许多游戏公司业务迎来新的增长点。与此同时,云计算IT架构因架构设计简略、性价比高、零碎灵便等劣势推动了游戏公司业务的疾速迭代倒退,也给游戏行业云上平安带来了新的挑战。 近日,腾讯平安公布了《游戏行业云上平安报告》(以下简称“报告”),重点剖析了歹意木马、异样登录、爆破攻打、破绽危险、平安基线、高危命令执行、网络攻击等七大支流平安危险态势,其中大部分都呈增长趋势。在游戏厂商未及时修复的破绽中,高危危险的占比高达87%。报告最初倡议游戏厂商应综合部署云上平安产品,构筑云上平安防护体系。 歹意木马事件显著回升,企业需晋升云主机治理意识 2020年下半年歹意木马感化状况明显增加,近10%的游戏厂商在一个月内检测到木马攻打。挖矿木马在云上攻打事件中是最为风行的安全事件之一,它们占用大量主机资源,进而影响业务失常运行。腾讯T-Sec主机平安零碎的检测统计显示,云主机治理意识有余,管理员对99.7%的歹意木马检测后果未能及时关注。 异样登录行为过半,22端口异样登录次数每月达千万次 59%的游戏主机在近30天内已经产生过异样登录其中异样登录次数最多的端口为22,占比超过70%,异样登录次数量级达每月千万次。云上主机在治理过程中很有可能被管制,游戏厂商能够通过异样登录审计发现异常登录流动,及时处理,避免损失扩充。 爆破攻击行为显著,默认用户名被爆破达每月数十亿次 2020年游戏厂商云主机在30天内遭逢爆破攻打的比例达到69%,其中针对近程登录服务的默认端口22和3389的爆破攻打次数最多,而默认用户名被爆破的次数占比超过85%,达到每月数亿次到数十亿次。报告倡议业务零碎应用自定义的端口号和用户名,同时防止应用弱明码,以大幅缩小爆破攻打危险。 破绽危险仍旧重大,未修复高危破绽危险占87% 高达54%的游戏厂商在3天内发现存在破绽危险,仅有25%的游戏厂商一个月内未发现破绽危险,破绽危险类型次要为近程命令、代码执行两类往往为高风险等级的破绽。数据表明,未及时修复的破绽危险中高危占87%,中危占12%。近年来组件破绽的披露越来越频繁,尤其挖矿团伙对服务器组件破绽的利用日益频繁,平安厂商针对破绽的攻打响应也日益减少。平安运维人员须要进步风险意识,踊跃修复安全漏洞,防止云上资产沦为黑客攻击指标。 平安基线问题凸显,近半数云上主机3天内发现问题 游戏行业30天内发现平安基线危险的云上主机高达88%,45%的企业甚至在3天内发现平安基线问题,其中次要的平安基线危险为Linux口令过期后账号最长无效天数策略、Linux帐户超时主动登出配置和限度root权限用户近程登录。平安基线可能无效进步黑客的入侵门槛,但平安管理人员时常疏忽导致被黑客利用,须要严格依照平安标准进行配置。 高危命令执行有所回升,半数厂商30天内执行高危命令 半数游戏厂商云主机一个月内执行过高危命令,其中22%的企业在3天内有过高危命令执行操作,次要为curl下载后执行和nc命令执行。高危命令有可能是黑客入侵之后执行的命令,以希图管制主机甚至毁坏零碎,也有可能是运维人员在日常操作时候执行的危险命令。执行过于频繁,意味着平安治理疏忽大意、权限治理不够谨严。 网络攻击事件整体回升,定向攻打广泛 近三个月网络攻击整体出现回升趋势,命令注入攻打攻打为次要的网络攻击事件。而时间跨度上较为良好,86%的公司未产生过网络攻击事件。APT攻打逐步频繁呈现在各个行业,2020年10月,腾讯主机平安捕捉首例云上针对游戏行业的APT攻打。针对游戏行业的APT攻打,往往会窃取游戏源码、秘密材料等信息,带来严重危害。 防备勒索病毒依然不能漫不经心 报告指出,只管在游戏行业云上主机中,暂未发现勒索病毒攻打的案例。但在整个云上攻打攻打事件中,勒索病毒攻打仍然相当风行。勒索病毒会通过加密主机上的数据文件来勒索巨额赎金,否则业务将会受到重大影响,甚至停摆。倡议运维人员定期备份重要数据资料,避免数据失落后无奈找回。 游戏厂商须要减速“零信赖”的平安体系部署 受疫情近程办公需要激增的影响,零信赖曾经成为国内企业晋升平安建设的外围工具之一,游戏厂商同样须要增强对零信赖的器重。报告指出,从企业生产专有云网络向企业私有云资产“横向挪动”,呈现出APT攻打的新特点。随着游戏企业业务上云正在成为倒退新趋势,相干企业须要建设专有云和私有云网络边界防护体系,避免出现平安短板。在企业内网向私有云的“横向挪动”过程中,不平安的权限管制成为最次要的进攻短板,尤其是IT运维权限,一旦被浸透,攻击者可能从开发、运维外部网络横向扩散到云上主机,给企业造成重大的数字资产损失。腾讯平安为客户提供了腾讯零信赖平安管理系统iOA来解决权限管控问题,在企业办公网和云上生产网之间,减少一道松软的防护屏障。 产业互联网时代,云曾经成为次要的平安战场。面对快速增长的云上平安需要,腾讯平安依靠20余年平安畛域积攒,围绕平安治理、数据安全、利用平安、计算平安和网络安全五个层面打造了云原生平安防护体系,以开箱即用、弹性、自适应、全生命周期防护等显著劣势,助力游戏厂商晋升游戏平安门槛,为游戏产业衰弱倒退保驾护航。

November 18, 2020 · 1 min · jiezi

关于游戏:如何在游戏中举办国际大会拆解网易云信的技术力量

10月24-27日,第二届国内分布式人工智能学术会议(DAI 2020)在网易旗舰级武侠端游《顺水寒》中举办,300余位寰球出名学者“穿梭”到大宋,在浓浓古风的虚拟世界中探讨前沿AI技术。 作为大会的次要承办方,网易伏羲实验室寰球独创,为大会设计了一套沉迷式会议零碎,在美轮美奂的古风场景中实在还原了线下学术会议的流程。网易云信,连同雷火、CC 直播等兄弟部门独特提供技术支持,为参会者发明了一次 “身临其境”的在线参会体验。 (会议现场) “ 翻新背地,体现的是扎实的技术能力;稳固背地,是云信的保驾护航。 ” 在顺水寒的游戏场景中,300位学者同时在线加入大会,对于整个会议内信令、媒体的流量有着极大的并发压力,这就对会议流媒体服务器的高性能、高稳定性及动静可扩展性提出了严苛的要求。 网易云信流媒体服务器采纳自研的高性能多过程服务架构,单机器最高反对近3000路并发的1080P视频,性能极其强悍;此外,网易云信流媒体服务器反对寰球智能级联组网,依靠于云信构建的应用层路由大网零碎,为用户提供就近接入、动静路由、疾速故障防止、跨国链路优化、小运营商网络接入优化、多路径冗余传输等多项流媒体服务端的智能传输技术。网易云信流媒体服务器的寰球级联组网技术,大幅提高了整个零碎的最大并发承载量,晋升了零碎的可靠性,同时整个级联零碎反对动静扩容,保障了流媒体服务器零碎内,每个超大会议都能够按需分配到短缺的服务器资源。 300位学者同时在线参会还带来另一个难点:人数越多,会议里用户的网络状况就会越简单,如何智能匹配每个用户的网络?让所有人都领有最优体验? 网易云信流媒体服务器提供欠缺的分段QoS能力,应用SVC、Simulcast和超分等视频技术;同时,智能抗丢包、抗抖动等弱网反抗技术与分段QoS技术互相配合,智能匹配每个与会者的上下行网络,让每个用户都能清晰晦涩的进行沉迷式音视频会议。 (会议现场) 对于参会学者来说,演讲过程中PPT的展现必不可少,从技术角度来说,桌面共享中这类文档的分享须要很高的清晰度,对帧率要求不高;然而,本次大会又提供桌面共享中播放视频的性能,这要求很高的帧率来保障画面晦涩。那么,如何兼顾高清晰度和高晦涩度? 网易云信 RTC 引擎应用自研视频品质管制模块,通过实时监测以后编码品质、晦涩度、零碎CPU的应用、网络状态等要害因素,动静调节编码参数,达到文件共享时清晰度高、视频共享时视频晦涩的成果,满足 30FPS 高帧率屏幕共享的需要。同时为了保障实时性,云信在网络QoS方向做了很多翻新的工作,保障各种网络场景下的最佳体验。 (网易伏羲智能AI捏脸技术) 网易技术实力不止于此,这套沉迷式会议零碎交融了六项专利技术,能够实现免下载随时应用、嵌入式播放PPT、文字或语音群聊及私聊、随时切换多场会议等数十种会议性能。此次会议还设有一站式治理后盾,领有人员设置、会议流程、数字广告、数据分析、新媒体墙展等大型线上会议治理性能。此外,在AI技术的辅助下,会议的细节变得更加丰盛、活泼,大大晋升了参会体验,学者能够应用AI智能捏脸技术生成集体形象照,还可身穿古风服装虚构形象大合影。 本次大会的胜利举办,既是网易创新能力和技术能力的集中体现,也是在线会议畛域的一次无益摸索。下一步,网易云信将继续深耕音视频和即时通讯畛域,将简单的技术封装在底层,给用户提供简略易用的接口,助力产品的价值转化,减速各行各业的翻新节奏。

October 30, 2020 · 1 min · jiezi

关于游戏:产业安全专家谈-外挂黑产猖獗游戏厂商如何阻击应对

游戏外挂严重破坏了游戏的平衡性,会造成游戏外围玩家散失,游戏口碑降落、生命周期缩短等恶劣影响。据《2019腾讯游戏平安年度报告》(戳????腾讯游戏平安年度报告出炉:外挂样本持续增长,费解舞弊景象丛生、游戏黑产资产惊人)数据,定制外挂达53%,外挂向技术深度更底层,手法更荫蔽,变种迭代更疾速方向倒退。 如何应答疾速变种更新的外挂品种,如何晋升外挂反抗的成功率、升高误杀率,“游戏上云”背景下游戏平安有哪些新趋势?「产业平安专家谈」第二十五期邀请腾讯游戏平安高级产品经理,腾讯MTP产品负责人李鑫,解答游戏厂商面临的外挂问题,助力游戏厂商无效晋升游戏平安门槛,加强游戏反抗通用外挂能力。 Q1:对于游戏厂商来说,是否只有景象级/Top游戏才须要反外挂? 李鑫:判断一款游戏是否须要反外挂,咱们往往须要关注三个方面:游戏类型,盈利程度和技术门槛。 第一个方面咱们关注游戏类型,像射击类、动作类等强竞技类游戏,往往都是外挂的重灾区,这类游戏之所以有强烈的反外挂需要,起因在于这类游戏上应用外挂,玩家失去的收益是最大的,会重大影响游戏的平衡性。比方在吃鸡手游上采纳自瞄、锁头等性能的外挂,玩家的体验会有质的变动,所以会吸引外挂作者、玩家汇集在这类游戏上。 第二个方面须要关注盈利程度,依据教训来说,外挂黑产作者往往会抉择在最热门的top游戏下来制作外挂,并大肆的售卖,越是盈利程度高的游戏,外挂在下面的收益也越大,所以也更容易引发外挂问题的暴发。 第三个方面来说,咱们须要关注技术门槛,游戏开发者在平安防护的程度上是参差不齐的。一些游戏会过于依赖客户端的校验,不去做服务端的校验,这些都会造成平安反抗的门槛过低。一些一般的通用修改器,通用外挂就能够随便的批改游戏,导致外挂很容易在玩家群体中疾速的流传。 以上三个方面中的任何一个因素都会成为外挂汇集的起因,一旦外挂汇集外挂暴发,外挂玩家对游戏内偏心生态的破坏力是十分大的,一般玩家对外挂的感知也相当敏锐,这就必然会导致外围玩家的群体疾速散失,游戏疾速败落,游戏的口碑和生命周期也会受到外挂的重大影响。 Q2:如何评估反外挂的成果,游戏厂商最关怀什么? 李鑫:游戏厂商个别会关注两个方面,第一个是覆盖率,第二个是准确率。 从覆盖率的角度来说,像通用修改器、变速器、虚拟机这些外挂品种其实十分多,所以客户会十分关注把这些全都笼罩掉,保障覆盖率最高,外挂反抗成果就会最强; 第二个是准确率问题,做好外挂反抗的同时,须要防止误判,把平安风控降到最低。 Q3:咱们的MTP手游反外挂解决方案怎么晋升反抗成功率,升高误杀率? 李鑫:这个问题咱们会把MTP反外挂能力划分为三层。 首先从第一层来说,最底层是主动防御能力。在这一层只须要接入SDK,半天就可能疾速接入,可能疾速的去取得主动防御能力,可能马上取得对于通用修改器、变速器、虚拟机这些通用外挂的反抗能力。同时,也包含基于腾讯海量的外挂样本库的样本集的反抗。 在此基础上,咱们去提供第二层的控制台自助反外挂能力。MTP能够提供性能全面的反外挂控制台,用户能够本人抉择策略开关、自助上传外挂样本,并在十分钟之内疾速实现反抗。本人增加白名单过滤、本人去查看实时外挂反抗数据,并可能导出外挂舞弊名单,建设起本人能够齐全笼罩的一个整体的外挂反抗闭环。 在此基础上咱们会提供更高层面的一个第三层,叫自定义策略反抗能力。在这个层面咱们会去凋谢更多接口给游戏厂商,比方像反外挂的播送接口、SDK的心跳接口,不便他们可能去进行精细化的经营。这种精细化的经营不仅可能紧密的避免误杀,同时也可能不便客户依据理论状况自行决策,保障利益的最大化。举例来说,厂商拿到玩家残缺的舞弊信息和数据之后,就能够联合玩家在游戏内的其余行为去判断是否须要采取解决以及如何解决。 MTP在以上的三个层面中,第一层做的十分欠缺,第二层的能力在行业中是当先,第三层则是属于独家凋谢能力。 须要阐明的是,MTP凋谢的反外挂能力次要是针对通用外挂的,帮忙游戏晋升平安门槛,在体量稍大的游戏上往往会呈现针对游戏的定制化顽劣外挂,在这种场景下还须要游戏开发者做更进一步的防护。 Q4:外挂在一直变种和更新,游戏上应用MTP后再呈现新的外挂怎么办? 李鑫:咱们始终在强调说,MTP提供的不只是SDK。SDK组件它只是一个载体,咱们提供的是继续的、一直晋升的平安能力。 从技术迭代的角度来说,MTP以腾讯内外部的数百款游戏的反抗为根底,继续每天更新反抗能力,反外挂SDK放弃疾速迭代,外挂样本库放弃继续更新,这些最新的能力都会及时的凋谢给客户。 从生态凋谢的角度来说,最新版本的SDK,最新的外挂样本库,咱们都会在MTP平台上及时凋谢给游戏开发者。开发者能够自主抉择能力最强的版本,同时放弃外挂反抗的最佳成果。如果游戏侧本人发现外挂样本,仅仅须要十分钟就能够实现外挂样本的自主提交和反抗。 所以总结下来,一个是咱们腾讯能力的一直对外开放,第二个是客户一直参加到外挂反抗能力的继续建设当中,这样咱们就可能和业内的合作伙伴一起,独特把游戏生态平安环境建设好。 Q5:游戏厂商可能有顾虑,反外挂会不会影响游戏安稳经营?咱们是如何保障兼容性的? 李鑫:MTP曾经通过腾讯的多款支流游戏验证,产品的成熟度是十分高的。像王者光荣、战争精英、CODM等等,这些上千万DAU或者上亿DAU的游戏都曾经应用了这类解决方案的产品能力,所以说稳定性、兼容性、性能影响这些方面都是咱们的一个外围劣势。 Q6:“游戏上云”背景下,游戏平安有哪些新趋势,腾讯MTP下一步如何布局? 李鑫:上云背景下,歹意批改等类型的外挂会被限度,但外挂产业也将向更业余、细分方向倒退,将会呈现新的云上外挂危险。同时,游戏的平安危险将不仅限于反外挂,像内容平安、打金工作室、渠道平安、破绽攻打、信息泄露等平安问题还会进一步的倒退。 依靠腾讯20年平安畛域积攒和腾讯云“云管端”智慧平安体系,腾讯MTP将依据游戏公司上云平安痛点灵便调配连贯、认证、存储等各环节的平安能力,为游戏客户提供反外挂在内的一站式云上平安解决方案。 面对复杂多变的游戏安全形势,腾讯依靠20余年在平安畛域积攒的大数据及先进的AI算法,充分发挥本身10多年在游戏平安畛域的教训积攒,将继续增强平安技术研发,全面开释平安能力;助力游戏企业晋升游戏平安门槛,加强游戏反外挂等平安能力;为游戏产业衰弱倒退保驾护航。

October 30, 2020 · 1 min · jiezi

关于游戏:Unity的前世今生一个投资人的自述-杨镭硅谷观察

就在明天,整个游戏界及实时3D软件界轰动了! 世界级实时3D软件公司 Unity以其行业独创独特的IPO 形式(也称为“荷兰法拍卖, Dutch Auction”)胜利登陆纽交所。上市首日收盘价为每股68.35美金,市值达180亿美金,新的一家世界级当先的企业级服务软件超级独角兽公司诞生! 对所有游戏界业内的人来说,Unity始终就是一个响当当的名字。这家位于硅谷旧金山的公司以其独特的软件撑持着全世界,几千万款手机游戏以及上百万的游戏开发者。由Unity提供技术支持开发进去的游戏在中国乃至寰球市场妇孺皆知。截至2020年6月30日,Unity实时3D平台在寰球190多个国家和地区领有150万沉闷创作者,20亿月度沉闷用户应用Unity平台开发应用程序。2019年寰球支出前100的游戏工作室,其中有93个游戏工作室都是Unity的客户。2019年寰球前1000的移动游戏(苹果和安卓市场)中有53%都是采纳Unity平台开发制作, 中国市场中76%的新移动游戏都由Unity开发。 此外,Unity多年来始终在为VR/AR开发者们提供技术支持:2019年60%的VR内容都是基于Unity引擎开发的,而AR方面,则有90%的HoloLens内容是基于Unity引擎开发。Unity为50%的老手游提供了反对,其广告触达能力十分宽泛。 在过来两年中,Unity就在数字孪生、工业互联网、汽车、运输、修建、VR/AR、数字城市等畛域研发方面投入了4.5亿美元,并通过收买Applier、deltaDNA、Finger Food、Multiplay和Vivox等工具型公司为其带来了更大的性能,并进一步实现了成为满足所有创造者需要的一站式集成平台的指标。Unity在寰球范畴领有顶级客户群及合作伙伴,包含:谷歌、微软、Facebook、亚马逊、宝马、本田、沃尔沃、戴姆勒、古代起亚、雷克萨斯、迪士尼、三星、华为、小米、腾讯,阿里,网易,头条等。 Unity是由David Helgason、Nicholas Francis、Joachim Ante三位年轻人2004年在丹麦的哥本哈根城里的一座暗淡的地下室起家的。在过后那个时候,三个年轻人充斥了对游戏行业的神往和酷爱但却又看到了游戏行业开发的艰难,特地是游戏开发引擎长期被一些巨无霸的公司所垄断而动不动就是要以几十万美元甚至更贵价格去购买来应用,这使得世界上无数个游戏喜好及开发者被挡在了门外。于是三个年轻人提出了一个嘹亮的口号“让游戏开发引擎的大众化”(Democratizing The Game Engine),既要使全世界的游戏开发者和酷爱者都可能应用上的一款能够累赘的起又很好上手应用的游戏开发引擎,就这样,抱着平凡愿景的三个年轻人就此启航了! 然而他们很快发现,拦在他们背后的第一座大山就是在过后行业里存在着无数个不同型号和厂家的终端和不同的操作系统。每一套游戏开发实现之后都要花费微小的工夫把它平移到另外一套零碎中,其中存在着大量的二次开发工作。于是他们第一个使命就是要开发出一款可能一个按键就能够使开发好的游戏在所有平台上经营的软件。抱着这种思维他们开发了行业里第一个可能在这方面施行的游戏引擎,也因而突破了游戏行业中各自为战独立依附本人的硬件及软件环境开发本人独有的游戏引擎的格局。 但很快的他们又发现另一个挑战,过后市场上所有游戏引擎都须要在弱小的服务器上运行须要弱小的CPU 性能和海量的存储,在一个人电脑及手机大潮行将到来的时代,必须有一款可能在更“轻”的计算机系统下运行的游戏引擎软件。Unity的使命又向前迈进了一步! 每一次科技与社会的大改革必定会产生新的颠覆性的公司,这一点曾经屡次被事实证明。于是Unity就真正走上了向市场上向其余游戏引擎的挑战之路。 平凡的科技公司的呈现与成长都有着与行业不可分割的微小外在关联与共性。如果把眼光转到欧洲大陆的另一个国家,英国,2004年对另外一个大家耳熟能详的科技公司的倒退也正好进入一个其命运的关键时刻。这个公司的名字叫ARM,一家在明天霸占了寰球简直90%以上手机及边缘终端市场的计算机芯片科技公司。如果打开ARM倒退的历史,2004年凑巧正式其正式进入手机市场的元年。也就是这么一跳从此奠定了起初的ARM明天在手机市场中的霸主位置。而同一年Unity在游戏软件行业的突起简直有着行业里ARM的位置的影子: 两家公司都是主攻手机及终端市场;都是有着对全平台兼容性的性能;都是有着对计算机芯片存储最小的要求的计算性能要求;甚至都是有着使他们产品能让“千家万户”业内人士应用的平民化的使命。这些也都为他们明天的胜利奠定了策略方向和根底,事实上这也是起初的投资人看中他们的中央之一。 再回到哥本哈根城里那间暗淡的地下室,三位创始人中的一位的父亲为了反对孩子的守业欲望写出了第一张支票。公司随后的倒退也一番不可收拾,到了2005年Unity在当年的苹果寰球开发者大会上作为Mac端的扩大工具公布,并且拿下当年大会的苹果最佳Mac OS零碎的画面设计奖项。欧洲大陆曾经挡不住这三位年轻人想成为世界级科技公司的幻想,于是他们把眼光转向了世界的科技和风险投资的圣地旧金山硅谷。他们首先接触到了在硅谷被誉为危险投资界第一块品牌的红杉资本。对他们颇有趣味的红杉资本在和创始人交谈之后提出了一个小小的条件:“如果你们想承受咱们的投资,你们必须把总部搬到硅谷来。” 这其实正中三位创始人的下怀,能去到梦寐以求的硅谷倒退并失去这样驰名的投资人的投资使他们的信念大增,这也当然为今后的倒退奠定了重要的根底。于是红杉资本就写出了投给Unity的第一张支票,成为了他们A轮投资人的领投方。而红杉资本的驰名合伙Roelof Botha 拉成为了他们第一位董事会成员。说到Roelof也是一位在硅谷和危险投资界无人不知无人不晓的风云人物。他已经是驰名的美国硅谷PayPal “守业黑帮党”成员之一,当年曾和埃隆马斯克并肩作战是过后的CFO,起初退出美国红杉资本转战风投行业之后除了多年放弃在寰球投资金牌榜上的名声更是作为新一代的红杉资本领导人之一,把红杉资本的投资格局和业绩带到了一个新的高度。 更换战场并失去大牌风险投资的Unity当初站在了更高的制高点上。利用他们团队优良的技术和对市场的敏感性一直获得新的提高。2007年是手机行业一个重要的元年,苹果推出了他们的第一款智能手机以其新鲜的造型不便的用户界面和翻新的 APP商城等模式一举颠覆了其余的几家传统手机市场多年垄断的市场。Unity也抓住了这个重大机会在尔后很长的一段时间内Unity都是始终在开发iOS游戏的最佳工具。在这之后还陆续反对了包含PS,Xbox在内的各种游戏平台,直到明天可反对笼罩的平台超过20个。 工夫一转眼到了2011年,一直倒退的Unity在业务倒退上须要新的资金注入。于是公司发动了B轮的募资流动。在过后只是小有名气的Unity 竟在他们的B轮的募资过程中竟然一共收到了8家硅谷一线投资人的投资意向书,堪称竞争强烈。在这8家投资人中有一家中国背景的基金呈现在人们的眼帘中,这家基金的名字叫华山资本(WestSummit Capital)。 华山资本(WestSummit Capital)成立于2010年,是由杨镭,陈大等同几位清华背景的校友独特组建的。基金成立之初失去了中国国家主权基金及中信资本的反对。基金的使命就是要成为中国最好的具备寰球视角的高科技基金。并先后投出了像兆易翻新,安集微电子,Segway-Ninebot,芯源微电子(VeriSilicon),联结光电, MOVIDIUS 等一系列优良的科技行业领军独角兽公司之外。同时硅谷也是他们的投资布局地区之一。华山团队在杨镭的率领下与Unity团队及过后的CEO David Helgoson 深刻交谈和尽调之后,看到了这家公司所具备的独特的行业。倒退方向特地是对他们在手机畛域这种倒退思维和技术产品认为他们有着弱小的外围竞争劣势,同时借助于华山资本对中国市场的熟知预感Unity有一天将会在中国这个宏大的游戏与软件市场有着微小的商机,于是华山资本决定收回投资意向书。投资意向书收回后的一周的等待时间是漫长的,过后的其余7家投资基金简直都是硅谷一流的基金。华山资本这么一支硅谷新兴的基金,如何在这场我的项目争夺战中失去投资资格是放在华山资本背后的一次考验。 新的一周开始了,在周一的那天上午杨镭收到了Unity CEO代表David 代表公司的电话,在电话上,David通知杨镭:“通过外部强烈的探讨和董事会级别的参加,咱们在8家投资人中决定承受你们的投资意向书;顺便再通知你一声,你们给出的报价是这8家中最低的一家。” 按捺不住本人心田冲动的华山团队竟然问到你们为什么要做出这样一个决定?David通知杨镭在一个公司倒退过程中钱不是最重要的,重要的是资金前面的投资人的素质和他们带来的微小的策略价值,咱们跟华山资本接触过程中感觉到你们畅通的沟通和对硅谷文化及对中国市场的劣势。特地是你们合伙人以前守业的优良背景咱们感觉十分的认可,置信你们是一个能和咱们一起意识咱们创业者苦楚经验并独特成长的基金,可能和咱们一起走很长的将来的守业路线。另一方面咱们认为中国是一个微小的市场你们给咱们带来潜在的策略价值不光是资本还有一个将来的战略意义。特地是这一点是硅谷其余基金所没有的。咱们目前曾经具备了硅谷一流基金的所给咱们带来的策略价值,而你们的基金恰好给咱们带来一块硅谷其余基金所不能填补着空白。于是华山资本就成为了Unity B轮融资的领投投资人,而杨镭则成为了Unity寰球董事会的成员。 之后的Unity在各方面倒退的更为迅猛。然而站在同时董事会却看到了公司的一个新的挑战。要想打造一个平凡的公司,必须要进一步增强公司的领导团队,特地是CEO。很多守业公司的CEO创始人能够把公司从零做到一,然而把1做到10的时候就要面临很多不同的挑战,如果一个开创CEO不能实现这个转换,有可能就把一个优良的公司在半路夭折。这样的案例能够说是亘古未有。只管过后的创始人CEO 其实做出了十分了不起的业绩,公司也在一直倒退,董事会还是毅然决然的决定要带入更加资深的领导团队及CEO。而就在这时候一个嘹亮的名字呈现在董事会的视线中。此人的名字叫John Riccitiello 行业里相熟他的人都亲热的称说他JR。此人堪称行业界的一个传奇人物,他曾是驰名的游戏内容公布商公司EA( Electronic Arts-艺电)的CEO,在他执掌年代里公司年代里公司业务失去了迅速成长,奠定了行业龙头位置,起初他又成为另外一家风险投资的合伙人。在这之后,他已经萌发退休之念。而杨镭之前因为和他已经一起投资其余我的项目而成为好友。JR也和红杉也曾有过屡次的单干。他的行业背景,教训,能力,业绩,集体魅力简直是无可挑剔的是下一个Unity的领军人。CEO更换之路并不是一个一帆风顺的过程,公司对于新的CEO最后是有所冲突的,然而两位董事会成员紧密配合肩并肩一起化解了公司外部各种不同顾虑,并最终失去了公司大多数人特地是公司创始人及David的全力支持。而David也以他宽敞的襟怀和长期的眼光看到这样的安顿将是一个对公司对创始人双赢的后果,踊跃配合公司的调整与转型,使公司迅速进入到另新的阶段。而JR果然不负众望,他以着宽敞的襟怀,谦虚的态度,一方面十分尊重现有的创始人和团队,另一方面踊跃和董事会配合,使得公司有的极快飞速的倒退。在此之后的几年中,公司不光迅速的把一个游戏开发引擎公司的产品转向转型为靠广告,并向其余行业倒退的多元化软件公司。公司同时重视研发投入了大量的资金增强研发工程师团队。使得公司为今后的倒退打下了一个极为夯实的根底。同时公司并没有疏忽并购方面的工作,及时跟踪行业里其余优良的小型科技公司间断收买了十几家在技术市场方面当先的小公司,不断加强了公司的外围竞争力并且公司显著的开始成为一个综合性的软件技术公司。 纵观Unity倒退的路线,是一个被咱们称之为倒置蛋糕的倒退门路,公司先从有一个仿佛不是很微小的市场切入,一直减少本人的外围竞争力,同时并购相干边缘企业,逐步把蛋糕从小做大从而基本上扭转了本人的商业模式裁减到了更大更宽泛的市场之中,这不愧为是一个商业中的典型胜利案例。也应该是很多创业者值得学习借鉴的楷模。 在Unity之后的倒退中,公司又进行了几轮融资。硅谷驰名公司DFJ参加了C轮的投资,并由其合伙人,行业中赫赫有名的人物白瑞舒勒(Barry Schuler) 负责Unity公司董事会成员,Barry在他职业生涯上的成名之战就是它已经是美国过后最大的互联网公司美国在线AOL的CEO并在过后互联网的热潮低潮之时参加AOL与了美国驰名的娱乐电影公司时代华纳(Time Warner)的并购,成为了过后轰动一时的事件。Unity之后的一轮投资引入了另外一家硅谷赫赫有名的科技公司基金银湖基金(Silver Lake) ,而这家在硅谷是一家以投资高科技并进行大规模并购投资的基金,它的许多驰名案例包含当年即时通讯公司Skype 与eBay 的胜利交易。而银湖的总经理Egon Durban出任Unity 董事。 ...

September 19, 2020 · 1 min · jiezi

关于游戏:我敢说这个版本的斗地主你肯定没玩过

摘要:置信大家都玩过斗地主游戏,或在事实中斗地主或在电脑和手机上斗地主,但你想过用命令行界面进行斗地主吗?一、前言置信大家都玩过斗地主游戏,或在事实中斗地主或在电脑和手机上斗地主,但你想过用命令行界面进行斗地主吗? 先来张图体验一下: 是不是感觉挺有意思,上面就带大家一起玩一下吧~ 二、部署命令行版斗地主2.1 环境筹备该我的项目是基于java开发的,因而须要部署java运行环境及 maven。 2.1.1 本次试验以 CentOS 7.5 机器为例 [root@qll252 ~]# cat /etc/redhat-releaseCentOS Linux release 7.5.1804 (Core)2.1.2 部署jdk 1、用yum装置JDK(也可通过源码包装置,但本文重点不是部署JVM环境)[root@qll252 ~]# yum install java-1.8.0-openjdk* -y2、验证已装置jdk[root@qll252 ~]# java -versionopenjdk version "1.8.0_262"...2.1.3 装置maven 1、将 maven 源码包下载至本地[root@qll252 ~]# wget https://mirror.bit.edu.cn/apache/maven/maven-3/3.6.3/binaries/apache-maven-3.6.3-bin.tar.gz2、解压[root@qll252 ~]# tar -zxvf apache-maven-3.6.3-bin.tar.gz3、将源码包挪动至 /usr/local/mvn[root@qll252 ~]# mv apache-maven-3.6.3 /usr/local/mvn4、配置 maven 环境变量vim /etc/profile #(追加如下两行内容)export MAVEN_HOME=/usr/local/mvnexport PATH=$MAVEN_HOME/bin:$PATH5、从新加载零碎配置文件source /etc/profile6、执行mvn -v 验证已装置[root@qll252 ~]# mvn -vApache Maven 3.6.3 (cecedd343002696d0abb50b32b541b8a6ba2883f)Maven home: /usr/local/mvn...2.2 下载游戏源码将Ratel我的项目Clone到本地[root@qll252 ~]# git clone https://github.com/ainilili/r... ...

September 15, 2020 · 1 min · jiezi

关于游戏:政治走进游戏美国总统候选人拜登在动物森友会中拉选票

技术编辑:宗恩丨发自 思否编辑部 SegmentFault 思否报道丨公众号:SegmentFault 从9月1日开始, 《汇合啦!动物森友会》的玩家们将能够用美国总统候选人拜登的官网院子标记来装璜他们的岛屿家园。 此次竞选活动公布了四种标记设计供玩家下载,别离是拜登的官网标记、「乔」团队标记、「乔 」的自豪标记,以及红白蓝三色相间的飞行员太阳镜形象。玩家能够通过任天堂 Switch 在线利用扫描这四个设计二维码,并在游戏中获取这些设计。 因为新冠病毒的暴发,美国总统的竞选活动不能在线下进行,所以拜登的团队被迫齐全从新思考竞选形式,开始时他们抉择了直播流动与在线筹款流动,以及有严格社交间隔的采访。甚至拜登所在党内大会,都是应用 Zoom 等视频软件流媒体进行。 事实证明,在游戏中开演唱会或者举办活动十分受玩家们的欢送。美国说唱歌手特拉维斯·斯科特往年4月份在《堡垒之夜》中举办了他的第一场演唱会,超过1000万玩家加入了这场演唱会。英国摇滚乐队Idles和美国乐队Cherry Glazerr也在《我的世界》等游戏中举办的虚构节日也备受欢送。 所以这次拜登的竞选团队也换了个思路,让政治走近游戏《汇合啦!动物森友会》,接下来拜登的竞选团队将在此游戏上扩大更多的宣传形式,其中包含和游戏中有影响力的玩家联结,或者「冲进其余数字」平台。 拜登竞选团队心愿通过他们的新思路来吸引这个宏大的群体。「《汇合啦!动物森友会》是一个充满活力、多样化、弱小的平台,它将世界各地的社区汇集在一起。对咱们的竞选活动来说,这是一个令人兴奋的新机会,在拜登的支持者建造和装璜他们的岛屿时,咱们能够吸引他们并与他们分割起来,」拜登竞选活动的数字单干总监Christian Tom在一份申明中说。「随着咱们进入11月的最初竞选阶段,这是咱们寻找新的创意和翻新的形式之一,以满足选民的需要,并将咱们的支持者汇集在一起。」 《汇合啦!动物森友会》游戏的玩法其实很简略,就是让玩家建设一个属于本人的岛屿,玩家能够自在地体验岛上的生存。岛上的工夫与事实同步,上手没有难度,游戏的画风偏差可恶纯洁格调。 但正是因为简略的玩法,《汇合啦!动物森友会》自3月首发以来已有数百万人购买了该游戏,甚至这款游戏还呈现了泛滥云玩家(指那些并不理论玩游戏,而通过其他人视频等形式体验游戏),也足以见其弱小的流传力。 拜登团队在《汇合啦!动物森友会》上宣传的妙想播种一批网友点赞,但也收到了很多质疑,美国的网友们指摘到:「这是一个孩子们的游戏。咱们能够让政治远离孩子们的生存吗?很诧异任天堂会容许这样做。」尽管在游戏上宣传政治这件事的对错还有待探讨,但让现实生活和虚拟世界「交融」这件事十分酷!

September 2, 2020 · 1 min · jiezi

关于游戏:腾讯游戏安全年度报告出炉外挂样本持续增长隐晦作弊现象丛生游戏黑产资产惊人

2019年国内游戏畛域趋势变动显著,行业重归“产品为王”的时代。挪动互联网的倒退、版号政策松绑、下沉市场蕴藏微小商机、5G和云游戏成为游戏畛域的X因素,网络游戏行业正在新战场上“乘风破浪”。 然而,中流击水往往随同着暗流涌动——始终以来,游戏行业的氪金属性深得黑产的青眼,外挂、私服、打金盗号、DDoS攻打、虚伪数据伎俩防不胜防。游戏小白能够一夜之间成为叱咤风云的王者,行业新贵也可能在短短数日就被攻打得人财两空。游戏平安环境日渐简单、黑产“吸金”新花招层出不穷,黑产的兴妖作怪让整个行业经验着越来越显著的“成长痛”。 近日,腾讯游戏平安公布《2019腾讯游戏平安年度报告》,从国内泛滥腾讯游戏在经营过程中面临的平安挑战、现状特点以及危险趋势登程,通过对PC端游戏和移动游戏的外挂及其衍生问题、工作室与黑产问题、游戏账号平安问题等维度进行相干数据和特点的开掘和总结,指出了以后游戏行业面临的平安威逼。 关注【腾讯平安】微信公众号 回复「2019游戏平安报告」获取全文 报告指出,2019年无论是PC端游戏还是挪动端游戏,在外挂黑产的反抗上仍旧放弃强烈态势,外挂样本在更新频率和总体数量上都有肯定增长;随着游戏对外挂的打击伎俩越来越严格,黑产调头另寻他路,衍生出了“带老板”“观战透视”“护航”等新型费解舞弊形式。 与此同时,打金工作室黑产从游戏社交场景和游戏玩法方面深刻浸透,演变出更多黑产获利形式和路径。从账号平安问题层面上而言,游戏内线下交易、代练、熟人玩家被动泄露账号密码成为最外围的因素。 01对于游戏平安 你必须晓得的10个知识点 1. PC端游戏外挂:2019年PC端游戏打击掉的外挂样本数相比2018年增长了19.9%。 2. 移动游戏外挂:腾讯移动游戏打击外挂样本数增幅有所减缓。STG动作射击游戏在不同游戏品类的散布显著降落,而AR加强事实摸索类游戏则实现了大幅度增长。 3. 腾讯游戏平安对显性外挂打击越来越严格,检测伎俩也越来越先进,通过压抑“带老板”景象、观战透视、“护航”舞弊等游戏舞弊形式,无效升高舞弊比例。 4. 工作室和黑产:据腾讯游戏平安监测到的相干数据,目前游戏黑产领有的黑身份证有636万个,黑电脑设备376万台,黑手机设施930万台,总价值近百亿。 5. 用户游戏账号被盗多因被欺骗:腾讯游戏平安用户调研显示,玩家被骗导致账号被盗的状况达45%,在各类起因中占比最高。 6. 游戏歹意信息次要集中在色情和引流广告上,腾讯游戏平安采纳音转文与语音频谱辨认技术,反对对涉政、色情、暴恐、唾骂类内容训练语言模型,使得语音辨认对这类内容更加精确。 7. 网吧游戏平安问题:61%的网吧机器存在舞弊行为,同一台机器超过3次以上舞弊行为超过25%。 8. 游戏平安刑事打击:2019年游戏平安案件涉案金额达2.2亿,腾讯游戏平安配合警方打击掉国内最大的移动游戏外挂聚合平台。 9. 直播中的游戏平安问题:腾讯游戏平安与头部直播平台继续单干,率先建设《腾讯游戏主播平安治理标准1.0》。 10. 游戏玩家安全意识继续晋升,繁多玩家日均举报次数根本持平的状况下,举报成功率从5.31%晋升至22.98%。 02加固平安防线 腾讯平安守护游戏全生命周期 想要做好游戏,平安问题绝不容鄙视,否则包含外挂、DDoS、木马病毒在内的平安危险和黑产威逼,不仅会缩短游戏的生命周期,还会对游戏厂商造成不可估量的品牌信用和经济损失。如何提前部署游戏平安防护策略,实现游戏全生命周期的危险反抗?腾讯依靠20余年在平安行业积淀的攻防教训和在游戏行业各业务场景中积攒的防护成绩,能够帮忙游戏无效晋升平安门槛,加强游戏反抗通用外挂和DDoS攻打的能力。 基于已笼罩30万外挂反抗样本的样本库,腾讯平安通过平安加固、根底反外挂、专家级反外挂等手游与端游产品,一方面欠缺游戏底层平安能力,另一方面直指游戏的通用外挂痛点,进步游戏被篡改的技术门槛,帮忙游戏厂商精准、疾速辨认反抗外挂并提供多种应答策略。腾讯平安反外挂产品的反抗成果,曾经在《王者光荣》《战争精英》等数百款腾讯精品游戏和亿级用户环境中失去充沛的验证。 此外,面对DDoS攻打技术的降级,腾讯平安打造了集DDoS攻打检测和进攻于一身的DDoS防护解决方案。基于AI智能引擎、多方位的威逼情报和前沿算法,加之在寰球范畴内部署大量的流量荡涤节点,腾讯平安已可能实现TB级防护和细粒度防护策略调整。上半年腾讯平安DDoS防护服务还入选了Forrester Now Tech:DDoS Mitigation Services,Q2 2020的云服务商类别举荐名单,失去国内权威研报的认可。 与游戏黑产的反抗不亚于一场长久的“游击战”,游戏平安更是须要厂商、平安服务商和宽广玩家的共建共护。将来腾讯游戏平安服务将继续凋谢能力、反抗游戏平安危险和黑灰产业链,助力游戏行业营造更具公平性的游戏环境。 报告原文如下

July 29, 2020 · 1 min · jiezi

基于HTML5的WebGL实现的2D3D迷宫小游戏

为了实现一个基于HTML5的场景小游戏,我采用了HT for Web来实现,短短200行代码,我就能实现用“第一人称”来操作前进后退上下左右,并且实现了碰撞检测。 先来看下实现的效果: http://hightopo.com/guide/guide/core/3d/ht-3d-guide.html#ref_collision 或者http://v.youku.com/v_show/id_XMzA5MzUzODc4NA==.html?spm=a2h3j.8428770.3416059.1视频中出现的帧的问题是我屏幕录制器的问题,真正操作的时候不会有,建议用上面的链接自己操作 玩玩,鼠标或者触屏都可以,不过我觉得最方便的还是操作键盘wsad控制上下左右。 我的想法是先把场景布局好,代码如下: createHT([100, -20, 100], '#E74C3C'); createHT([-100, -20, 100], '#1ABC9C'); createHT([100, -20, -100], '#3498DB'); createHT([-100, -20, -100], '#9B59B6'); createCurve([0, -20, 0]);createCircle();这几个都是自定义的函数,createHT为描绘HT形状的图,场景中有四个,所以调用了四次;createCurve是描绘场景中间的黄色的曲线;createCircle是描绘最外层的圆,因为不是全包的圆,所以也是描点画的。 HT中封装了一个组件,ht.Shape(以下简称Shape),能够根据描点来自由描绘图形,可以通过shape.setPoints(pointsArray)将所有的点添加进数组中,并且设置到shape中,然后通过setSegments()设置线段数组信息,也就是用什么样的方式来连接两点,在Shape手册中有着重描写,感兴趣的可以参考HT for Web Shape 手册。抽其中的一个描绘点的函数来看看: function createHT(p3, color){ shape = new ht.Shape(); shape.s({ 'shape.background': null, 'shape.border.width': 10, 'shape.border.color': color, 'all.color': color }); shape.setTall(40); shape.setThickness(5); shape.setPoints([ // draw H {x: 20, y: 0}, {x: 20, y: 100}, {x: 20, y: 50}, {x: 80, y: 50}, {x: 80, y: 0}, {x: 80, y: 100}, // draw T {x: 120, y: 0}, {x: 180, y: 0}, {x: 150, y: 0}, {x: 150, y: 100} ]); shape.setSegments([ // draw H 1, // moveTo 2, // lineTo 1, // moveTo 2, // lineTo 1, // moveTo 2, // lineTo // draw T 1, // moveTo 2, // lineTo 1, // moveTo 2 // lineTo ]); shape.p3(p3); dataModel.add(shape); return shape;} 因为“HT”这个字眼要描绘的点比较多,所以代码看起来有点大,如果你看到如何描绘一个不完全的圆用20行代码来完成,而且包括样式,还是会惊讶的: ...

October 22, 2019 · 2 min · jiezi

RPG游戏设计浅谈

原文地址:RPG游戏设计浅谈Introduction设计一款叫Foon的RPG游戏,需要使用Java的Inheritance, Association, Overriding等概念。 The AssignmentThis assignment is about effectively using inheritance, association, overriding, and constructors. You're going to work alone or with a partner to translate a description of the inhabitants of a game world into a set of classes that could serve as part of a model for a game or gaming utility, draw the UML class diagram for these classes, and then implement them in Java. ...

October 7, 2019 · 5 min · jiezi

除了经典怀旧服还有什么能重新激活魔兽世界

自 2004 年公测的《魔兽世界》已经经历了 PC 时代、移动时代、VR 时代,在正在来临的 人工智能 时代,这款经典会如何续写。《魔兽世界》经典怀旧服在昨天开服了! 在昨天早上 6:00 开服的那一刻,就涌入了大批前来追忆经典的游戏玩家,甚至在斗鱼等游戏直播平台,仅一个上午,就有近 3000 名魔兽世界的主播,同时直播。 《魔兽世界》是否有机会借助当下人工智能之势,找出自己与人工智能结合的道路? 永不磨灭的经典:为了部落其实,早在今天的凌晨 5 点 55 分时,客户端显示的排队人数就已经高达了 1 万 8 千人。 更有些热门服务器,比如「范克里夫」服务器的排队人数高达 2 万 6 千人,也就是需要等待 5 个多小时才有机会进入游戏。 6:00 开服后就十分火爆《魔兽世界》在 2005 年进入国内之后,一度是网络游戏领域的霸主,在 2008 年年底,在发布了《巫妖王之怒》资料片后不久,暴雪宣布全球用户数量达到 1150 万人。 没落的黄金一代在最巅峰的 2011 年,《魔兽世界》全球用户数曾触达 1200 万。此后的几年里,用户数就再难以为继,持续滑落至 900 多万。 2012 年,在《熊猫人之谜》资料片之后,游戏用户数重回 1000 万大关。 2015 年第三季度之后,暴雪就再没有公布过《魔兽世界》具体的玩家数量但此后的几个新的资料片《德拉诺之王》、《军团再临》和《争霸艾泽拉斯》并没能挽回暴雪的颓势。 《魔兽世界》这些年的辉煌和近年的衰落有目共睹。这一类 MMORPG(大型多人在线)游戏在近几年的发展中,逐渐失去竞争力。 在全球的游戏市场中,《魔兽世界》前有 DOTA 、LOL 这些经典 MOBA(多人在线战术竞技)游戏的竞争,后有 《绝地求生》、《APEX 英雄》这类生存射击游戏的追赶,更别提移动端游戏 《王者荣耀》、《和平精英》在 90、00 后人群里的绝对优势了。 魔兽世界:能靠 AI 创造更好的体验么?其实在《魔兽世界》里,就已经增加入了基于人工智能技术的 NPC。 ...

August 28, 2019 · 1 min · jiezi

剧本杀继狼人杀之后的下一个风口

“剧本杀”简介2018年上半年,随着几款连麦推理社交游戏的上架,“剧本杀”一词开始迅速走红,有望成为继狼人杀之后的下一个风口级游戏。“剧本杀”最初源自线下游戏“谋杀之谜”,是一款 LARP (实时角色扮演)游戏。不同游戏的剧本内容各不相同,但是玩法基本大同小异:游戏开始阶段,每一名玩家选择扮演剧本中的一个角色,其中有一名玩家会在其他玩家不知情的情况下扮演凶手,其他玩家需要在故事情节以及所搜寻到的证据的分析推理下,共同找出真凶。行业发展过程剧本杀最初起源于一款风靡欧美的线下派对游戏,派对中的玩家们需要在故事情节的推动下共同找出凶手。随后,该游戏被引入国内,成为了各个线下桌游店里的热门游戏之一。2016年,视频行业快速发展,芒果TV推出了中国首档明星推理综艺秀《明星大侦探》,主打“烧脑剧情”和“悬疑推理”的综艺模式。在该节目第三季播出结束后,芒果播放量突破32亿次,也因此收获了大批“剧本杀”粉丝。随后,创业团队纷纷抓住这次机遇,将线下“剧本杀”迁移至线上。目前,线上比较火的“剧本杀”游戏有《戏精大侦探》、《我是谜》、《百变大侦探》等,同时《我是谜》和《戏精大侦探》都获得了数百万元的天使轮投资。 “剧本杀”搜索指数 从“剧本杀”的百度搜索指数来看,7月整体流量增长近一倍,也预示着“剧本杀”大有复制当年“狼人杀”的趋势,有望成为下一个游戏风口。游戏环节分析不同的“剧本杀”游戏有不同细度的阶段划分方式,但是主体框架会包括以下五个环节: “剧本杀”游戏环节 选择角色玩家进入游戏房间后,默认进入语音群聊,同时需要选择想要扮演的剧本中的角色。在语音群聊的过程中,可对自己进行禁麦和解禁的操作,房间一般还支持文字聊天。此阶段花费时间较短,待所有玩家角色选择完毕,即可进入下一阶段。 人物剧本本阶段,,所有玩家阅读个人人物剧本,剧本内容包含人物过往经历、重要线索、时间点等情节。剧本阅读完毕,玩家们在语音群聊房间内依次自我介绍,并讲述过往经历及重要线索。 搜集线索所有玩家共同阅读线索信息,同时就具体线索展开讨论。此阶段包含对多个角色的线索搜集及玩家讨论的过程,直至所有的线索搜集并讨论完成,方可结束。此阶段为整个游戏花费时间最长的阶段,所以语音聊天也是玩家体验的核心关键点。 圆桌讨论搜证阶段结束后,玩家们再次共同讨论并寻找故事真凶。此阶段不提供任何剧本及线索,所以各玩家首先需要回忆之前各个阶段的逻辑推理再作讨论。 最终投票就圆桌阶段讨论的结果,玩家们共同投票,选择凶手。投票阶段一般会计时,玩家需要在计时结束前完成投票。投票结束后,公布结局真相,并给出答案解析,游戏结束。目前主流的“剧本杀”游戏,玩家的主体精力基本放在“搜集线索”环节,需要进行多次搜证并对线索加以讨论。在房间人数上大多采用多人局,最多支持8人,其中《我是谜》app还提供了1-2人局,在极大程度解决了用户匹配的问题。游戏基本采用纯音频形式进行游戏,未来或许会出现类似“狼人杀”的视频面杀形式。用户分析对于“剧本杀”游戏的玩家群体,从技术竞技性、社交追求度和游戏排他性可以大致分为以下几类:竞技型玩家、社交型玩家、语音型玩家。 “剧本杀”游戏用户群体细分 对于竞技性玩家群体,他们喜爱游戏本身,对游戏剧本的内容,游戏结果以及整体流程体验会更加看重,极度追求技术,渴望和高手切磋。同时,此类玩家大多有线下“剧本杀”桌游的经历,对游戏的各个环节和打法比较了解。社交型玩家通常会青睐社交属性较重的游戏产品,也包括在线狼人杀等其他连麦社交游戏。这类玩家会更看重社交方面的体验,热爱在游戏过程中结交朋友,而对于游戏本身的关注所占比例较少。语音型玩家对于游戏本身、剧本内容,或游戏技术上没有过高的要求,但是对于包含语音连麦功能的游戏都极度热爱,包括各类吃鸡手游、在线狼人杀等等,对连麦时语音的质量也会有更加严格的把控。游戏关键要素在各大应用商店“剧本杀”的评论反馈中,可以看到很多玩家的好评,例如“玩法很新颖”、“有一种自己演电影的感觉”、“很锻炼逻辑思维能力”等,但仍有一些玩家发声表明了现在“剧本杀”存在的一些问题,例如“希望剧本的筛选能更用心”、“有些人麦的回音很大”、“无法闭麦”等。总结下来,主要是以下四个问题:剧本内容”剧本杀”是以剧本内容为主要打法的社交产品,剧本内容的质量、可玩性也成为了能否吸引玩家的重要因素。有不少玩家表示,玩“剧本杀”游戏的过程在极大程度上锻炼了自己的逻辑思维能力,在角色扮演过程中也会比较深入地代入角色情感,游戏体验很好。然而现在游戏的剧本来源主要依靠粉丝网友的投稿,有部分玩家表示希望剧本的筛选能更加严格,剧本的内容可玩性也有待提高。目前,各大平台开始设定奖励机制吸引优质写手,签约长期合作的剧本作者,这也是未来提高剧本质量的理想途径。实时互动对于“剧本杀”这类强互动性的实时语音连麦游戏来说,除了阅读剧本,搜集线索的过程,90%以上的游戏体验核心都在语音聊天上。而由于各种各样的原因,例如网络不稳定、运营商网络出现故障等等,可能导致语音通话过程不顺畅,聊天时延过长等问题,导致玩家不能实时语音交流互动,这也将是一个较为致命的产品体验痛点。音质效果玩家在游戏过程中,大部分时间都通过语音连麦聊天的方式和其他玩家交流,这种方式对于语音通话的质量也产生了更高的标准。在应用商店的用户评论处可以看到这样的评价:“玩了几局,发现每局都有人麦的回音很大,而有回音的这个人开麦以后完全听不到在说什么,特别乱,经常大家什么都没弄明白就投票了。”由此可见,与声音音质有关的杂音、丢音、回声、噪声等问题都会严重影响玩家的游戏体验。稳定流畅移动端在线游戏体验流畅的前提是拥有稳定的网络条件,由于在线“剧本杀”正处于快速增长阶段,用户数量的激增会导致网络拥塞、丢包等各种问题。所以在应用商店里,经常能够看到诸如“希望能早点修复莫名其妙离线等bug”、“一直显示请求超时,偶尔才能刷新出新东西”、“游戏过程中会断开连接”、“一直加载失败,链接超时”等反馈,种种声音表明,网络异常问题导致的游戏过程断续,导致玩家无法体验最基本的游戏流程。如何解决网络问题,为玩家提供稳定流畅的体验,也急需提上日程。网易云信方案及优势主流的“剧本杀”游戏,从用户场景上划分为剧本玩家实时游戏房间和观众观战房间。剧本玩家实时游戏是整个剧本杀游戏最为核心的场景,涉及到多个玩家语音连麦群聊、两个玩家一对一单聊、聊天室内文字交流互动等,这些场景对实时性的要求很高,同时对于语音聊天是否稳定流畅、是否有杂音噪音等都有很严格的标准。而在观众观看场景下,由于“剧本杀”游戏本身属性原因,观众在游戏房间内没有语音连麦及发表文字的权限,所以这一场景的体验关键点,主要在于直播画面是否同步、语音是否流畅清晰。针对以上两个场景的不同特性,以及在技术实现上的不同要求,网易云信推出了完整的一套“剧本杀”游戏方案,整体框架如下图所示: “剧本杀”音视频游戏房间技术框架 网易云信在实现方案上主要突显三大能力:实时音视频、IM即时通讯和互动直播。其中,实时音视频能力为游戏房间内的剧本玩家提供了真实的连麦互动体验,IM聊天室提供文字聊天互动能力,互动直播技术保证观众观看游戏过程的流畅体验。在游戏过程的实时互动性上,网易云信提供的技术方案保证端到端平均延时低于200ms,确保语音连麦互动的实时性,为“剧本杀”游戏的各个玩家提供酣畅淋漓的即时互动体验。在语音连麦聊天的音质上,采用48kHz音频采集,全频带音质,打造业界最高标准;同时,针对玩家语音连麦时可能出现的噪声、回声等情况,采用语音智能降噪,自动增益,回声消除等算法,打造无损音质,为玩家还原最真实、清晰的音质。对于网络不稳定、信号较差的问题,方案提供了智能网络探测,智能Qos保障,音视频码率自适应等多种核心算法保障,同时可抗800ms网络抖动,定制化的FEC/ Jitter Buffer/ QoS策略,确保70%丢包仍可正常通话,保障游戏进程的稳定流畅性。针对“剧本杀”游戏包含的不同场景模式,网易云信提供的技术实现方案完美解决了从开发到实现的诸多难题,让开发者能够迅速开发出在线“剧本杀”游戏。同时,在保证游戏稳定运行的前提下,能够为游戏玩家们提供极致的游戏体验。随着音视频技术的不断演进,从“在线狼人杀”、“在线抓娃娃”,到现在的“在线剧本杀”,泛娱乐行业内一个个风口级产品如雨后春笋般出现。这种从线下游戏迁移至线上app的模式,是目前泛娱乐行业出现频率较高的新兴玩法,也是网易云信所十分看好的。针对不同场景化游戏,网易云信都分别为其量身定制了不同的技术实现方案,未来,我们也将持续关注行业新动态,希望能为开发者解决更多的难题。想要阅读更多行业洞察和技术干货,请关注网易云信博客。

June 28, 2019 · 1 min · jiezi

24分钟让AI跑起飞车类游戏

本文由云+社区发表作者:WeTest小编WeTest 导读本文主要介绍如何让AI在24分钟内学会玩飞车类游戏。我们使用Distributed PPO训练AI,在短时间内可以取得不错的训练效果。本方法的特点:纯游戏图像作为输入不使用游戏内部接口可靠的强化学习方法简单易行的并行训练1. PPO简介PPO(Proximal Policy Optimization)是OpenAI在2016年NIPS上提出的一个基于Actor-Critic框架的强化学习方法。该方法主要的创新点是在更新Actor时借鉴了TRPO,确保在每次优化策略时,在一个可信任的范围内进行,从而保证策略可以单调改进。在2017年,DeepMind提出了Distributed PPO,将PPO进行类似于A3C的分布式部署,提高了训练速度。之后,OpenAI又优化了PPO中的代理损失函数,提高了PPO的训练效果。本文不介绍PPO的算法细节,想学习的同学可以参考以下三篇论文:【1】Schulman J, Levine S, Abbeel P, et al. Trust region policy optimizationC//International Conference on Machine Learning. 2015: 1889-1897.【2】Heess N, Sriram S, Lemmon J, et al. Emergence of locomotion behaviours in rich environmentsJ. arXiv preprint arXiv:1707.02286, 2017.【3】Schulman J, Wolski F, Dhariwal P, et al. Proximal policy optimization algorithmsJ. arXiv preprint arXiv:1707.06347, 2017.2. 图像识别2.1 游戏状态识别游戏状态识别是识别每一局游戏关卡的开始状态和结束状态。在飞车类游戏中,开始状态和结束状态的标志如图1所示。因为红色框中的标志位置都固定,因此我们使用模板匹配的方法来识别这些游戏状态。1.jpg图1 游戏状态标志从开始状态到结束状态之间的图像是游戏关卡内的图像,此时进行强化学习的训练过程。当识别到结束状态后,暂停训练过程。结束状态之后的图像都是UI图像,我们使用UI自动化的方案,识别不同的UI,点击相应的按钮再次进入游戏关卡,开始下一轮的训练过程,如图2所示。2.png图2 游戏流程2.3 游戏图像识别我们对游戏关卡中的图像识别了速度的数值,作为强化学习中计算激励(Reward)的依据,如图3所示。速度识别包括三个步骤:第一步,图像分割,将每一位数字从识别区域中分割出来。第二步,数字识别,用卷积神经网络或者模板匹配识别每一位图像中的数字类别。第三步,数字拼接,根据图像分割的位置,将识别的数字拼接起来。3.jpg图3 图像各个区域示意图3. AI设计3.1 网络结构我们使用的网络结构如图4所示。输入为游戏图像中小地图的图像,Actor输出当前时刻需要执行的动作,Critic输出当前时刻运行状态的评价。AlexNet使用从输入层到全连接层之前的结构,包含5个卷积层和3个池化层。Actor和Critic都有两个全连接层,神经元数量分别为1024和512。Actor输出层使用softmax激活函数,有三个神经元,输出动作策略。Critic输出层不使用激活函数,只有一个神经元,输出评价数值。4.jpg图4 网络结构示意图3.2 输入处理我们将小地图图像的尺寸变为121X121,输入到AlexNet网络后,在第三个池化层可以获得2304维的特征向量(57622=2304)。将这个特征向量作为Actor和Critic的输入。我们使用在ImageNet上训练后的AlexNet提取图像特征,并且在强化学习的过程中没有更新AlexNet的网络参数。3.3 动作设计我们目前在设计飞车类游戏动作时,使用离散的动作,包括三种动作:左转、右转和NO Action。每种动作的持续时间为80ms,即模拟触屏的点击时间为80ms。这样的动作设计方式比较简单,便于AI快速地训练出效果。如果将动作修改为连续的动作,就可以将漂移添加到动作中,让AI学习左转、右转、漂移和NO Action的执行时刻和执行时长。3.4 激励计算如果将游戏的胜负作为激励来训练AI,势必会花费相当长的时间。在本文中,我们根据游戏图像中的速度数值,计算当前时刻的激励。假定当前时刻的速度为Vp,前一时刻的速度为Vq,那么激励R按照以下方式计算:If Vp ≥ Vq , R = 0.25X(Vp - Vq)If Vp < Vq , R = -0.25X(Vq - Vp)If Vp > 250 , R = R + 5.0If Vp < 50 , R = R - 5.0这样的激励计算方式可以使AI减少撞墙的概率,并且鼓励AI寻找加速点。4. 训练环境4.1 硬件我们搭建了一个简单的分布式强化学习环境,可以提高采样效率和训练速度,硬件部署方式如图5所示。5.jpg图5 硬件部署方式主要包含以下硬件:1)3部相同分辨率的手机,用于生成数据和执行动作。2)2台带有显卡的电脑,一台电脑Proxy用于收集数据、图像识别以及特征提取,另一台电脑Server用于训练AI。3)1个交换机,连接两台电脑,用于交换数据。4.2 软件Ubuntu 14.04 + TensorFlow 1.2 + Cuda 7.05. 分布式部署我们使用的分布式部署方式如图6所示。6.jpg图6 分布式部署方式在Proxy端设置三个proxy进程,分别与三部手机相连接。在Server端设置一个master进程和三个worker线程。master进程和三个worker线程通过内存交换网络参数。master进程主要用于保存最新的网络参数。三个proxy进程分别和三个worker线程通过交换机传输数据。proxy进程有6个功能:1)从手机接收图像数据;2)识别当前游戏状态;3)识别速度计算激励;4)利用AlexNet提取图像特征;5)发送图像特征和激励到worker线程,等待worker线程返回动作;6)发送动作到手机;worker线程有5个功能:1)从proxy进程接收图像特征和激励;2)从master进程拷贝最新的网络参数;3)将Actor输出的动作发送到proxy进程;4)利用PPO更新网络参数;5)将更新后的网络参数传输到master进程;6. 实验6.1 参数设置PPO的训练参数很多,这里介绍几个重要参数的设置:1)学习速率:Actor和Critic的学习率都设置为1e-52)优化器:Adam优化器3)Batch Size: 204)采样帧率:10帧/秒5)更新次数:15次6)激励折扣率:0.96.2 AI效果视频链接:https://v.qq.com/x/page/q1356…6.3 数据分析表1和表2分别对比了不同并行数量和不同输入数据情况下AI跑完赛道和取得名次的训练数据。最快的训练过程是在并行数量为3和输入数据为小地图的情况下,利用PPO训练24分钟就可以让AI跑完赛道,训练7.5小时就可以让AI取得第一名(和内置AI比赛)。并且在减少一部手机采样的情况下,也可以达到相同的训练效果,只是训练过程耗时更长一点。另外,如果将输入数据从小地图换成全图,AI的训练难度会有一定程度的增加,不一定能达到相同的训练效果。表1 AI跑完赛道的数据对比输入数据 并行数量 训练时间 训练次数 训练局数全图 2 100分钟 4200次 78局小地图 2 40分钟 1700次 32局全图 3 78分钟 3900次 72局小地图 3 24分钟 1400次 25局表2 AI取得名次的数据对比输入数据 并行数量 训练时间 训练次数 训练局数 名次小地图 2 9小时 19000次 354局 1全图 3 60小时 98000次 1800局 4-6小地图 3 7.5小时 17800次 343局 1如7展示了利用PPO训练AI过程中激励的趋势图,曲线上每一个点表示一局累计的总激励。训练开始时,AI经常撞墙,总激励为负值。随着训练次数的增加,总激励快速增长,AI撞墙的几率很快降低。当训练到1400多次时,总激励值超过400,此时AI刚好可以跑完赛道。之后的训练过程,总激励的趋势是缓慢增长,AI开始寻找更好的动作策略。7.jpg图7 AI训练过程中激励的趋势图7. 总结本文介绍了如何使用Distributed PPO在24分钟内让AI玩飞车类游戏。当前的方法有一定训练效果,但是也存在很多不足。目前,我们想到以下几个改进点,以后会逐一验证:1)将AlexNet替换为其他卷积神经网络,如VGG、Inception-V3等等,提高特征提取的表达能力。2)提高并行数量,添加更多手机和电脑,提高采样速度和计算速度。3)增加Batch Size,使用较长的时间序列数据训练AI。4)将离散动作替换为连续动作,增加漂移的学习。5)多个关卡同时训练,提高AI的泛化能力。参考文献:【1】Schulman J, Levine S, Abbeel P, et al. Trust region policy optimizationC//International Conference on Machine Learning. 2015: 1889-1897.【2】Heess N, Sriram S, Lemmon J, et al. Emergence of locomotion behaviours in rich environmentsJ. arXiv preprint arXiv:1707.02286, 2017.【3】Schulman J, Wolski F, Dhariwal P, et al. Proximal policy optimization algorithmsJ. arXiv preprint arXiv:1707.06347, 2017.【4】https://morvanzhou.github.io/…此文已由腾讯云+社区在各渠道发布获取更多新鲜技术干货,可以关注我们腾讯云技术社区-云加社区官方号及知乎机构号 ...

March 15, 2019 · 2 min · jiezi

用 Node.js 写一个多人游戏服务器引擎

翻译:疯狂的技术宅原文:https://www.smashingmagazine….本文首发微信公众号:jingchengyideng欢迎关注,每天都给你推送新鲜的前端技术文章摘要听说过文字冒险游戏吗? 如果你的年龄足够大的话(就像我一样),那么你可能听说过、甚至玩过“back in the day”。在本文中,我将向你展示编写的整个过程。这不仅仅是一个文本冒险游戏,而是一个能让你和你的朋友们一起玩的,可以进行任何剧情的文本冒险游戏引擎。 没错,我们将通过在添加多人游戏功能来增加它的趣味性。文字冒险是最早的 RPG 形式的游戏之一,回到还没有图形画面的时代,你只能通过阅读 CRT 显示器上黑色背景下的描述,并且依赖自己的想象力来推动游戏剧情的发展。如果要怀旧的话,可能世界上第一个文字冒险游戏名叫 Colossal Cave Adventure(也许是叫 Adventure)。文字冒险游戏 back in the day 的画面上图是你实际看到的游戏画面,这与我们现在的顶级 AAA 冒险游戏相差甚远。 尽管如此,但是他们玩起来却很有趣,并会很容易的消磨你几百个小时的时间,因为只有你自己自己坐在显示器前,试图找到打穿它的途径。可以理解的是,多年以来,文字冒险已经被更好的视觉效果所取代,特别是在过去几年里,游戏的协作性越强,你可以和朋友们一起玩。 这是原始的文字冒险游戏所缺少的,同时也是我想在本文中提到的功能。我们的目标可能你已经从标题中猜到了,本文的重点在于创建一个文字冒险引擎,并且让你和朋友们一起玩,使你能够与他们进行协作,就像在玩“龙与地下城”这个游戏一样。在创建引擎时,聊天服务器和客户端的工作了相当大。 在本文中,我将向你展示设计思路、解释引擎背后的架构、客户端如何与服务器交互以及这个游戏的规则。为了让你对我的目标又一个直观的感受,先上一张图:游戏客户端的 UI 设计这就是我们的目标。 一旦达成这个目标,将会得到截图而不是简单和肮脏的模型。 所以,需要了解这个过程。首先要介绍的就是整体设计;然后介绍我将用来编码的相关工具;最后我将向你展示一些核心代码(当然,还有指向完整代码库的链接)。希望到最后,你能够自己创造一个新的文字冒险游戏,并与朋友一起乐在其中!设计阶段在设计阶段,我将描述这个游戏的整体蓝图。 我会尽力不让你觉得无聊,不过我认为在给你展示第一行代码之前,很有必要先搞清楚幕后的一些工作。我想接下来介绍的这四个组件能够提供相当多的细节:引擎这将成为游戏的主服务器。游戏规则会在这里实现,它将为任何类型的客户端提供技术无关接口。本项目中我们将实现终端类型的客户端,但是你可以用Web客户端或者你喜欢的任何其他类型。聊天服务器因为它的复杂性足以再写一篇文章了,所以这项服务也会拥有自己的模块。聊天服务器负责让玩家在游戏的过程中彼此通信。客户端如前文所述,这将是一个终端类型的客户端,在理想情况下,它看起来与之前的模型类似。它将利用引擎和聊天服务器所提供的服务。游戏( JSON文件 )最后,我将介绍实际游戏的定义。这部分的重点是创建一个可以运行任何游戏的引擎,只要你的游戏文件符合引擎的要求即可。所以,即使这不需要编码,我也将解释如何构建冒险文件以便将来编写我们自己的冒险规则。引擎游戏引擎或游戏服务器将会是REST API,并提供所有必需的功能。我选择REST API只是因为(对于这种类型的游戏)HTTP造成的延迟以及他的异步特性不会造成任何麻烦。 但是,我们必须为聊天服务器采用不同的路线。 在开始定义 API 之前,先需要定义引擎的功能。 所以,让我们来看看吧。特性描述加入游戏玩家可以通过指定的游戏ID来加入游戏。创建一个新游戏玩家还可以创建新的游戏实例。 引擎应该返回一个ID,以便其他人可以使它来加入游戏。返回场景此功能应返回玩家所在的当前场景。 基本上,它将返回描述,包含所有相关信息(可能的操作、其中的对象等)。与场景互动这将是最复杂的一个,因为它将从客户端获取命令并执行该操作——例如移动,攻击,获取,查看,读取等等。检查库存虽然这是与游戏互动的一种方式,但它与场景并没有直接关系。 因此,检查每个玩家的库存将被视为不同的操作。关于移动我们需要一种用来测量游戏中距离的方法,因为在游戏中玩家可以采取的核心行动之一就是移动。 我们需要用这个数字作为时间的衡量标准,来简化游戏的玩法。 考虑到这一类型的游戏具有基于回合的动作,例如战斗,使用实际时钟对时间进行测量可能不是最好的。 所以我们将使用距离来测量时间(意味着距离为 8 比距离为 2 将需要更多的时间,从而允许我们做一些事情,例如为持续一定数量的“距离点”的玩家添加效果)。考虑运动的另一个原因是不是一个人在玩这个游戏。 为简单起见,引擎不会让玩家随意组队(虽然这对未来可能是一个有趣的改进)。 该模块的初始版本只允许个人朝着大多数参与者决定的地方移动。因此,必须以协商一致的方式进行移动,这意味着每一步行动都将等待大多数人在行动之前提出请求。战斗战斗是这种游戏另一个非常重要的方面,我们不得不考虑将它添加到引擎中,否则我们最终会失去一些乐趣。说实话,这并不需要重新发明轮子。基于回合制的组队对战已经存在了几十年,所以在这里只实现这个机制的一个简单版本。我们将把它与“龙与地下城”中的“主动性”这个概念混合起来,产生一个随机数使战斗更有活力。换句话说,就是参与战斗的每个人的行动顺序将会被随机化,其中包括敌人。最后(虽然我将在下面详细介绍这一点),你可以用设置的“攻击力”值的物品。这些是你在战斗中可以使用的道具;如果一个道具没有这个属性的话只能对敌人造成 0 点伤害。当你试图用这样的道具进行战斗时,我们可能会添加一条消息,这样你就能知道自己要做的事情是毫无意义的。客户端 - 服务器交互现在来看看客户端怎样基于前面定义的功能与服务器进行交互(目前还没考虑端点,不过马上就会讲到这个):客户端与服务器之间的交互客户端和服务器之间的初始交互(从服务器的角度来看)是一个新游戏的开始,其步骤如下:创建一个新游戏。客户端请求向服务器创建新游戏。创建聊天室。虽然没有明确说明,但是服务器不只是在聊天服务器中创建聊天室,而且还设置好了所需的一切,可以允许一组玩家进行游戏。返回游戏的元数据。一旦服务器为玩家创建好了游戏和聊天室,那么客户端会在后续请求用到这个信息。这是客户端可以用来标识自己和将要加入的游戏实例的一组ID。手动分享游戏ID 。这一步必须由玩家自己完成。我们可以提出某种共享机制,但我会将它留在愿望清单上等待将来改进。加入游戏。这个非常简单。每个人都有一个 ID,客户端通过这个 ID 加入游戏。加入聊天室。最后,玩家的客户端程序将通过游戏的元数据加入对应的聊天室。这是游戏开始前的最后一步。一旦完成所有操作,玩家就可以开始在游戏中冒险了!游戏的动作指令 一旦满足了先决条件,玩家就可以开始游戏,通过聊天室分享他们的想法,并推动故事的发展。上图显示了所需的四个步骤。 以下步骤将作为游戏循环的一部分来运行,这意味着它们将会不断重复,一直到游戏结束。请求场景。 客户端程序将请求当前场景的元数据。这是循环每次迭代的第一步。返回元数据。 服务器将发回当前场景的元数据。这些信息中包括一般描述,从中可以找到的对象以及它们彼此之间的关系。发送命令。 好戏开始。这是玩家的主要输入方式。它包括玩家想要执行的操作,以及可选的操作目标(例如吹蜡烛、抓住岩石等)。对发来的命令做出响应。 这应该属于第二步,但为了清楚起见,我把它作为额外步骤。主要区别在于第二步可以被认为是这个循环的开始,而这一步考虑到你已经开始进行游戏了,因此,服务器需要了解这个动作将影响谁(单个或所有玩家)。作为额外步骤,虽然不是流程的一部分,但服务器将通知客户端与它们相关的状态的更新情况。存在这个额外重复步骤的原因是玩家可以从其他玩家的动作中获得更新。回想从一个地方移动另一个地方的需求;正如我之前所说那样,一旦大多数玩家选择了方向,那么所有玩家都会移动(不需要所有球员的输入)。不过 HTTP(前面已经提到服务器为REST API)不允许这种类型的行为。所以,我们的选择是:每隔 X 秒从客户端轮询,使用某种与客户端-服务器连接通信机制并行工作的通知系统。根据我的经验,我倾向于选择选项 2。实际上,我会(在本文中)使用Redis来实现这种行为。下图演示了服务之间的依赖关系。客户端应用程序与游戏引擎之间的交互聊天服务器我将把这个模块的设计细节留给开发阶段(本文不涉及这一部分)。话虽如此,我们仍可以决定一些事情。我们可以确定的一件事是服务器的限制集合,这将简化我们的工作。如果我们正确地玩牌,最终可能会有一个提供强大界面的服务,从而允许我们去进行扩展甚至修改实现,以提供更少的限制,而不会影响到游戏。每个组队只有一个房间。 我们不会创建子组队。这和不让组队分裂是相辅相成的。也许一旦以后我们实现了这个增强功能,允许创建子组和自定义聊天室或许是一个好主意。没有私信功能。 这纯粹是为了简化,但是只有群聊并不够好。目前我们不需要私信。请记住,任何时候只研究你的最小化可行产品,尽量避免掉进不必要功能的陷阱;这是一条危险的道路,很难从困境中摆脱出来。不会保存留言。 换句话说,如果你离开组队,将会丢失这些信息。这将极大地简化我们的任务,因为我们不必处理任何类型的数据存储,也不必浪费时间来优化存储和恢复旧消息的数据结构。它们都存在于内存中,只要聊天室处于活动状态,就会一直存在。一旦关闭,就会简单地对它们说Goodbye!通过网络套接字进行通信。 可悲的是,我们的客户将不得不处理双重沟通渠道:游戏引擎的 RESTful 和聊天服务器的套接字。这可能会增加客户端的复杂性,但与此同时,它将为每个模块使用最佳通信方法。 (在聊天服务器上强制 REST 或在游戏服务器上强制使用套接字没有任何意义。这种方法会增加服务器端代码的复杂性,这也是处理业务逻辑的代码,所以让我们关注目前的问题。)这就是聊天服务器。毕竟,它不会很复杂。在开始编码之前还有很多工作要做,但是对于本文来说已经足够了。客户端这是最后一个需要编码的模块,它将是最笨重的一个模块。根据经验来看,我更喜欢让客户端笨重,使服务器轻巧。这样为服务器开发新的客户端会更加容易。这是我们最终应该采用的架构。最终架构我们要实现的ClI客户端很简单,不会实现任何非常复杂的东西。实际上,必须要解决的最复杂的部分是 UI,因为它是一个基于文本的界面。客户端应用程序必须实现的功能如下:创建一个新游戏。因为我希望尽可能保持简单,所以这只能通过 CLI 界面完成。实际用户界面只会在加入游戏后被用到,这把我们带到下一个问题。加入现有游戏。玩家可以根据由上一条返回的游戏编号来加入游戏。另外,这件事应该能够在没有 UI 的情况下完成,因此这个功能将成为开始使用文本 UI 所需的过程的一部分。解析游戏定义文件。我们将对这点进行的讨论,客户端应该能够理解这些文件,以便能够理解要显示的内容,并知道应该如何使用这个数据。与冒险互动。基本上,这使玩家能够在任何时间与给出描述的环境进行交互。为每位玩家维护背包内容。客户端的每个实例都将在内存中包含一份道具列表。此列表将被备份。支持聊天。客户端程序还需要连接到聊天服务器,并使用户登录到组队的聊天室。稍后将详细介绍客户端的内部结构和设计。与此同时,让我们完成设计阶段的最后一部分:游戏文件。游戏:JSON文件这是它变得有趣的地方,因为到次为止,我已经涵盖了基本的微服务定义。其中一些可能会基于 REST,而另外一些可能会使用套接字,但本质上它们都是一样的:你定义并对它们编码,然后它们提供服务。我不打算对这个特定的组件做任何编码,但我们仍然需要设计它。基本上我们是在实现一种协议来定义游戏、它内部的场景以及一切。如果你想一想,文本冒险的核心基本上是一组相互连接的房间,里面是你可以与之互动的“事物”,所有这些都与一个引人入胜的故事联系在一起。现在我们的引擎不会处理最后一部分,这部分将取决于你。现在回到相互连接的房间,对我来说这就像一个图结构,如果我们还添加了前面提到的距离或移动速度的概念,还需要一个加权图。这只是一组节点,它们具有权重(或只是一个数字 —— 不要纠结它的名称),代表了它们之间的路径。下面是一个示意图(我喜欢通过观察进行学习,所以只看图,好吗?):这是一个加权图 —— 就是这样。我相信你已经弄明白了,但为了完整起见,让我告诉你一旦我们的引擎准备就绪,你将会做些什么。一旦开始设置游戏,你将创建地图(就像你在下图中左侧看到的那样)。然后将其转换为加权图,如图所示。引擎将能够接收它并让你按正确的顺序进行浏览。一个地牢的示例图通过上面的加权图,可以确保玩家不能从入口一下子走到左翼。他们必须通过这两者之间的节点,这样做会消耗时间,可以用连接的权重来测量。现在,进入“有趣”的部分。来看看地图在 JSON 格式中的样子。这个JSON将包含很多信息:{ “graph”: [ { “id”: “entrance”, “name”: “Entrance”, “north”: { “node”: “1stroom”, “distance”: 1 } }, { “id”: “1st room”, “name”: “1st Room”, “south”: {“node”: “entrance”, “distance”: 1} , “north”: { “node”: “bigroom”, “distance”: 1} } , { “id”: “bigroom”, “name”: “Big room”, “south”: { “node”: “1stroom”, “distance”: 1}, “north”: { “node”: “bossroom”, “distance”: 2}, “east”: { “node”: “rightwing”, “distance”: 3} , “west”: { “node”: “leftwing”, “distance”: 3} }, { “id”: “bossroom”, “name”: “Boss room”, “south”: {“node”: “bigroom”, “distance”: 2} } { “id”: “leftwing”, “name”: “Left Wing”, “east”: {“node”: “bigroom”, “distance”: 3} } { “id”: “rightwing”, “name”: “Right Wing”, “west”: { “node”: “bigroom”, “distance”: 3 } } ], “game”: { “win-condition”: { “source”: “finalboss”, “condition”: { “type”: “comparison”, “left”: “hp”, “right”: “0”, “symbol”: “<=” } }, “lose-condition”: { “source”: “player”, “condition”: { “type”: “comparison”, “left”: “hp”, “right”: “0”, “symbol”: “<=” } } }, “rooms”: { “entrance”: { “description”: { “default”: “You’re at the entrance of the dungeon. There are two lit torches on each wall (one on your right and one on your left). You see only one path: ahead.” }, “items”: [ { “id”: “littorch1”, “name”: “Lit torch on the right”, “triggers”: [ { “action”: “grab”, //grab Lit torch on the right “effect”:{ “statusUpdate”: “has light”, “target”: “game”, } } ] , “destination”: “hand” }, { “id”: “littorch2”, “name”: “Lit torch on the left”, “triggers”: [ { “action”: “grab”, //grab Lit torch on the left “effect”:{ “statusUpdate”: “has light”, “target”: “game”, } } ] , “destination”: “hand” } ] }, “1stroom”: { “description”: { “default”: “You’re in a very dark room. There are no windows and no source of light, other than the one at the entrance. You get the feeling you’re not alone here.”, “conditionals”: { “has light”: “The room you find yourself in appears to be empty, aside from a single chair in the right corner. There appears to be only one way out: deeper into the dungeon.” } }, “items”: [ { “id”: “chair”, “name”: “Wooden chair”, “details”: “It’s a wooden chair, nothing fancy about it. It appears to have been sitting here, untouched, for a while now.”, “subitems”: [ { “id”: “woodenleg”, “name”: “Wooden leg”, “triggeractions”: [ { “action”: “break”, “target”: “chair”}, //break { “action”: “throw”, “target”: “chair”} //throw ], “destination”: “inventory”, “damage”: 2 } ] } ] }, “bigroom”: { “description”: { “default”: “You’ve reached the big room. On every wall are torches lighting every corner. The walls are painted white, and the ceiling is tall and filled with painted white stars on a black background. There is a gateway on either side and a big, wooden double door in front of you.” }, “exits”: { “north”: { “id”: “bossdoor”, “name”: “Big double door”, “status”: “locked”, “details”: “A aig, wooden double door. It seems like something big usually comes through here.”} }, “items”: [] }, “leftwing”: { “description”: { “default”: “Another dark room. It doesn’t look like it’s that big, but you can’t really tell what’s inside. You do, however, smell rotten meat somewhere inside.”, “conditionals”: { “has light”: “You appear to have found the kitchen. There are tables full of meat everywhere, and a big knife sticking out of what appears to be the head of a cow.” } }, “items”: [ { “id”: “bigknife”, “name”: “Big knife”, “destination”: “inventory”, “damage”: 10} ] }, “rightwing”: { “description”: { “default”: “This appear to be some sort of office. There is a wooden desk in the middle, torches lighting every wall, and a single key resting on top of the desk.” }, “items”: [ { “id”: “key”, “name”: “Golden key”, “details”: “A small golden key. What use could you have for it?”, “destination”: “inventory”, “triggers”: [{ “action”: “use”, //use on north exit (contextual) “target”: { “room”: “bigroom”, “exit”: “north” }, “effect”: { “statusUpdate”: “unlocked”, “target”: { “room”: “bigroom”, “exit”: “north” } } } ] } ] }, “bossroom”: { “description”: { “default”: “You appear to have reached the end of the dungeon. There are no exits other than the one you just came in through. The only other thing that bothers you is the hulking giant looking like it’s going to kill you, standing about 10 feet from you.” }, “npcs”: [ { “id”: “finalboss”, “name”: “Hulking Ogre”, “details”: “A huge, green, muscular giant with a single eye in the middle of his forehead. It doesn’t just look bad, it also smells like hell.”, “stats”: { “hp”: 10, “damage”: 3 } } ] } }}它看起来有很多内容,但是如果你把它视为一个简单的游戏描述,就会明白这是一个含有六个房间的地牢,每个房间都与其他房间相互连接,如上图所示。你的任务是穿越并探索它。你会发现有两个地方可以找到武器(无论是在厨房还是在黑暗的房间,只要破坏掉椅子就能得到)。你也将面对一扇上锁的门,所以,一旦找到钥匙(位于类似办公室的房间内),就可以打开并用你收集到的武器和BOSS展开一场大战。你可以干掉它而获胜,也可以被它杀死而输掉。现在让我们更详细地了解整个 JSON 结构及其中的三个部分。Graph这里包含节点之间的关系。基本上这一部分会直接转换为我们之前看到的图。这部分的结构非常简单。它是一个节点列表,其中每个节点都包含以下属性:一个标识游戏中所有其他节点的唯一 ID;一个名称,实际上是给玩家看到的 ID 版本;一组指向其他节点的链接。这可以通过四个可能的 key 来描述:north, south, east 和 west.。我们可以通过添加这四个组合来增加更多方向。每个链接都包含相关节点的 ID 以及该关系的距离(或权重)。Game本节包含常规设置和条件。特别是在上面的示例中,此部分包含输赢条件。换句话说,在这两个条件下,我们会让游戏知道什么时候结束。为了简单起见,我添加了两个条件:要么通过杀死 BOSS 获胜,或者因为被杀而输掉。Rooms这一部分占了 JSON 文件很大的篇幅,也是最复杂的部分。在这里描述冒险中所有区域及其内部所有房间。每个房间都有一把钥匙,使用我们之前定义的 ID。每个房间都有一个描述,一个物品列表,一个出口(或门)列表和一个非玩家角色(NPC)列表。在这些属性中,唯一应该被强制定义的属性是描述,因为引擎需要这个属性才能让你明白所看到的内容。如果有什么东西需要展示,它们只能在那里。让我们来看看这些属性能为游戏做些什么。description这一项并不像想象的那么简单,因为你看到的房间可能会根据不同的情况而变化。例如:如果你查看第一个房间的描述,就会注意到在默认情况下,你将看不到任何东西,除非你有一个点亮的火炬。因此,拾取物品并使用它们,可能会触发影响游戏中其他部分的全局条件。items这些代表了你可以在房间内找到的所有东西。每个项目都会共享与 graph 节点相同的 ID 和名称。它们还有“目标”属性,该属性指示一旦拾取该道具应放在哪里。这是有意义的,因为你手上只能装备一个道具,而在背包中可以存放很多的道具。最后,其中一些道具可能会触发其他操作或者状态更新,具体取决于玩家决定用它们做什么。其中一个例子就是从入口处点燃的火把。如果你拿着一个,将在游戏中触发状态更新,这反过来将使游戏向你显示下一个房间的不同描述。道具也可以有“子道具”,一旦原始道具被销毁(例如通过“分解”操作)就会发挥作用。一个道具可以被分解为多个,并在“subitems”元素中定义。本质上,此元素只是一个新道具的数组,其中还包含可以触发其创建的一组操作。基本上可以根据你对原始道具执行的操作创建不同的子道具。最后,有些物品会有“伤害”属性。所以如果你用某个道具击中 NPC,该值用于从中减去生命。exits出口是与道具分开的实体,因为引擎需要知道你是否能够根据其状态去遍历它们。否则被锁定的出口无法让你通过,除非你把它的状态改为已解锁。NPC最后,NPC 将成为另一个列表的一部分。它们是有状态信息的项目,引擎将使用这些状态信息来了解每个项目的行为方式。在我们的例子中定义的是 “hp”,它代表健康状态,还有“damage”,就像武器一样,每次命中将从玩家的健康状况中减去相应的值。这就是我创造的地牢。内容很多,将来我可能会考虑写一个编辑器,来简化 JSON 文件的创建。但就目前而言还没有必要。你可能还没有意识到,这样在文件中定义游戏是有很大好处的,能够像超级任天堂时代那样切换 JSON 文件。只需加载一个新文件就能开始另一个游戏。非常简单!总结感谢你能读到这里。希望你能喜欢我所经历的设计过程,并将想法变为现实。我正在努力实现这一目标。我们以后可能会意识到,今天定义的内容可能会不起作用,出现这种情况时,我们将不得不回溯并修复它。我敢肯定,有很多方法可以对这里提出的想法进行改善,并创建一个地狱的引擎。但是这需要在本文中添加的更多的内容,为了不让读者感到无聊,所以就先这样吧。欢迎继续阅读本专栏其它高赞文章:12个令人惊叹的CSS实验项目世界顶级公司的前端面试都问些什么CSS Flexbox 可视化手册过节很无聊?还是用 JavaScript 写一个脑力小游戏吧!从设计者的角度看 ReactCSS粘性定位是怎样工作的一步步教你用HTML5 SVG实现动画效果程序员30岁前月薪达不到30K,该何去何从第三方CSS安全吗?谈谈super(props) 的重要性本文首发微信公众号:jingchengyideng欢迎扫描二维码关注公众号,每天都给你推送新鲜的前端技术文章 ...

March 7, 2019 · 5 min · jiezi

教你从头写游戏服务器框架

本文由云+社区发表作者:韩伟前言大概已经有差不多一年没写技术文章了,原因是今年投入了一些具体游戏项目的开发。这些新的游戏项目,比较接近独立游戏的开发方式。我觉得公司的“祖传”服务器框架技术不太适合,所以从头写了一个游戏服务器端的框架,以便获得更好的开发效率和灵活性。现在项目将近上线,有时间就想总结一下,这样一个游戏服务器框架的设计和实现过程。这个框架的基本运行环境是 Linux ,采用 C++ 编写。为了能在各种环境上运行和使用,所以采用了 gcc 4.8 这个“古老”的编译器,以 C99 规范开发。需求由于“越通用的代码,就是越没用的代码”,所以在设计之初,我就认为应该使用分层的模式来构建整个系统。按照游戏服务器的一般需求划分,最基本的可以分为两层:底层基础功能:包括通信、持久化等非常通用的部分,关注的是性能、易用性、扩展性等指标。高层逻辑功能:包括具体的游戏逻辑,针对不同的游戏会有不同的设计。我希望能有一个基本完整的“底层基础功能”的框架,可以被复用于多个不同的游戏。由于目标是开发一个 适合独立游戏开发 的游戏服务器框架。所以最基本的需求分析为:功能性需求并发:所有的服务器程序,都会碰到这个基本的问题:如何处理并发处理。一般来说,会有多线程、异步两种技术。多线程编程在编码上比较符合人类的思维习惯,但带来了“锁”这个问题。而异步非阻塞的模型,其程序执行的情况是比较简单的,而且也能比较充分的利用硬件性能,但是问题是很多代码需要以“回调”的形式编写,对于复杂的业务逻辑来说,显得非常繁琐,可读性非常差。虽然这两种方案各有利弊,也有人结合这两种技术希望能各取所长,但是我更倾向于基础是使用异步、单线程、非阻塞的调度方式,因为这个方案是最清晰简单的。为了解决“回调”的问题,我们可以在其上再添加其他的抽象层,比如协程或者添加线程池之类的技术予以改善。通信:支持 请求响应 模式以及 通知 模式的通信(广播视为一种多目标的通知)。游戏有很多登录、买卖、打开背包之类的功能,都是明确的有请求和响应的。而大量的联机游戏中,多个客户端的位置、HP 等东西都需要经过网络同步,其实就是一种“主动通知”的通信方式。持久化:可以存取 对象 。游戏存档的格式非常复杂,但其索引的需求往往都是根据玩家 ID 来读写就可以。在很多游戏主机如 PlayStation 上,以前的存档都是可以以类似“文件”的方式存放在记忆卡里的。所以游戏持久化最基本的需求,就是一个 key-value 存取模型。当然,游戏中还会有更复杂的持久化需求,比如排行榜、拍卖行等,这些需求应该额外对待,不适合包含在一个最基本的通用底层中。缓存:支持远程、分布式的对象缓存。游戏服务基本上都是“带状态”的服务,因为游戏要求响应延迟非常苛刻,基本上都需要利用服务器进程的内存来存放过程数据。但是游戏的数据,往往是变化越快的,价值越低,比如经验值、金币、HP,而等级、装备等变化比较慢的,价值则越高,这种特征,非常适合用一个缓存模型来处理。协程:可以用 C++ 来编写协程代码,避免大量回调函数分割代码。这个是对于异步代码非常有用的特性,能大大提高代码的可读性和开发效率。特别是把很多底层涉及IO的功能,都提供了协程化 API,使用起来就会像同步的 API 一样轻松惬意。脚本:初步设想是支持可以用 Lua 来编写业务逻辑。游戏需求变化是出了名快的,用脚本语言编写业务逻辑正好能提供这方面的支持。实际上脚本在游戏行业里的使用非常广泛。所以支持脚本,也是一个游戏服务器框架很重要的能力。其他功能:包括定时器、服务器端的对象管理等等。这些功能很常用,所以也需要包含在框架中,但已经有很多成熟方案,所以只要选取常见易懂的模型即可。比如对象管理,我会采用类似 Unity 的组件模型来实现。非功能性需求灵活性:支持可替换的通信协议;可替换的持久化设备(如数据库);可替换的缓存设备(如 memcached/redis);以静态库和头文件的方式发布,不对使用者代码做过多的要求。游戏的运营环境比较复杂,特别是在不同的项目之间,可能会使用不同的数据库、不同的通信协议。但是游戏本身业务逻辑很多都是基于对象模型去设计的,所以应该有一层能够基于“对象”来抽象所有这些底层功能的模型。这样才能让多个不同的游戏,都基于一套底层进行开发。部署便利性:支持灵活的配置文件、命令行参数、环境变量的引用;支持单独进程启动,而无须依赖数据库、消息队列中间件等设施。一般游戏都会有至少三套运行环境,包括一个开发环境、一个内测环境、一个外测或运营环境。一个游戏的版本更新,往往需要更新多个环境。所以如何能尽量简化部署就成为一个很重要的问题。我认为一个好的服务器端框架,应该能让这个服务器端程序,在无配置、无依赖的情况下独立启动,以符合在开发、测试、演示环境下快速部署。并且能很简单的通过配置文件、或者命令行参数的不同,在集群化下的外部测试或者运营环境下启动。性能:很多游戏服务器,都会使用异步非阻塞的方式来编程。因为异步非阻塞可以很好的提高服务器的吞吐量,而且可以很明确的控制多个用户任务并发下的代码执行顺序,从而避免多线程锁之类的复杂问题。所以这个框架我也希望是以异步非阻塞作为基本的并发模型。这样做还有另外一个好处,就是可以手工的控制具体的进程,充分利用多核 CPU 服务器的性能。当然异步代码可读性因为大量的回调函数,会变得很难阅读,幸好我们还可以用“协程”来改善这个问题。扩展性:支持服务器之间的通信,进程状态管理,类似 SOA 的集群管理。自动容灾和自动扩容,其实关键点是服务进程的状态同步和管理。我希望一个通用的底层,可以把所有的服务器间调用,都通过一个统一的集权管理模型管理起来,这样就可以不再每个项目去关心集群间通信、寻址等问题。一旦需求明确下来,基本的层级结构也可以设计了:层次功能约束逻辑层实现更具体的业务逻辑能调用所有下层代码,但应主要依赖接口层实现层对各种具体的通信协议、存储设备等功能的实现满足下层的接口层来做实现,禁止同层间互相调用接口层定义了各模块的基本使用方式,用以隔离具体的实现和设计,从而提供互相替换的能力本层之间代码可以互相调用,但禁止调用上层代码工具层提供通用的 C++ 工具库功能,如 log/json/ini/日期时间/字符串处理 等等不应该调用其他层代码,也不应该调用同层其他模块第三方库提供诸如 redis/tcaplus 或者其他现成功能,其地位和“工具层”一样不应该调用其他层代码,甚至不应该修改其源码最后,整体的架构模块类似:说明通信处理器缓存持久化功能实现TcpUdpKcpTlvLineJsonHandlerObjectProcessorSessionLocalCacheRedisMapRamMapZooKeeperMapFileDataStoreRedisDataStroe接口定义TransferProtocolServerClientProcessorDataMapSerializableDataStore工具类库ConfigLOGJSONCoroutine 通信模块对于通信模块来说,需要有灵活的可替换协议的能力,就必须按一定的层次进行进一步的划分。对于游戏来说,最底层的通信协议,一般会使用 TCP 和 UDP 这两种,在服务器之间,也会使用消息队列中间件一类通信软件。框架必须要有能同事支持这几通信协议的能力。故此设计了一个层次为: Transport在协议层面,最基本的需求有“分包”“分发”“对象序列化”等几种需求。如果要支持“请求-响应”模式,还需要在协议中带上“序列号”的数据,以便对应“请求”和“响应”。另外,游戏通常都是一种“会话”式的应用,也就是一系列的请求,会被视为一次“会话”,这就需要协众需要有类似 Session ID 这种数据。为了满足这些需求,设计一个层次为: Protocol拥有了以上两个层次,是可以完成最基本的协议层能力了。但是,我们往往希望业务数据的协议包,能自动化的成为编程中的 对象,所以在处理消息体这里,需要一个可选的额外层次,用来把字节数组,转换成对象。所以我设计了一个特别的处理器:ObjectProcessor ,去规范通信模块中对象序列化、反序列化的接口。输入层次功能输出dataTransport通信bufferbufferProtocol分包MessageMessageProcessor分发objectobject处理模块处理业务逻辑Transport此层次是为了统一各种不同的底层传输协议而设置的,最基本应该支持 TCP 和 UDP 这两种协议。对于通信协议的抽象,其实在很多底层库也做的非常好了,比如 Linux 的 socket 库,其读写 API 甚至可以和文件的读写通用。C# 的 Socket 库在 TCP 和 UDP 之间,其 api 也几乎是完全一样的。但是由于作用游戏服务器,很多适合还会接入一些特别的“接入层”,比如一些代理服务器,或者一些消息中间件,这些 API 可是五花八门的。另外,在 html5 游戏(比如微信小游戏)和一些页游领域,还有用 HTTP 服务器作为游戏服务器的传统(如使用 WebSocket 协议),这样就需要一个完全不同的传输层了。服务器传输层在异步模型下的基本使用序列,就是:在主循环中,不断尝试读取有什么数据可读如果上一步返回有数据到达了,则读取数据读取数据处理后,需要发送数据,则向网络写入数据根据上面三个特点,可以归纳出一个基本的接口:class Transport {public: /** * 初始化Transport对象,输入Config对象配置最大连接数等参数,可以是一个新建的Config对象。 / virtual int Init(Config config) = 0; /** * 检查是否有数据可以读取,返回可读的事件数。后续代码应该根据此返回值循环调用Read()提取数据。 * 参数fds用于返回出现事件的所有fd列表,len表示这个列表的最大长度。如果可用事件大于这个数字,并不影响后续可以Read()的次数。 * fds的内容,如果出现负数,表示有一个新的终端等待接入。 / virtual int Peek(int fds, int len) = 0; /** * 读取网络管道中的数据。数据放在输出参数 peer 的缓冲区中。 * @param peer 参数是产生事件的通信对端对象。 * @return 返回值为可读数据的长度,如果是 0 表示没有数据可以读,返回 -1 表示连接需要被关闭。 / virtual int Read( Peer peer) = 0; /** * 写入数据,output_buf, buf_len为想要写入的数据缓冲区,output_peer为目标队端, * 返回值表示成功写入了的数据长度。-1表示写入出错。 / virtual int Write(const char output_buf, int buf_len, const Peer& output_peer) = 0; /** * 关闭一个对端的连接 / virtual void ClosePeer(const Peer& peer) = 0; /* * 关闭Transport对象。 / virtual void Close() = 0;}在上面的定义中,可以看到需要有一个 Peer 类型。这个类型是为了代表通信的客户端(对端)对象。在一般的 Linux 系统中,一般我们用 fd (File Description)来代表。但是因为在框架中,我们还需要为每个客户端建立接收数据的缓存区,以及记录通信地址等功能,所以在 fd 的基础上封装了一个这样的类型。这样也有利于把 UDP 通信以不同客户端的模型,进行封装。///@brief 此类型负责存放连接过来的客户端信息和数据缓冲区class Peer {public: int buf_size_; ///< 缓冲区长度 char const buffer_;///< 缓冲区起始地址 int produced_pos_; ///< 填入了数据的长度 int consumed_pos_; ///< 消耗了数据的长度 int GetFd() const; void SetFd(int fd); /// 获得本地地址 const struct sockaddr_in& GetLocalAddr() const; void SetLocalAddr(const struct sockaddr_in& localAddr); /// 获得远程地址 const struct sockaddr_in& GetRemoteAddr() const; void SetRemoteAddr(const struct sockaddr_in& remoteAddr);private: int fd_; ///< 收发数据用的fd struct sockaddr_in remote_addr_; ///< 对端地址 struct sockaddr_in local_addr_; ///< 本端地址};游戏使用 UDP 协议的特点:一般来说 UDP 是无连接的,但是对于游戏来说,是肯定需要有明确的客户端的,所以就不能简单用一个 UDP socket 的fd 来代表客户端,这就造成了上层的代码无法简单在 UDP 和 TCP 之间保持一致。因此这里使用 Peer 这个抽象层,正好可以接近这个问题。这也可以用于那些使用某种消息队列中间件的情况,因为可能这些中间件,也是多路复用一个 fd 的,甚至可能就不是通过使用 fd 的 API 来开发的。对于上面的 Transport 定义,对于 TCP 的实现者来说,是非常容易能完成的。但是对于 UDP 的实现者来说,则需要考虑如何宠妃利用 Peer ,特别是 Peer.fd_ 这个数据。我在实现的时候,使用了一套虚拟的 fd 机制,通过一个客户端的 IPv4 地址到 int 的对应 Map ,来对上层提供区分客户端的功能。在 Linux 上,这些 IO 都可以使用 epoll 库来实现,在 Peek() 函数中读取 IO 事件,在 Read()/Write() 填上 socket 的调用就可以了。另外,为了实现服务器之间的通信,还需要设计和 Tansport 对应的一个类型:Connector 。这个抽象基类,用于以客户端模型对服务器发起请求。其设计和 Transport 大同小异。除了 Linux 环境下的 Connecotr ,我还实现了在 C# 下的代码,以便用 Unity 开发的客户端可以方便的使用。由于 .NET 本身就支持异步模型,所以其实现也不费太多功夫。/** * @brief 客户端使用的连接器类,代表传输协议,如 TCP 或 UDP /class Connector {public: virtual ~Connector() {} /* * @brief 初始化建立连接等 * @param config 需要的配置 * @return 0 为成功 / virtual int Init(Config config) = 0; /** * @brief 关闭 / virtual void Close() = 0; /* * @brief 读取是否有网络数据到来 * 读取有无数据到来,返回值为可读事件的数量,通常为1 * 如果为0表示没有数据可以读取。 * 如果返回 -1 表示出现网络错误,需要关闭此连接。 * 如果返回 -2 表示此连接成功连上对端。 * @return 网络数据的情况 / virtual int Peek() = 0; /* * @brief 读取网络数 * 读取连接里面的数据,返回读取到的字节数,如果返回0表示没有数据, * 如果buffer_length是0, 也会返回0, * @return 返回-1表示连接需要关闭(各种出错也返回0) / virtual int Read(char ouput_buffer, int buffer_length) = 0; /** * @brief 把input_buffer里的数据写入网络连接,返回写入的字节数。 * @return 如果返回-1表示写入出错,需要关闭此连接。 / virtual int Write(const char input_buffer, int buffer_length) = 0;protected: Connector(){}};Protocol对于通信“协议”来说,其实包含了许许多多的含义。在众多的需求中,我所定义的这个协议层,只希望完成四个最基本的能力:分包:从流式传输层切分出一个个单独的数据单元,或者把多个“碎片”数据拼合成一个完整的数据单元的能力。一般解决这个问题,需要在协议头部添加一个“长度”字段。请求响应对应:这对于异步非阻塞的通信模式下,是非常重要的功能。因为可能在一瞬间发出了很多个请求,而回应则会不分先后的到达。协议头部如果有一个不重复的“序列号”字段,就可以对应起哪个回应是属于哪个请求的。会话保持:由于游戏的底层网络,可能会使用 UDP 或者 HTTP 这种非长连接的传输方式,所以要在逻辑上保持一个会话,就不能单纯的依靠传输层。加上我们都希望程序有抗网络抖动、断线重连的能力,所以保持会话成为一个常见的需求。我参考在 Web 服务领域的会话功能,设计了一个 Session 功能,在协议中加上 Session ID 这样的数据,就能比较简单的保持会话。分发:游戏服务器必定会包含多个不同的业务逻辑,因此需要多种不同数据格式的协议包,为了把对应格式的数据转发。除了以上三个功能,实际上希望在协议层处理的能力,还有很多,最典型的就是对象序列化的功能,还有压缩、加密功能等等。我之所以没有把对象序列化的能力放在 Protocol 中,原因是对象序列化中的“对象”本身是一个业务逻辑关联性非常强的概念。在 C++ 中,并没有完整的“对象”模型,也缺乏原生的反射支持,所以无法很简单的把代码层次通过“对象”这个抽象概念划分开来。但是我也设计了一个 ObjectProcessor ,把对象序列化的支持,以更上层的形式结合到框架中。这个 Processor 是可以自定义对象序列化的方法,这样开发者就可以自己选择任何“编码、解码”的能力,而不需要依靠底层的支持。至于压缩和加密这一类功能,确实是可以放在 Protocol 层中实现,甚至可以作为一个抽象层次加入 Protocol ,可能只有一个 Protocol 层不足以支持这么丰富的功能,需要好像 Apache Mina 这样,设计一个“调用链”的模型。但是为了简单起见,我觉得在具体需要用到的地方,再额外添加 Protocol 的实现类就好,比如添加一个“带压缩功能的 TLV Protocol 类型”之类的。消息本身被抽象成一个叫 Message 的类型,它拥有“服务名字”“会话ID”两个消息头字段,用以完成“分发”和“会话保持”功能。而消息体则被放在一个字节数组中,并记录下字节数组的长度。enum MessageType { TypeError, ///< 错误的协议 TypeRequest, ///< 请求类型,从客户端发往服务器 TypeResponse, ///< 响应类型,服务器收到请求后返回 TypeNotice ///< 通知类型,服务器主动通知客户端};///@brief 通信消息体的基类///基本上是一个 char[] 缓冲区struct Message {public: static int MAX_MAESSAGE_LENGTH; static int MAX_HEADER_LENGTH; MessageType type; ///< 此消息体的类型(MessageType)信息 virtual ~Message(); virtual Message& operator=(const Message& right); /** * @brief 把数据拷贝进此包体缓冲区 / void SetData(const char input_ptr, int input_length); ///@brief 获得数据指针 inline char* GetData() const{ return data_; } ///@brief 获得数据长度 inline int GetDataLen() const{ return data_len_; } char* GetHeader() const; int GetHeaderLen() const;protected: Message(); Message(const Message& message); private: char* data_; // 包体内容缓冲区 int data_len_; // 包体长度};根据之前设计的“请求响应”和“通知”两种通信模式,需要设计出三种消息类型继承于 Message,他们是:Request 请求包Response 响应包Notice 通知包Request 和 Response 两个类,都有记录序列号的 seq_id 字段,但 Notice 没有。Protocol 类就是负责把一段 buffer 字节数组,转换成 Message 的子类对象。所以需要针对三种 Message 的子类型都实现对应的 Encode() / Decode() 方法。class Protocol {public: virtual ~Protocol() { } /** * @brief 把请求消息编码成二进制数据 * 编码,把msg编码到buf里面,返回写入了多长的数据,如果超过了 len,则返回-1表示错误。 * 如果返回 0 ,表示不需要编码,框架会直接从 msg 的缓冲区读取数据发送。 * @param buf 目标数据缓冲区 * @param offset 目标偏移量 * @param len 目标数据长度 * @param msg 输入消息对象 * @return 编码完成所用的字节数,如果 < 0 表示出错 / virtual int Encode(char buf, int offset, int len, const Request& msg) = 0; /** * 编码,把msg编码到buf里面,返回写入了多长的数据,如果超过了 len,则返回-1表示错误。 * 如果返回 0 ,表示不需要编码,框架会直接从 msg 的缓冲区读取数据发送。 * @param buf 目标数据缓冲区 * @param offset 目标偏移量 * @param len 目标数据长度 * @param msg 输入消息对象 * @return 编码完成所用的字节数,如果 < 0 表示出错 / virtual int Encode(char buf, int offset, int len, const Response& msg) = 0; /** * 编码,把msg编码到buf里面,返回写入了多长的数据,如果超过了 len,则返回-1表示错误。 * 如果返回 0 ,表示不需要编码,框架会直接从 msg 的缓冲区读取数据发送。 * @param buf 目标数据缓冲区 * @param offset 目标偏移量 * @param len 目标数据长度 * @param msg 输入消息对象 * @return 编码完成所用的字节数,如果 < 0 表示出错 / virtual int Encode(char buf, int offset, int len, const Notice& msg) = 0; /** * 开始编码,会返回即将解码出来的消息类型,以便使用者构造合适的对象。 * 实际操作是在进行“分包”操作。 * @param buf 输入缓冲区 * @param offset 输入偏移量 * @param len 缓冲区长度 * @param msg_type 输出参数,表示下一个消息的类型,只在返回值 > 0 的情况下有效,否则都是 TypeError * @return 如果返回0表示分包未完成,需要继续分包。如果返回-1表示协议包头解析出错。其他返回值表示这个消息包占用的长度。 / virtual int DecodeBegin(const char buf, int offset, int len, MessageType* msg_type) = 0; /** * 解码,把之前DecodeBegin()的buf数据解码成具体消息对象。 * @param request 输出参数,解码对象会写入此指针 * @return 返回0表示成功,-1表示失败。 / virtual int Decode(Request request) = 0; /** * 解码,把之前DecodeBegin()的buf数据解码成具体消息对象。 * @param request 输出参数,解码对象会写入此指针 * @return 返回0表示成功,-1表示失败。 / virtual int Decode(Response response) = 0; /** * 解码,把之前DecodeBegin()的buf数据解码成具体消息对象。 * @param request 输出参数,解码对象会写入此指针 * @return 返回0表示成功,-1表示失败。 / virtual int Decode(Notice notice) = 0;protected: Protocol() { }};这里有一点需要注意,由于 C++ 没有内存垃圾搜集和反射的能力,在解释数据的时候,并不能一步就把一个 char[] 转换成某个子类对象,而必须分成两步处理。先通过 DecodeBegin() 来返回,将要解码的数据是属于哪个子类型的。同时完成分包的工作,通过返回值来告知调用者,是否已经完整的收到一个包。调用对应类型为参数的 Decode() 来具体把数据写入对应的输出变量。对于 Protocol 的具体实现子类,我首先实现了一个 LineProtocol ,是一个非常不严谨的,基于文本ASCII编码的,用空格分隔字段,用回车分包的协议。用来测试这个框架是否可行。因为这样可以直接通过 telnet 工具,来测试协议的编解码。然后我按照 TLV (Type Length Value)的方法设计了一个二进制的协议。大概的定义如下:协议分包: [消息类型:int:2] [消息长度:int:4] [消息内容:bytes:消息长度]消息类型取值:0x00 Error0x01 Request0x02 Response0x03 Notice包类型字段编码细节Request服务名字段:int:2[字符串内容:chars:消息长度]序列号字段:int:2 会话ID字段:int:2 消息体字段:int:2[字符串内容:chars:消息长度] Response服务名字段:int:2[字符串内容:chars:消息长度]序列号字段:int:2 会话ID字段:int:2 消息体字段:int:2[字符串内容:chars:消息长度] Notice服务名字段:int:2[字符串内容:chars:消息长度]消息体字段:int:2[字符串内容:chars:消息长度] 一个名为 TlvProtocol 的类型完成对这个协议的实现。Processor处理器层是我设计用来对接具体业务逻辑的抽象层,它主要通过输入参数 Request 和 Peer 来获得客户端的输入数据,然后通过 Server 类的 Reply()/Inform() 来返回 Response 和 Notice 消息。实际上 Transport 和 Protocol 的子类们,都属于 net 模块,而各种 Processor 和 Server/Client 这些功能类型,属于另外一个 processor 模块。这样设计的原因,是希望所有 processor 模块的代码单向的依赖 net 模块的代码,但反过来不成立。Processor 基类非常简单,就是一个处理函数回调函数入口 Process():///@brief 处理器基类,提供业务逻辑回调接口class Processor {public: Processor(); virtual ~Processor(); /** * 初始化一个处理器,参数server为业务逻辑提供了基本的能力接口。 / virtual int Init(Server server, Config* config = NULL); /** * 处理请求-响应类型包实现此方法,返回值是0表示成功,否则会被记录在错误日志中。 * 参数peer表示发来请求的对端情况。其中 Server 对象的指针,可以用来调用 Reply(), * Inform() 等方法。如果是监听多个服务器,server 参数则会是不同的对象。 / virtual int Process(const Request& request, const Peer& peer, Server server); /** * 关闭清理处理器所占用的资源 / virtual int Close();};设计完 Transport/Protocol/Processor 三个通信处理层次后,就需要一个组合这三个层次的代码,那就是 Server 类。这个类在 Init() 的时候,需要上面三个类型的子类作为参数,以组合成不同功能的服务器,如:TlvProtocol tlv_protocol; // Type Length Value 格式分包协议,需要和客户端一致TcpTransport tcp_transport; // 使用 TCP 的通信协议,默认监听 0.0.0.0:6666EchoProcessor echo_processor; // 业务逻辑处理器Server server; // DenOS 的网络服务器主对象server.Init(&tcp_transport, &tlv_protocol, &echo_processor); // 组装一个游戏服务器对象:TLV 编码、TCP 通信和回音服务Server 类型还需要一个 Update() 函数,让用户进程的“主循环”不停的调用,用来驱动整个程序的运行。这个 Update() 函数的内容非常明确:检查网络是否有数据需要处理(通过 Transport 对象)有数据的话就进行解码处理(通过 Protocol 对象)解码成功后进行业务逻辑的分发调用(通过 Processor 对象)另外,Server 还需要处理一些额外的功能,比如维护一个会话缓存池(Session),提供发送 Response 和 Notice 消息的接口。当这些工作都完成后,整套系统已经可以用来作为一个比较“通用”的网络消息服务器框架存在了。剩下的就是添加各种 Transport/Protocol/Processor 子类的工作。class Server {public: Server(); virtual ~Server(); /* * 初始化服务器,需要选择组装你的通信协议链 / int Init(Transport transport, Protocol* protocol, Processor* processor, Config* config = NULL); /** * 阻塞方法,进入主循环。 / void Start(); /* * 需要循环调用驱动的方法。如果返回值是0表示空闲。其他返回值表示处理过的任务数。 / virtual int Update(); void ClosePeer(Peer peer, bool is_clear = false); //关闭当个连接,is_clear 表示是否最终整体清理 /** * 关闭服务器 / void Close(); /* * 对某个客户端发送通知消息, * 参数peer代表要通知的对端。 / int Inform(const Notice& notice, const Peer& peer); /* * 对某个 Session ID 对应的客户端发送通知消息,返回 0 表示可以发送,其他值为发送失败。 * 此接口能支持断线重连,只要客户端已经成功连接,并使用旧的 Session ID,同样有效。 / int Inform(const Notice& notice, const std::string& session_id); /* * 对某个客户端发来的Request发回回应消息。 * 参数response的成员seqid必须正确填写,才能正确回应。 * 返回0成功,其它值(-1)表示失败。 / int Reply(Response response, const Peer& peer); /** * 对某个 Session ID 对应的客户端发送回应消息。 * 参数 response 的 seqid 成员系统会自动填写会话中记录的数值。 * 此接口能支持断线重连,只要客户端已经成功连接,并使用旧的 Session ID,同样有效。 * 返回0成功,其它值(-1)表示失败。 / int Reply(Response response, const std::string& session_id); /** * 会话功能 / Session GetSession(const std::string& session_id = “”, bool use_this_id = false); Session* GetSessionByNumId(int session_id = 0); bool IsExist(const std::string& session_id); };有了 Server 类型,肯定也需要有 Client 类型。而 Client 类型的设计和 Server 类似,但就不是使用 Transport 接口作为传输层,而是 Connector 接口。不过 Protocol 的抽象层是完全重用的。Client 并不需要 Processor 这种形式的回调,而是直接传入接受数据消息就发起回调的接口对象 ClientCallback。class ClientCallback {public: ClientCallback() { } virtual ~ClientCallback() { // Do nothing } /** * 当连接建立成功时回调此方法。 * @return 返回 -1 表示不接受这个连接,需要关闭掉此连接。 / virtual int OnConnected() { return 0; } /* * 当网络连接被关闭的时候,调用此方法 / virtual void OnDisconnected() { // Do nothing } /* * 收到响应,或者请求超时,此方法会被调用。 * @param response 从服务器发来的回应 * @return 如果返回非0值,服务器会打印一行错误日志。 / virtual int Callback(const Response& response) { return 0; } /* * 当请求发生错误,比如超时的时候,返回这个错误 * @param err_code 错误码 / virtual void OnError(int err_code){ WARN_LOG(“The request is timeout, err_code: %d”, err_code); } /* * 收到通知消息时,此方法会被调用 / virtual int Callback(const Notice& notice) { return 0; } /* * 返回此对象是否应该被删除。此方法会被在 Callback() 调用前调用。 * @return 如果返回 true,则会调用 delete 此对象的指针。 / virtual bool ShouldBeRemoved() { return false; }};class Client : public Updateable { public: Client(); virtual ~Client(); /* * 连接服务器 * @param connector 传输协议,如 TCP, UDP … * @param protocol 分包协议,如 TLV, Line, TDR … * @param notice_callback 收到通知后触发的回调对象,如果传输协议有“连接概念”(如TCP/TCONND),建立、关闭连接时也会调用。 * @param config 配置文件对象,将读取以下配置项目:MAX_TRANSACTIONS_OF_CLIENT 客户端最大并发连接数; BUFFER_LENGTH_OF_CLIENT客户端收包缓存;CLIENT_RESPONSE_TIMEOUT 客户端响应等待超时时间。 * @return 返回 0 表示成功,其他表示失败 / int Init(Connector connector, Protocol* protocol, ClientCallback* notice_callback = NULL, Config* config = NULL); /** * callback 参数可以为 NULL,表示不需要回应,只是单纯的发包即可。 / virtual int SendRequest(Request request, ClientCallback* callback = NULL); /** * 返回值表示有多少数据需要处理,返回-1为出错,需要关闭连接。返回0表示没有数据需要处理。 / virtual int Update(); virtual void OnExit(); void Close(); Connector connector() ; ClientCallback* notice_callback() ; Protocol* protocol() ;};至此,客户端和服务器端基本设计完成,可以直接通过编写测试代码,来检查是否运行正常。此文已由腾讯云+社区在各渠道发布,一切权利归作者所有获取更多新鲜技术干货,可以关注我们腾讯云技术社区-云加社区官方号及知乎机构号 ...

March 5, 2019 · 7 min · jiezi

第12期 DApp 榜单 : “吸睛”+“吸金”的小游戏

作者:DD君欢迎添加作者微信 btcbtc555 与他进行交流!未经授权禁止转载!截止到今天为止,以太坊上DApp数量合计为1,336,EOS上DApp数量合计为349,波场上DApp数量合计为173,三大公链中竞猜类DAPP均居龙头位置。目前宏观经济形势不稳定已成为绝大多数人的共识,春节期间年年爆火的返乡置业潮相较于往年都有所降温,DApp在节期间的表现不尽人意也可以理解。一方面来自用户群体注意力的转移,另一方面则是由于用户现金流的缺失。整个虚拟货币市场是个联动的生态系统,春节期间一直处在盘整阶段的各个主流币种,今天以太坊率先领跑,比特币柚子等也有小幅上涨,不知道此波行情能否也为DAPP带来一些关注度。以下进入今天的榜单。ETH榜单相较于EOS在春节期间的用户数流失,ETH的交易人数却有所增加。但我们发现1812个以太坊DApps中只有180个与ERC-20交易相关联,通过简单的算数得知,这大约相当于10%,大量的以太DAPP已经处于死亡状态。加拿大加密货币研究者和行业评论员Kevin Rooke的言论也巩固了以太坊应用程序缺乏活动的事实。这样来看春节期间以太坊交易人数的激增,可能又是某些项目方自导自演的戏码。EOS榜单可以注意到EOS榜单在春节期间有很大的波动变化,除了雷打不动的PRA CandyBox、EOS Knights依旧霸榜之外,其余名次皆有较大变化,且竞猜类DAPP占据主要名额。游戏BIG.GAME早在去年九月份就已经推出,表现一直不温不火,但近日的用户数增长堪称飞速。相较而言每日成交量的增速远远低于用户数,我们有理由怀疑该团队通过刷用户量的方式提升自己的Dapp排名,以获得更高的曝光度。TRON榜单本周波场前三名依旧为节前前三,而后半部分的变动较大。波场的DApp的爆发时间远晚于EOS,从去年12月份才进入爆发期,1月步入红利期,目前每天仍有新的波场DAPP推出。由于波场主要用户都集中在海外,所以整个春节期间,其交易量并没有太大的下滑幅度。观点分析春节假期明显可以感觉到Dapp圈内迅速冷却,不知道的人还以为是Dapp要凉了。原因篇首已提,此处便不再赘述,目前三大公链的数据已经基本回暖。缺乏新用户入场是目前所有DAPP遭遇的普遍难题。我们DAPPDiscover团队已经不止一次提到过,只有出现一些新的好玩的游戏,才有吸引新用户的可能性。春节期间一款名为Celex的五子棋游戏就引起了我们团队的关注,大家可以感受一下游戏界面。界面简洁,使用流畅,没有繁杂的注册钱包步骤,是DD君体验该游戏的直观感受。也许有读者疑问:“这个游戏这么常见,有必要放在单独拎出来讲吗?”有!!!原因有两点:其一,从游戏层面上,该五子棋属于小游戏,能有效吸引更多的用户群体。我们可以对比微信的小游戏“跳一跳”。2017年12月28日下午,微信小游戏“跳一跳”正式上线,一经推出,微信指数几乎直线上升超过2亿,2018年春节期间同时在线人数最高2800万/小时。抛开微信的熟人生态和满足用户相互攀比分数高低的原因外,小游戏耗时少难度低,用户的碎片化时间可以得到更有效占用,从而能获得更多的用户群体。其二,结合DAPP的通性,包括上面我们提到的Celex,本质依旧是“游戏即挖矿”。以该游戏为例,这款游戏主要通过与人实时PK五子棋来确定输赢,筹码就是GT(该游戏代币)。该游戏还含有邀请好友奖励等等,由于该游戏还处于测试阶段,后续有可能会上线更多的玩法,但本质估计仍差不多。小游戏带来更多用户,区块链又给该小游戏赋予了金融属性,“吸睛”+“吸金”,你不心动吗?你有哪些感兴趣的DApp?欢迎留言回复下一次讨论的,也许就是它。

February 19, 2019 · 1 min · jiezi

学习 PixiJS — 补间动画

说明补间动画指的是,我们可以通过为精灵的位置、比例、透明度,等属性,设置开始值和结束值,制作动画,动画中间需要的部分由软件自动计算填充。Pixi 没有内置补间引擎,但是你可以使用很多很好的开源的补间库,比如 Tween.js 和 Dynamic.js 。如果要制作非常专业的自定义补间效果,可以使用这两个库中的其中一个。但是现在我们要使用的是一个名为 Charm.js 的专门用于 Pixi 的补间库。使用 Charm 库要开始使用 Charm ,首先直接用 script 标签,引入 js 文件<script src=“https://www.kkkk1000.com/js/Charm.js"></script>然后创建它的实例let c = new Charm(PIXI);变量 c 现在代表 Charm 实例。和前面的文章中讲到的粒子效果一样,在调用 state 函数之后,必须为游戏循环中的每个帧更新补间。就是在游戏循环中调用 Charm 的 update 方法,如下所示:function gameLoop() { requestAnimationFrame(gameLoop); state(); c.update(); renderer.render(stage);}滑动补间Charm 最有用的补间效果之一是 slide 。使用 slide 方法可以使精灵从画布上的当前位置平滑移动到任何其他位置。slide 方法有七个参数,但只有前三个参数是必需的。名称默认值描述anySprite 需要移动的精灵finalXPosition 滑动结束时 x 坐标finalYPosition 滑动结束时 y 坐标durationInFrames60补间需要的帧数,也就是动画应该持续多长时间easingType"smoothstep"缓动类型yoyofalse用于确定精灵是否应在补间的起点和终点之间来回移动。delayTimeBeforeRepeat0一个以毫秒为单位的数字,用于确定精灵 yoyo 之前的延迟时间。示例:以下是如何使用 slide 方法使精灵用120帧从原始位置移动到坐标为(128,128)的位置的关键代码。c.slide(sprite, 128, 128, 120);效果图:查看示例如果你想让精灵在起点和终点之间来回移动,请将 yoyo(第六个参数)设置为 true,代码如下所示:c.slide(sprite, 128, 128, 120, “smoothstep”, true);查看示例补间对象Charm 所有的补间方法都返回一个补间对象,你可以这样创建:let slidePixie = c.slide(sprite, 80, 128, 120, “smoothstep”,true);slidePixie 就是补间对象,它包含一些有用的属性和方法,可以用于控制补间。其中一个是 onComplete 方法,它将在补间完成后立即运行。以下代码是精灵到达终点时如何使用 onComplete 方法在控制台中显示消息。let slidePixie = c.slide(sprite, 80, 128, 120, “smoothstep”,true);slidePixie.onComplete = () => console.log(“一次滑动完成”);如果将 yoyo (slide 方法的第六个参数)设置为 true,则每当精灵到达其起点和终点时,onComplete 方法都将运行。补间还有 pause 和 play 方法,可以停止和开始补间。slidePixie.pause();slidePixie.play();补间对象还具有 playing 属性,如果补间当前正在播放,则该属性值为 true。只不过有些补间方法返回的对象中直接有 playing 属性,有些补间方法返回的对象中的 playing 属性是在一个叫 tweens 的数组中, tweens 数组中包括了这个补间方法创建的所有补间对象。以 slide 方法为例,完成一个滑动需要创建 x 轴补间对象和 y 轴补间对象,这两个对象都放在了 tweens 数组中,这两个对象也都分别有 playing 属性。查看示例所有 Charm 的补间方法都返回你可以控制和访问的补间对象。设置缓动类型slide 方法的第四个参数是 easingType 。它是一个字符串,用于确定补间加速和减速的类型。这些类型共有15种可供选择,并且它们对于 Charm 的所有不同补间方法都是相同的。某些类型对应的会有一个基本类型,一个 squared 类型和一个cubed 类型。squared 类型和 cubed 类型只是将基本类型的效果放大而已。大多数 Charm 的补间效果的默认缓动类型是 smoothstep。Linear:linear,精灵从开始到停止保持匀速运动。Smoothstep:smoothstep,smoothstepSquared,smoothstepCubed。加速精灵并以非常自然的方式减慢速度Acceleration:acceleration, accelerationCubed。逐渐加速精灵并突然停止。如果要更加平滑的加速效果,请使用 sine,sineSquared 或 sineCubed。Deceleration:deceleration,decelerationCubed。突然加速精灵并逐渐减慢它。要获得更加平滑的减速效果,请使用inverseSine,inverseSineSquared或inverseSineCubed。Bounce:bounce 10 -10 ,这将使精灵到达起点和终点时略微反弹,更改乘数10和 -10,可以改变效果。查看示例使用 slide 进行场景过渡你在游戏或应用程序中肯定要做的一件事就是让场景过渡,然后将新场景滑入视图。它可能是你游戏的标题滑动以显示游戏的第一级,或者可能是一个菜单,可以滑动以显示更多的应用程序内容。你可以使用 slide 方法执行此操作。首先,创建两个容器对象:sceneOne 和 sceneTwo,并将它们添加到舞台上。sceneOne = new Container();sceneTwo = new Container();stage.addChild(sceneOne);stage.addChild(sceneTwo);接下来,为每个场景创建精灵。制作一个像画布一样大的蓝色矩形; 并在矩形中间添加上 Scene One 的文字,将两者都添加到 sceneOne 容器中。再制作一个像画布一样大的红色矩形;并在矩形中间添加上Scene Two 的文字,将这两者添加到 sceneTwo 容器中。你最终得到的两个容器对象,如下图所示。以下是关键代码://1. Scene one sprites: //画蓝色矩形let blueRectangle = new PIXI.Graphics();blueRectangle.beginFill(0x014ACA);blueRectangle.drawRect(0, 0, canvasWith, canvasHeight);blueRectangle.endFill();sceneOne.addChild(blueRectangle);//添加文字,并在容器中居中let sceneOneText = new PIXI.Text(“Scene One”);sceneOneText.style = { fill: “#fff”, fontSize: “40px” };let sceneOneTextX = (canvasWith - sceneOneText.width) / 2;let sceneOneTextY = (canvasWith - sceneOneText.height) / 2;sceneOneText.position.set(sceneOneTextX, sceneOneTextY);sceneOne.addChild(sceneOneText);//2. Scene two sprites://画红色矩形let redRectangle = new PIXI.Graphics();redRectangle.beginFill(0xEF4631);redRectangle.drawRect(0, 0, canvasWith, canvasHeight);redRectangle.endFill();sceneTwo.addChild(redRectangle);//添加文字,并在容器中居中let sceneTwoText = new PIXI.Text(“Scene Two”);sceneTwoText.style = { fill: “#fff”, fontSize: “40px” };let sceneTwoTextX = (canvasWith - sceneTwoText.width) / 2;let sceneTwoTextY = (canvasHeight - sceneTwoText.height) / 2;sceneTwoText.position.set(sceneTwoTextX, sceneTwoTextY);sceneTwo.addChild(sceneTwoText);在一个真实的项目中,你可以为每个容器填充每个场景所需的精灵数量,你也可以为你的项目添加尽可能多的场景容器。接下来,将 sceneTwo 移开,使其位于画布的右边缘之外。代码如下所示:sceneTwo.x = canvasWith;这将在画布上显示 sceneOne,而 sceneTwo 在需要时会从左侧滑出,如下所示。sceneTwo 就在屏幕外等着。最后,使用 slide 方法从 sceneOne 过渡到 sceneTwo 。只需将 sceneOne 滑动到左侧,然后从右侧滑动 sceneTwo ,取代它的位置,代码如下。c.slide(sceneTwo, 0, 0);c.slide(sceneOne, -canvasWith, 0);下图显示了这段代码的效果。查看示例时间过渡你可以自定义一个 wait 函数在设定的时间间隔后进行过渡。function wait(duration = 0) { return new Promise((resolve, reject) => { setTimeout(resolve, duration); });}要使用 wait,请为其提供一个参数,它代表你希望等待的时间(以毫秒为单位)。以下是在延迟1秒(1000毫秒)后从 sceneOne 过渡到 sceneTwo 的方法。wait(1000).then(() => { c.slide(sceneTwo, 0, 0); c.slide(sceneOne, -canvasWith, 0);});查看示例其实在 Charm 库中已经定义了 wait 这个方法,原理和上面的 wait 函数是一样的。你可以这样使用它。c.wait(1000).then(() => { c.slide(sceneTwo, 0, 0); c.slide(sceneOne, -canvasWith, 0);});沿贝塞尔曲线移动如果你还不清楚什么是贝塞尔曲线,可以先看看这篇文章。slide 方法沿直线为精灵制作动画,但你也可以使用另一种方法(followCurve)使精灵沿贝塞尔曲线移动。首先,将贝塞尔曲线定义为4个坐标点的二维数组,如下所示:let curve = [ [sprite.x, sprite.y], //起始点 [108, 32], //控制点1 [176, 32], //控制点2 [196, 160] //结束点];followCurve 方法的参数如下:名称默认值描述anySprite 需要移动的精灵curve 贝塞尔曲线数组durationInFrames60补间需要的帧数,也就是动画应该持续多长时间easingType"smoothstep"缓动类型yoyofalse用于确定精灵是否应在补间的起点和终点之间来回移动。delayTimeBeforeRepeat0一个以毫秒为单位的数字,用于确定精灵 yoyo 之前的延迟时间。接下来,使用 Charm 的 followCurve 方法使精灵跟随该曲线。(提供 curve 数组作为第二个参数)c.followCurve( sprite, //需要移动的精灵 curve, //贝塞尔曲线数组 120, //持续时间,以帧为单位 “smoothstep”, //缓动类型 true, //yoyo 1000 //yoyo之前的延迟时间);效果图:如果你需要使精灵的中点沿着曲线移动,还需要设置精灵的锚点(anchor)居中,如下所示:sprite.anchor.set(0.5, 0.5);查看示例slide 和 followCurve 方法适用于简单的来回动画效果,但你也可以结合它们以使精灵遵循更复杂的路径。沿路径移动你可以使用 Charm 的 walkPath 方法连接一系列点,并使精灵移动到每个点。该系列中的每个点都称为 waypoint 。首先,从由坐标点组成的二维数组定位路径点开始,这些 waypoint 映射出你希望精灵遵循的路径。let waypoints = [ [32, 32], //要移动到的第一个坐标点 [32, 128], //要移动到的第二个坐标点 [300, 128], //要移动到的第三个坐标点 [300, 32], //要移动到的第四个坐标点 [32, 32] //要移动到的第五个坐标点];你可以根据需要使用任意多的 waypoint。walkPath 方法的参数如下:名称默认值描述anySprite 需要移动的精灵waypoints 坐标点的二维数组durationInFrames60补间需要的帧数,也就是动画应该持续多长时间easingType"smoothstep"缓动类型loopfalse用于确定精灵在到达结尾时是否从头开始yoyofalse用于确定精灵是否应在补间的起点和终点之间来回移动。delayBetweenSections0一个以毫秒为单位的数字,用于确定精灵在移动到路径的下一部分之前应该等待的时间。接下来,使用 walkPath 方法使精灵按顺序移动到所有这些点。(前两个参数是必需的)c.walkPath( sprite, //需要移动的精灵 waypoints, //坐标点的二维数组 300, //持续时间,以帧为单位 “smoothstep”, //缓动类型 true, //循环 true, //轮流反向播放动画 1000 //移动到路径的下一部分之前应该等待的时间);效果图:查看示例而使用 walkCurve 方法,可以使精灵遵循一系列连接的贝塞尔曲线。首先,创建任何贝塞尔曲线数组,描述你希望精灵遵循的路径。let curvedWaypoints = [ //第一条曲线 [[sprite.x, sprite.y],[75, 500],[200, 500],[300, 300]], //第二条曲线 [[300, 300],[250, 100],[100, 100],[sprite.x, sprite.y]]];每条曲线的四个点与 followCurve 方法中的相同:起始位置,控制点1,控制点2和结束位置。第一条曲线中的最后一个点应与下一条曲线中的第一个点相同。你可以根据需要使用尽可能多的曲线。walkCurve 方法的参数如下:名称默认值描述anySprite 需要移动的精灵curvedWaypoints 贝塞尔曲线的坐标点的数组durationInFrames60补间需要的帧数,也就是动画应该持续多长时间easingType"smoothstep"缓动类型yoyofalse用于确定精灵是否应在补间的起点和终点之间来回移动。delayBeforeContinue0一个以毫秒为单位的数字,用于确定精灵yoyo之前的延迟时间。接下来,提供 curvedWaypoints 数组作为 walkCurve 方法中的第二个参数,来试试这个方法。c.walkCurve( sprite, //需要移动的精灵 curvedWaypoints, //贝塞尔曲线的坐标点的数组 300, //持续时间,以帧为单位 “smoothstep”, //缓动类型 true, //循环 true, //轮流反向播放动画 1000 //移动到路径的下一部分之前应该等待的时间);效果图:查看示例使用 walkPath 和 walkCurve 将为你提供了一个很好的开端,它们可以为游戏制作一些有趣的动画。更多补间效果Charm 有许多其他内置的补间效果,你会发现它们在游戏和应用程序中有很多用处。下面是其他一些效果的介绍。fadeOut 和 fadeInfadeOut 方法使精灵逐渐变得透明,fadeIn 方法使精灵从透明逐渐显现。这两个方法需要的参数是一样的。参数:名称默认值描述anySprite 需要产生效果的精灵durationInFrames60持续的帧数示例:c.fadeOut(anySprite);c.fadeIn(anySprite);查看示例pulse使用 pulse 方法可以使精灵以稳定的速率连续淡入淡出。参数:名称默认值描述anySprite 需要产生效果的精灵durationInFrames60淡入淡出应该持续的帧数,也就是持续时间minAlpha0精灵可以减少到的最小的透明度值示例:c.pulse(anySprite);查看示例如果你只希望精灵在再次淡入之前变为半透明,请将第三个参数设置为0.5,如下所示:c.pulse(anySprite, 60, 0.5);scale你可以使用 scale 方法让精灵产生缩放效果。参数:名称默认值描述anySprite 需要产生效果的精灵endScaleX0.5x 轴缩放的比例endScaleY0.5y 轴缩放的比例durationInFrames60持续时间,以帧为单位示例:c.scale( sprite, //精灵 0.1, //x轴缩放的比例 0.1, //y轴缩放的比例 100 //持续时间,以帧为单位);查看示例breathe如果你希望缩放效果来回 yoyo,请使用 breathe 方法。它是一种缩放效果,使精灵看起来好像在呼吸。参数:名称默认值描述anySprite 需要产生效果的精灵endScaleX0.5x 轴缩放的比例endScaleY0.5y 轴缩放的比例durationInFrames60持续时间,以帧为单位yoyotrue是否轮流反向播放delayBeforeRepeat0一个以毫秒为单位的数字,用于确定精灵 yoyo 之前的延迟时间。示例:c.breathe( sprite, //精灵 0.1, //x轴缩放的比例 0.1, //y轴缩放的比例 100, //持续时间,以帧为单位 true, //轮流反向播放 0, //yoyo 之间的延迟时间);查看示例strobe使用 strobe 方法通过快速改变精灵比例,使精灵看起来像闪光灯一样闪烁。参数:只需要传入一个精灵作为参数即可。示例:c.strobe(sprite);查看示例wobble使用 wobble 方法可以使精灵像果冻一样摆动。参数:只需要传入一个精灵作为参数即可。示例:c.wobble(sprite);查看示例如果你使用这些缩放补间效果(scale,breathe,strobe,或者 wobble),将精灵的锚点居中,就可以从精灵的中心进行缩放。sprite.anchor.set(0.5, 0.5);注意: 目前, Charm 这个库支持的 Pixi 版本是 3.0.11。如果使用比较高的版本会有一些问题,比如出现这样的警告。这是因为 Pixi 版本4.0.0起已弃用 ParticleContainer ,改为使用 particles.ParticleContainer 了。所以要解决这个问题需要把 Charm.js 文件中的 ParticleContainer 改为 particles.ParticleContainer 。上一篇 学习 PixiJS — 视觉效果 ...

February 18, 2019 · 3 min · jiezi

深耕品质,腾讯WeTest《2018中国移动游戏质量白皮书》正式发布

本文由云+社区发表作者:腾讯WeTest原文链接:https://wetest.qq.com/lab/view/437.html对于游戏行业的不少人来说,2018年是一个多事之秋。放眼大局,游戏玩家中,70%用户已有3年以上的互联网经验,玩家们对游戏审美迅速提高。而相较2017年,游戏工委&伽马数据《2018年中国游戏产业报告显示》,中国游戏市场实际收入同比增长率,从23%下降至5.3%,这说明国内游戏行业增量已经转为了深耕存量的阶段。正如腾讯WeTest总经理方亮所言,游戏厂商依靠上游用户圈地的运动已经走到了尽头。但在险象环生的同时,2018年也更是充满变化与机遇的一年。2019年1月7日,腾讯WeTest《2018中国移动游戏质量白皮书》(以下简称“白皮书”)正式发布,现已于腾讯WeTest官方网站开放下载。通过腾讯大数据及其他第三方平台数据,白皮书着重从市场硬件、兼容、客户端性能、服务器性能、安全、玩家口碑、小游戏等玩家体验最敏感的质量视角进行数据采集与深入分析,客观地反应出了2018年中国移动游戏研发市场的现状与变化。图1.png【图1】《2018中国移动游戏质量白皮书》正式发布风险与机遇并存,风起云涌的2018从游戏品类出发观察,2018年间,已有不少产品在精品化与多元化上深挖起来。角色扮演类、动作类、策略类游戏仍占苹果应用商店的60%的份额。其中,角色扮演类游戏与动作类游戏的比重持续下降,但策略类游戏则依旧占比17%,风华正盛。这些头部游戏品类已进入以品质为导向的存量阶段,一并呈现出精品化、细分化、多元化的态势。图2.png【图2】App Store 游戏畅销榜Top1000游戏类型分布同时,移动游戏市场上也呈现出更为丰富的多元化特征,“战术竞技类”等涵盖多元化玩法的游戏开始登上主流舞台。而更为垂直的细分领域已衍生至14种,其中模拟游戏、家庭游戏、桌面游戏开始初露头角。另一方面,玩法轻便、即点即玩的小游戏也开始展露更多的能量。与此同时,2018年间,移动硬件设备的迭代更加速了。图3.png【图3】Android TOP100硬件配置占比统计屏幕方面,虽然16:9的设备仍是主流。此外,“刘海屏”“全面屏”等异形屏设备的覆盖人群更占据市场7%左右。这些来自用户需求与技术发展的变化,同样也为游戏开发者在游戏兼容性、客户端、服务器、安全性等一系列适配上提出了更高的要求。市场需求发展加上外部硬件的变化为游戏开发者们带来新的机遇,而想要在资源有限的情况下,于项目立项的阶段取胜,就要准确把握用户瞬息万变的审美需求。唯有掌握了曾在2018年发生的问题,拥抱变化,才能在2019年扭转乾坤。TOP 100 机型游戏综合性能数据公布,客户端问题玩家最为敏感腾讯WeTest企鹅风讯平台对抽样游戏在2018年产生的舆情调查显示,登录、卡顿、掉线问题最受玩家关注。从游戏分布来看,登录问题主要集中于动作类、策略类游戏;而卡顿问题则是动作类、角色扮演类游戏的高发问题。图4.png【图4】玩家舆情报警数量分布(客户端问题包括:登录、闪退、更新、下载、安装、启动、硬件和兼容问题)因此,针对腾讯大数据统计出的TOP 100 Android机型以及 TOP iOS机型,腾讯WeTest甄选了战术竞技、体育竞技、ARPG等游戏,一并综合生成性能评分,方便开发者在研发期间,选择性能调优阶段的参考机型。图5.png图6.png【图5】【图6】Android、iOS两大阵营主流设备性能表现首度公开腾讯手游性能大数据,战术竞技游戏服务器痛点同步揭露在2018年,根据苹果应用商店游戏畅销榜可知,多头寡头效应依然明显。而对于这些极具竞争力的产品标杆,开发者们无法详细掌握相关数据,因此更无法找到优化方向。为了助推手游行业标准建立,协助行业性能优化提升,腾讯WeTest首次公开腾讯游戏真实性能数据,战术竞技、MMORPG、体育竞技等主流品类游戏均囊括其中。图7.png【图7】腾讯Android手游性能大数据图8.png【图8】腾讯iOS手游性能大数据同时,由于站在2018年风口上的战术竞技游戏,通常采用UE4引擎机制,战斗服会承担大量同步、物理、逻辑等计算,因此对游戏的服务器性能带来众多挑战。白皮书中,全面剖析了来自服务器的技术性难点,值得开发者重点关注。图9.jpg【图9】战术竞技游戏服务器的痛点兼容性问题不容忽视,显示异常问题需要关注基于腾讯WeTest平台测试对Android产品大数据统计,平均每次测试能够发现游戏产品拥有10.1个兼容性问题,其中,显示异常、Crash问题占比超过70%。此外,功能问题亦占比14%。图10.png【图10】Android游戏兼容性问题类型分布随着Android机型内存升高,相较2017年,APK crash、安装失败等致命问题显著降低。但高配机型中异形屏的出现,导致UI异常问题频发。图11.png【图11】不同Android内存、系统机型兼容性问题分布情况同时,2018年中,Android 9 Pie面向全球发布,新的流量池正在被挖掘与重视。随着系统版本的升高与开发者的逐渐适应,Crash问题正逐步减少,但Android 8 的显示异常问题比重仍最高,需要重点关注。另一方面, iOS系统平均每次测试能够发现3-4个问题。其中,显示异常占比高达56%,需要开发者重点关注。而从iOS 10开始,安装失败与无响应问题迅速减少,基本为零。图12.png【图12】iOS游戏兼容性问题类型分布安全问题间不容发,强交互手游需重点关注外挂漏洞在移动APP中,游戏一直是安全漏洞的重灾区。腾讯WeTest对产品研发期与运营期手游安全情况进行比较,发现了最新问题:其一,强交互游戏依然是外挂漏洞的“温床”;其二,研发期游戏漏洞如果没有解决,会在运营期衍生多个外挂变种,严重影响手游平衡性;其三,动作射击类游戏由于其“强交互”特质,成为了外网外挂的“宠儿”。图13.png【图13】手游研发期与运营期间,平均单款手游安全问题占比而数据显示,最为致命的外挂问题下,“刷道具”为手游研发期最多的安全漏洞,定制外挂与通用修改器,则是手游运营期外网常见作弊方式。此外,在手游研发期存在的致命安全漏洞问题,将由于高收益在运营期会明显扩张,占比从研发期的34%上升至运营期的50%,因此开发者在手游研发期就要防微杜渐、未雨绸缪。图14.png【图14】手游研发期间,具体外挂安全问题占比全面分析小游戏测试难点,功能与适配是主流问题2018年,是小游戏爆发的元年,亦是小游戏精品化、重度化的一年。从小游戏的上线产品的比例来看,角色扮演类占据26%,休闲益智类占据24%,而在2018年下半年开始,一些策略战棋类的重度游戏类型开始出现在小游戏中,重度游戏在小游戏市场中,并非没有机会。而从产品本身观察,小游戏目前正在向精品化轻度化发展。图15.png【图15】2018年小游戏类型分布情况而相较手游通用测试模块,小游戏有着相对独立的测试内容。依托于腾讯旗下小游戏研发经验以及案例,白皮书显示,功能问题与适配问题占据小游戏测试问题主流,同时性能问题亦占据16%不容忽视。图16.png【图16】小游戏测试问题分布情况针对小游戏性能情况统计,有6%-7%的用户因游戏加载时间过长从而流失,小游戏用户流失情况与加载时长形成正比。因此,针对小游戏的加载时间,腾讯游戏根据不同机型档次,设立了加载时间上线标准。图17.png【图17】小游戏加载时间上线标准而在小游戏所面临的适配问题中,67%的问题来自显示异常,异形屏带来的UI适配问题非常明显,亟需开发者关注。 图18.png【图18】小游戏适配问题类型分布展望未来,腾讯WeTest与您同行在未来的2019年里,无论是游戏产品,亦或是互联网下的其他行业产品,统一、批量生产的简单模式定会被逐步迭代。正如WeTest总经理方亮先生所言,取胜关键必然是品质与创意,因此开发者更要做好严格的品质把控,务必珍惜来之不易的流量。在此之下,奔跑的不仅是开发者们,腾讯WeTest作为第三方平台也将与时俱进,超越品质,点亮游戏。作为一站式品质开放平台,腾讯WeTest一直致力于推动优质内容顺利产出,帮助开发者解决难题,在测试效率与质量上产生1+1>2的效果。在过去的一年间,腾讯WeTest对旗下兼容、性能、安全、舆情等服务进行了全方位品质升级,并持续输出云游戏、AI自动化测试、基于AI的同步控制系统、性能大数据分析、舆情大数据分析、舆情预警等前沿技术。而在未来,腾讯WeTest将从游戏出发,逐步将前沿的技术和服务辐射向金融、电商、视频等更多行业,助力更多精品的诞生。此文已由腾讯云+社区在各渠道发布获取更多新鲜技术干货,可以关注我们腾讯云技术社区-云加社区官方号及知乎机构号

February 14, 2019 · 1 min · jiezi

学习 PixiJS — 视觉效果

平铺精灵平铺精灵是一种特殊的精灵,可以在一定的范围内重复一个纹理。你可以使用它们创建无限滚动的背景效果。要创建平铺精灵,需要使用带有三个参数的 TilingSprite 类(PIXI.extras.TilingSprite)用法:let tilingSprite = new PIXI.extras.TilingSprite(texture, width, height);参数:名称默认值描述texture 平铺精灵的纹理width100平铺精灵的宽度height100平铺精灵的高度除此之外,平铺精灵具有与普通精灵所有相同的属性,并且与普通精灵的工作方式相同。他们还有 fromImage 和 fromFrame 方法,就像普通精灵一样。以下是如何使用名称是 brick.jpg 的100 x 100像素的图像创建200 x 200像素的平铺精灵。并且从画布左上角偏移30像素。以下是关键代码:let tilingSprite = new PIXI.extras.TilingSprite( PIXI.loader.resources[imgURL].texture, 200, 200);tilingSprite.x = 30;tilingSprite.y = 30;下图显示了 brick.jpg 图像以及上面代码的效果。你可以使用 tilePosition.x 和 tilePosition.y 属性来移动平铺精灵使用的纹理。以下是如何将平铺精灵使用的纹理移动30像素。tilingSprite.tilePosition.x = 30;tilingSprite.tilePosition.y = 30;这里不是在移动平铺精灵,而是移动平铺精灵使用的纹理。下图是两种情况的对比。你还可以使用 tileScale.x 和 tileScale.y 属性更改平铺精灵使用的纹理的比例。以下是如何将平铺精灵使用的纹理的大小增加到1.5倍的关键代码:tilingSprite.tileScale.x = 1.5;tilingSprite.tileScale.y = 1.5;原图 与 上面代码实现的效果的对比:tileScale 和 tilePosition 都有一个 set 方法,可以一行代码设置 x 属性和 y 属性。参数:名称默认值描述x0新的 x 属性值y0新的 y 属性值用法:tilingSprite.tilePosition.set(30, 30);tilingSprite.tileScale.set(1.5, 1.5);平铺精灵是创建重复图像模式的便捷方式。因为你可以移动纹理的位置,所以你可以使用平铺精灵创建无缝的滚动背景。这对于许多类型的游戏都非常有用。让我们来看看如何做到这一点。首先,从无缝平铺图像开始。无缝图像是图案在各方面匹配的图像。如果并排放置图像的副本,它们看起来就像是一个连续的大图像,上面示例中用到的 brick.jpg 就是这种图像。接下来,使用此图像创建一个平铺精灵。然后在游戏循环中更新精灵的 tilePosition.x 属性。关键代码:function play() { tilingSprite.tilePosition.x -= 1;}效果图:查看示例你还可以使用此功能创建一个称为视差滚动的伪3D效果。就是在同一位置层叠多个这样的平铺精灵,并使看上去更远的图像移动得比更近的图像慢。就像下面这个示例一样!两张用于做平铺精灵的图像:实现的效果图:查看示例着色精灵有一个 tint 属性,给这个属性赋值一个十六进制颜色值可以改变精灵的色调。我们来试试吧!关键代码:sprite.tint = 0xFFFF660;原图 与 上面代码实现的效果的对比:查看示例每个精灵的 tint 属性默认值是白色(0xFFFFFF),也就是没有色调。如果你想改变一个精灵的色调而不完全改变它的纹理,就使用着色。蒙版Pixi 允许你使用 Graphics (图形)对象来屏蔽任何精灵或具有嵌套子精灵的容器。蒙版是隐藏在形状区域之外的精灵的任何部分的形状。要使用蒙版,先创建精灵和 Graphics 对象。然后将精灵的 mask 属性设置为创建的 Graphics 对象。示例:首先,用皮卡丘的图像创建一个精灵。然后创建一个蓝色正方形并定位在精灵的上方(形状的颜色并不重要)。最后,精灵的 mask 属性设置为创建的正方形对象。这样会只显示正方形区域内精灵的图像。精灵在正方形之外的任何部分都是不可见的。原图 与 使用蒙版后的对比:关键代码://创建精灵let Pikachu = new PIXI.Sprite(PIXI.loader.resources[imgURL].texture);//创建一个正方形对象let rectangle = new PIXI.Graphics();rectangle.beginFill(0x66CCFF);rectangle.drawRect(0, 0, 200, 200);rectangle.endFill();rectangle.x = 100;rectangle.y = 100;//给精灵设置蒙版Pikachu.mask = rectangle;查看示例你还可以为蒙版设置动画,去做出一些有趣的效果。而且如果是用 WebGL 渲染的话,还可以用精灵作为蒙版。下面这个示例是用三张图片做成精灵,然后把一个精灵作为蒙版,并且给蒙版设置动画的示例。效果图:查看示例混合模式blendMode 属性确定精灵如何与其下层的图像混合。如下所示,可以将它们应用于精灵:sprite.blendMode = PIXI.BLEND_MODES.MULTIPLY;以下是可以使用的17种混合模式的完整列表:没有混合NORMAL(正常)对比比较(饱和度模式)SOFT_LIGHT(柔光)HARD_LIGHT(强光)OVERLAY(叠加)对比比较(差集模式)DIFFERENCE(差值)EXCLUSION(排除)减淡效果(变亮模式)LIGHTEN(变亮)COLOR_DODGE(颜色减淡)SCREEN(滤色)ADD(线性减淡,添加)加深效果(变暗模式)DARKEN(变暗)COLOR_BURN(颜色加深)MULTIPLY(正片叠底)色彩效果(颜色模式)HUE(色相)SATURATION(饱和度)COLOR(颜色)LUMINOSITY(明度)这些混合模式和图像编辑器,比如 Photoshop 中使用的混合模式是一样的,如果你想尝试每种混合模式,你可以在 Photoshop 中打开一些图像,将这些混合模式应用于这些图像上,观察效果。注意: WebGL 渲染器仅支持 NORMAL,ADD,MULTIPLY 和 SCREEN 混合模式。任何其他模式都会像 NORMAL 一样。查看示例滤镜Pixi 拥有多种滤镜,可以将一些特殊效果应用于精灵。所有滤镜都在 PIXI.filters 对象中。滤镜是 Pixi 最好的功能之一,因为它们可以让你轻松创建一些特殊效果,否则只有通过复杂的低级 WebGL 编程才能实现这些效果。这是一个如何创建 BlurFilter (模糊滤镜)的示例(其他滤镜遵循相同的格式)://创建一个模糊滤镜let blurFilter = new PIXI.filters.BlurFilter();//设置模糊滤镜的属性blurFilter.blur = 20;//将模糊滤镜添加到精灵的滤镜数组中sprite.filters = [blurFilter];Pixi 的所有显示对象(Sprite 和 Container 对象)都有一个滤镜数组。要向精灵添加滤镜,先创建滤镜,然后将其添加到精灵的滤镜数组中。你可以根据需要添加任意数量的滤镜。sprite.filters = [blurFilter, sepiaFilter, displacementFilter];使用它就像使用其他普通数组一样。要清除所有精灵的滤镜,只需清除数组即可。sprite.filters = [];除了这些属性,所有滤镜还包括额外的 padding 和 uniforms 属性。padding 增加了滤镜区域周围的空间。uniforms 是一个可用于向 WebGL 渲染器发送额外值的对象。在日常使用中,你永远不必担心设置 uniforms 属性。PixiJS 在4.0.0版本的时候,将非核心滤镜转移到新的包 — pixi-filters,现在 PixiJS 内置的滤镜有下面这几种。AlphaFilter用来修改对象透明度的滤镜。 在其他一些文档中,你可能看到的是 VoidFilter 这个滤镜,这是因为在 PixiJS 的4.6.0版本的时候,才添加 AlphaFilter,而弃用 VoidFilter。BlurFilterBlurFilter 将高斯模糊应用于对象。可以分别为x轴和y轴设置模糊强度。BlurXFilterBlurXFilter 将水平高斯模糊应用于对象。BlurYFilterBlurYFilter 将垂直高斯模糊应用于对象。ColorMatrixFilterColorMatrixFilter 类允许你对 显示对象(displayObject) 上每个像素的 RGBA 颜色和 alpha 值应用5x4矩阵变换,以生成一组具有新的 RGBA 颜色和 alpha 值的结果。它非常强大!使用它可是实现黑白、调整亮度、调整对比度、去色、灰度、调整色调,等许多效果。DisplacementFilterDisplacementFilter 类使用指定纹理(称为置换贴图)中的像素值来执行对象的位移。你可以使用这个滤镜来实现扭曲的效果。在这篇文章中已经讲过什么是 DisplacementFilter(置换滤镜)了,并且文章中也有一个不错的示例。FXAAFilter快速近似抗锯齿滤镜。NoiseFilter杂色效果滤镜。注意:Pixi 的滤镜仅适用于 WebGL 渲染,因为 Canvas 绘图 API 太慢而无法实时更新它们。这里有一个示例,包含了 Pixi 中绝大部分的滤镜。查看示例视频纹理你可以将视频用作精灵的纹理,就像使用图像一样容易。使用 Texture 类的 fromVideo 方法就可以创建视频纹理。videoTexture = PIXI.Texture.fromVideo(videoUrl);videoSprite = new PIXI.Sprite(videoTexture);stage.addChild(videoSprite);或者,也可以使用 fromVideoUrl 方法从 URL 地址创建视频纹理。视频纹理只是一个普通的 HTML5 <video> 元素,你可以通过纹理的 baseTexture.source 属性访问它,如下所示:let videoSource = videoTexture.baseTexture.source;然后,你可以使用任何 HTML5 <video> 元素的属性和方法控制视频,例如 play 和 pause 。videoSource.play();videoSource.pause();查看 HTML <video> 元素的完整规范,可以知道所有可以使用的属性和方法。查看示例适配多种分辨率如果你对物理像素、设备独立像素、设备像素比,等一些名词还不熟悉,可以先看看这篇文章 。Pixi 会自动调整像素密度,以匹配运行内容的设备的分辨率。你所要做的就是为高分辨率和低分辨率提供不同的图像,Pixi 将帮助你根据当前的设备像素比选择正确的图像。注意:当你创建高分辨率图像时,可以将“@2x”添加到图像文件名称后面,以说明图像是支持高分辨率的屏幕,例如,Retina 屏幕。同时这也会设置精灵的 baseTexture.resolution 属性(sprite.texture.baseTexture.resolution)。第一步是找出当前的设备像素比。你可以使用 window.devicePixelRatio 方法执行此操作。将此值分配给变量。let displayResolution = window.devicePixelRatio;displayResolution 是一个描述设备像素比的数字。它由运行应用程序的设备自动提供。1是标准分辨率; 2是高密度分辨率; 你将越来越多地发现一些报告3的超高密度显示器。下一步是将此值分配给渲染选项的 resolution 属性。在创建 Pixi 应用时执行此操作,如下所示://创建一个 Pixi应用 需要的一些参数let option = { width: 640, height: 360, transparent: true, resolution: displayResolution}//创建一个 Pixi应用let app = new PIXI.Application(option);然后根据设备像素比选择正确的图像加载到纹理中。如下所示:let texture;if (displayResolution === 2) { //加载高分辨率图像 texture = PIXI.Texture.fromImage(“highResImage@2x.png”);} else { //加载普通分辨率图像 texture = PIXI.Texture.fromImage(“normalResImage.png”);}let anySprite = new PIXI.Sprite(texture);如果你需要知道加载纹理的设备像素比是多少,可以使用 texture 的 baseTexture.resolution 属性(texture.baseTexture.resolution)找出。查看示例绳(Rope)另一个有趣的效果是 Rope。它允许精灵像波浪一样振荡或像蛇一样滑行,如下图所示。首先,从想要变形的事物的图像开始。滑行蛇实际上是一个简单的直线图像,如下图所示。然后决定你想要独立移动蛇的段数。蛇图像的宽度为600像素,因此大约20个片段会产生很好的效果。将图像宽度除以段数,就是每个绳段的长度。let numberOfSegments = 20;let imageWidth = 600;let ropeSegment = imageWidth / numberOfSegments;接下来,创建一个包含20个 Point 对象的数组。每个 Point 的 x 位置(第一个参数)将与下一个 Point 分开一个 ropeSegment 的距离。let points = [];for (let i = 0; i < numberOfSegments; i++) { points.push(new PIXI.Point(i * ropeLength, 0));}现在使用 PIXI.mesh.Rope 方法 new 一个 Rope 对象。这个方法需要两个参数:一个是 Rope 对象使用的纹理一个是包含 Point 对象的数组let snake = new PIXI.mesh.Rope(PIXI.Texture.fromImage(‘snake.png’), points);将蛇添加到一个容器中,这样可以更容易定位。然后将容器添加到舞台并定位它。let snakeContainer = new PIXI.Container();snakeContainer.addChild(snake);stage.addChild(snakeContainer);snakeContainer.position.set(10, 150);现在为游戏循环中的 Point 对象设置动画。通过 for 循环将数组中的每个 Point 按照椭圆形的轨迹移动,形成波浪效果。count += 0.1;for (let i = 0; i < points.length; i++) { points[i].y = Math.sin((i * 0.5) + count) * 30; points[i].x = i * ropeLength + Math.cos((i * 0.3) + count) * numberOfSegments;}查看示例 这里还有一篇文章,讲的是用 Rope 来实现游动的锦鲤的效果,看上去也很好玩。总结本文主要聊了聊平铺精灵、着色、蒙版、混合模式、滤镜、视频纹理、适配多种分辨率、绳(Rope),相关的东西。如果你觉得文字解释的不清楚,在每小节中,都有一个或者多个相应的示例,你可以点开看看,而且示例中的注释也比较清楚。 还有就是因为 PixiJS 的 API 时常有变化,所以要注意 PixiJS 的版本,文中大部分示例用的版本是4.8.2,如果你在尝试使用的时候,发现和示例的效果不一样,可以先检查一下版本。如果文中有错误的地方,还请小伙伴们指出,万分感谢。 ...

February 3, 2019 · 2 min · jiezi

我本淮右布衣——苦逼码农加班猝死?不,掉进游戏里了

我叫朱熹,名字是不是听起来很耳熟,没错,名字和宋朝“程朱理学”集大成者朱熹一模一样,可惜人家是一代大儒,而我,呵,一个从母胎出生就单身了二十几年的屌丝。父母给我取这个名字本来是想让我和朱文公一样出人头地,怎奈我资质太差、学历浅薄,是一个庸庸碌碌之辈,说起来我还真是配不上这个名字。四年前刚从一个不知名的十三线二本大学毕业,大学专业学的是软件工程专业。没错,我就是现在社会上所说的码农,所谓“钱多话少,死的早”的人群之一。毕业的时候经济不好,由于学校也不是什么名校,给那些大公司投的简历都打了水漂,倒不是说面试不通过,而是连面试的机会都没有!!!经济不好,大公司都开始减少社招、不大规模裁员就不错了,就算有岗位招聘,也都是招高级工程师,新人他们也只招985、211学校的,像我这种十三线二本大学的,估计简历刚发送过去,就被人家的简历过滤系统设置的关键词就过滤掉了,根本就到不了HR那里。没办法只能病急乱投医,写了个自动化程序,把我的简历自动发送给各种公司的游戏岗位,通过这种广撒网的方法,我投个一百多家,至少能有几家愿意给我机会面试吧。皇天不负苦心人,终于是有几家愿意面试我了。其中有一家我觉得不错,现在想来当时还是太年轻了,不谙世事,才会被骗过来,天天过着加班的苦逼生活。公司游戏架构早就写好了,名叫ReAngView,像我们这种普通的码农很多底层代码是无需触碰的,只需要安心地写好我们的业务代码搬砖就好了,但这一部分往往都是脏活累活,导致经常加班。老板之前是一个玩世不恭的二世祖,而且是独子,终日花天酒地,后来他那有钱的老爸过世给他留了一大笔资产,去世前嘱咐他要找些正经事业做,这人仿佛就开窍似的、浪子回头。他对游戏没有任何热情,开游戏公司纯粹是听说做游戏很挣钱,做游戏的方法也很简单粗暴,换个皮肤、换个故事脚本就当成一个新游戏来卖了。说倒是很轻巧,换个皮肤、换个故事脚本就行了,就像某个国产浏览器,拿个谷歌浏览器,换个软件图标,就宣称完全自主研发,然后去骗钱融资那么简单。实际上哪有那么简单,有很多繁琐的细节代码要开发,就不别说游戏框架本身的bug了,这个框架是几年前一个大神开发的,我入公司不久后,他嫌工资低就被其他公司挖走了,这人叫什么我不知道,我与他只有数面之缘,只知道大家都叫他赢神。后来的新人谁敢动这个框架的代码啊,公司那么多已经发行的游戏运行在这个框架之上,动了出了问题谁负责啊。但是痛苦啊!基于这个框架来开发游戏,终日就像戴着镣铐跳舞的囚犯一样,小心翼翼地躲开那些已知的坑点,如果你遇到一些前人都没遇到的问题,那么恭喜你,中奖了!你就在那里慢慢加班调试去吧,一调试经常就是一两点。可以说苦不堪言,要离职吧,又不敢,因为没有掌握什么核心技术,今年又遇到行业不景气、大裁员,害怕离职后找不到新的工作,怎么办呢?能怎么办,得过且过呗,至少熬过这个行业寒冬先,嗯,活下去要紧!今年,剩者为王!最近开发的游戏是关于元末农民起义的游戏,里面的主角就是大家熟知的明朝开国皇帝——朱元璋,玩家所要做的操控朱元璋就是打败各路诸侯,最后建立明朝。听起来很不错是不是?但是就是个经营类游戏。因为原本的游戏框架就是专门针对经营养成类游戏开发出来,无论你怎么改、怎么换皮肤、换脚步,也只能开发出一个经营类游戏而已。说到朱元璋,我与他之间唯一的关系,应该就是我们都姓朱?不,好像不止,仔细想想,我差点成了他的“祖宗”。传闻朱元璋在建国之后,一度想认朱文公做祖先来着。在那个等级十分森严的封建社会来说,有个好出身、背景十分重要。如果你成功了,又没有一个好出身怎么办呢?有办法,那就是追认祖宗啊!什么?祖宗也能追认、乱认?当然能,而且这还是我中华民族的“传统美德”哩。那这个“美德”的始作俑者是谁呢?就是西周王室。司马迁的《史记》中记载了一段故事,说后稷的母亲姜原出门的时候看到了一个很大很大的脚印,她踩了上去,然后呢?然后居然就怀孕了!生下来的这个孩子就是后稷,后稷及其后代又继续繁衍,慢慢地就诞生了姬氏这一族来。后来武王伐纣,推翻了商朝,建立了周朝,定天子七庙的时候,就把后稷定位太祖。这就是中国可考的最早杜撰、追认祖先的例子,此后便一发不可收拾,后人频繁效仿,这祖宗也就越认越乱了。我去,这也太扯淡了吧。现代人会这么想,但是我们的古人可吃这一套哩。想想汉高祖刘邦,《史记.高祖本纪》中说他是她妈妈被一条龙趴在身上后,怀孕生下来的,所以他是真龙天子,当上皇帝那是上天的旨意。哈哈,刘邦父亲这绿帽戴的,还是龙给戴的,无可奈何,无可奈何啊。不过,朱元璋没认成。为什么呢?因为朱熹生活的年代离得太近了,种种证据都摆在那里,他们家也是世代农民,街坊领居也都在,自己父亲、爷爷的坟墓在哪里,兄弟姐妹是谁,大家都知道。说自己祖先是朱熹,骗谁呢,谁都骗不了,最后只好作罢。差一点,就差那么一点点,我朱熹就成了朱元璋的“祖先”,成为皇亲国戚了,以后就可以吹嘘我乃大明之祖,好不威风,可惜可惜了。“我说朱夫子,这半个月前提的需求,你改完没有啊!赶紧吧,下周就要上线发版本了,你怎么还磨磨蹭蹭的,我觉得你这里不行,要改一改,这里我觉得也不行……”,这个站在我眼前,一直说着“我觉得”、尖嘴猴腮的家伙,名叫王望,是这个项目的经理。此人是十分狗腿,除了跪舔老板、胡乱改需求、提需求之外,我看不出此人有何才能,对项目的推进有任何帮助,添堵倒是大大的有。天天把什么游戏模式创新、软件工程管理、设计模式挂在嘴边,其实他懂个屁游戏,懂个屁编程,懂个屁软件工程管理。现在挂在嘴边这些名词,是他报名参加一个什么速成培训班学来的,至于这些名词是什么意思,我估计他是搞不明白的,搞不明白没关系啊,说起来觉得很厉害、高大尚就是了。他不是软件工程科班出身,在进公司之前的也是和游戏毛关系没有,之前干什么的?二世祖呗,他唯一和游戏沾得到边的就是:他表哥是一家游戏公司的老板。而这个老板就是我老板。老板的姑妈觉得他继续鬼混下去不行,就拜托老板让他进公司工作工作,让他涨涨见识,有些事做。果然,二世祖的亲戚也是二世祖,祖传的二世祖,世祖基因很永久,一根永流传。进来就进来呗,偏偏是在我们这个项目成立不久后进来的,刚好项目经理刘斌要离职,老板让他进来跟着刘斌学习,两个月后刘斌离职,让他来接手。刘斌还在的时候,这个人还不敢太放肆,毕竟是新人,规规矩矩按照刘斌的指示来,项目的推进还是有条不紊的。后来刘斌离职了,他正式上位了,噩梦就开始了!天天觉得这不行那不行,什么玩法不创新啊,UI不够精致啊,然后各种胡乱提需求、改需求,导致项目组连续加班三个月了。有几个人受不了这鸟人就离职了,就我最耐扛,坚持到现在,没办法我就是这么勤勉耐劳,其实是我还有房贷、车贷要还,否则老子早就尥蹶子不干了。此人也是没礼貌、自来熟,喜欢给人取花名,不称名字、不称职位,说是这样可以让团队更加亲近亲近,氛围更好些,某个知名软件大企业就是这么做的,这叫企业文化,作为团队管理者,他率先表态,叫自己令狐冲。噗,你可能要笑,为什么这人要叫令狐冲呢?因为这样他就是得到风清扬真传的人了,必将带领我们团队横扫游戏武林!听到我名字后,就立马给我取了个“朱夫子”的外号,以后就不分场合地叫我“朱夫子”,上次去和合作方开会的时候就直接叫我这外号,搞得合作方一脸懵逼,最后会议上与会人员哄然大笑,搞得我很是尴尬。总着,遇到此人,我算是倒了八辈子霉运了。“嗯,好的,嗯,好,好,我会按照您说的改的,OK,OK,对,嗯,您说的很对,我会改的……”。我微笑虚心说到。你可能会诧异朱熹你不是很讨厌这个人吗?怎么对他如此跪舔。因为我深知如果你不答应这瘟神,随机而来的是更多的麻烦,你只要敢反驳,他会在你面前一直说下去,直到你屈服。其实他说什么,我也是左耳进右耳出的,每次他在我面前唧唧歪歪的时候,我都是用手机录音一下,他走后我再将语音转成文字来看他所说的事情,然后再来改改代码。由于有了这样一个不靠谱的头儿,我的代码也不敢把业务代码写的太死,没用的代码我也不敢删除,要么就放在那里不调用,要么就注释一下,反正老子就是不删,冗余就冗余呗。不是有代码版本和分支管理么,为什么要这样做呢?因为此人反复无常,今天说不要的功能明天可能又要了,什么分支、版本,你是应付不了这种变动的。我经常和我的同事开玩笑说我的软件有几百个配置、开关,一切换就可以变动到另外一个逻辑分支去。“吴道子,麻烦把那个新的图片素材上传到git仓库中,我待会加班要用。”我站起来和对面的设计美工小姐姐说到。吴道子?小姐姐?这又是什么鬼?这也是“令狐冲”王望整出来,他说这设计美工就是我们团队的画家,吴道子是我国古代的画圣,所以就给这小姐姐取了这个花名。莫名其妙,一个妙龄女子硬生生被叫成了一个老头子。一来二去,大家习惯了,也就这么叫起来了,这个小姐姐也是随和,居然丝毫不在意。加班改功能是痛苦的,慢慢长夜难熬,其他项目组的人都早就下班了,偌大的办公室只剩下我一个人。修改了五个多小时后,此时我已经意识模糊,头痛欲裂。我编译了一下代码,发现游戏没法运行了。我的天,什么鬼,不要这样啊,这还让不让人下班啦。没办法,只能慢慢调试了,一步两步,一步两步,是魔鬼的步伐,经过半个多小时后,我发现这不是我业务代码的问题,问题出在了游戏底层框架的代码的一个API逻辑判断上,这可怎么办啊,框架的代码我又不能动,别慌,山人自由妙计,我可以代码热替换啊,这样我就可以在不动框架代码的前提上,在软件运行时,动态替换掉对应的API,换成我自己修复好的API,这样运行也正常,底层代码又不用动,哈哈我真是个天才!好,就这样干!改完之后,我启动电脑上的虚拟机运行游戏试玩一下,一个过场动画后,突然游戏节目白屏了卡死了,不会吧,我又没有改到游戏渲染那一部分的代码,怎么就不行了,这个破框架,破轮子!时间已经到了凌晨四点半,这个时候回家睡觉,三个小时后又得挤公交换地铁过来上班了,然后又得上一天班,搞不好还得加班。想到这里我就气不打一处来,我愤怒了,我用我手指在命令行终端胡乱敲了一段字,然后用拳头狠狠砸中了键盘的回车键。突然办公室的灯忽明忽暗、不断闪烁着,最后灯都灭了,看来是跳闸了,我走去门边把电闸拉上,我回头一看,此时我的电脑显示器发出了刺目的白光,那光太亮了,亮到令人睁不开眼睛,我用左手遮挡着眼睛,慢慢显示器发出巨大的吸力,许多桌椅、杯子、书都被吸进去,仿佛背后有着一个力大无比的抽风机,到底怎么回事我不知道,我只知道我如果不紧紧抱紧这扇门就完蛋了!我死命地抱紧门,但是吸力真的是太大了,犹如那二十级台风的风力,我整个人居然就被吸得悬空了起来,手脱离了抓取物,整个人朝着显示器飞去。见鬼了噜,我命休矣!别人改代码顶多改出Bug来,大不了被炒,我这改代码改出了鬼,要命了!来不及我多想,我被吸入显示器中去了。“哎,头好疼!”我开始醒了过来,只觉头十分之疼,我用手揉了揉脑袋瓜,睁开眼睛,视线开始变得清晰,只看到了四周都是白茫茫的一片,看不到边,完了,我死了?早就听说有些程序员加班猝死的新闻,自己不以为然,好了吧,这下子自己“因公殉职”了吧。这里是天堂还是地狱?看着白茫茫的一片,不像是地狱,至少我看过的电视剧里的地狱不是这样的,所以这里是天堂?但是如果是天堂,那天使呢?上帝呢?不等我多想,不远处就传来了一个声音:“终于有人来了!”,这个人慢慢向我走来,随着距离越来越近,我总于看清他了,他就是公司游戏框架的作者——赢神。怎么,他也死了?而且和我一样,好事做多了,到了天堂?“赢神!你怎么在这里?这里是什么地方?我又为什么来到这里?我是不是已经死了?这里是天堂么?我能不能复活?”我急忙问到。“小伙子,你问题那么多,你希望我先回答那一个啊?”赢神笑道。“没事,是我紧张了,赢神你说”,都到了这了,我也只能寄希望于赢神的解答了。“这里是ReAngView框架的太虚幻境结界,是我在框架代码中埋的彩蛋,我写了个定时器判断,如果到了今天的凌晨四点半还有人在加班,并且动态篡改了框架的API,就会触发这个幻境结界,我本以为没人会到这里,没想到你来了。”赢神解释道。“那赢神你是怎么到这里的?你刚刚也在加班改代码,然后自己中了自己的彩蛋?”我反讽道。“非也,我从公司离职后,到另外一家大公司上班,本来以为是脱离地狱来到天堂,没想到是进入了另外一个大坑,加班不止,终于在一年后的加班中猝死了,在我灵魂弥留之际,我的意识遇到了程序之神——林纳斯,他看在我对于游戏编程如此执着,赋予我意识永生之力,并允许我复活一小时,编写我人生中最后一段代码,所以我就写下了ReAngView框架的太虚幻境结界这个彩蛋,并将自己的意识注入到框架之中,默默地守护着ReAngView框架的使用者们,期望有一天能有人来到这个游戏世界,这一等就是几年,等来了你。”“既然这里不是天堂,那我已经死了么?”,我连忙追问道。“哈哈,没有,你还没有死,你只是刚好触发了这个彩蛋,被卷入了游戏之中了,只要你完成游戏任务,通关了自然就可以离开这个结界。”赢神笑着对我说。“那如果通不了关呢?”我急忙问道。“在游戏开始后的四十年游戏时间内,如果通不了关,那么你将”“会怎样,困在这里?”我打断了赢神的话,插嘴道。“boy,你想多了,不是困在这里,而是你在现实世界的身体将会死去,也就是你们说的猝死”。什么!居然要通关游戏,才能离开这个鬼地方,不通关,太久还会死!!!问题是这个游戏自从被王望接手后,便改得十分的困难,说什么我们要玩法创新,要面向高玩、硬核玩家,难一点才能吸引玩家充钱啊。当初没在意,反正玩的人有不是我自己,开发而已嘛,管他呢,好了,这下好了,受苦受难的第一人就是自己!果然出来混,迟早是要还的。“好了,很快游戏就要启动了,我不能久留了,祝你好运,boy”,看着赢神开始变得虚空起来,我急了,“别啊!”我急忙想抓住他的手,可是我没能抓得到,随继他就完成一堆0101幻化在空气之中,渐渐消失了。“游戏要开始了哟,请玩家做好准备。”这声音我很熟悉,因为这段声音就是我前几天录制吴道子小姐姐那甜美的声音,用来做游戏进入时的过场音频的。怎么办?怎么办?游戏马上就要开始了,王望那家伙魔改后的变态游戏,赢神你好歹也给我点装备啊,我这种非酋,拿什么通关啊!“5!4!3!2!1!0!游戏开始!”咦,怎么没动静,莫非是游戏启动失败了?我四处张望,没有什么变化啊,感觉脚下有点奇怪,低头一看,呵呵,地面没了,我整个人开始从空中坠落,原来我刚才是在这游戏的天堂上啊!上帝啊,不,赢神啊,林纳斯大神啊,保佑我至少掉到水里吧,掉到山上的石头上我可就完蛋了,丢落速度越来越快,本来就胆小的我昏厥了过去,等待着我的是什么?死亡?狗命?还是通关?

January 27, 2019 · 1 min · jiezi

学习 PixiJS — 粒子效果

你如何创造火,烟,魔法和爆炸等效果?你制作了许多小精灵,几十,几百,甚至上千个精灵。然后对这些精灵应用一些物理效果,使它们的行为类似于你尝试模拟的元素。你还必须给他们一些关于它们应该如何出现和消失以及应该形成什么样的模式的规则。这些微小的精灵被称为粒子。你可以使用它们为游戏制作各种特效。使用 Dust 库PIXI 没有内置的制作粒子效果的功能,但你可以使用一个名为 Dust 的轻量级的库来制作它们。注意:Dust 是一种快速简便的方法,可以制作游戏所需的大部分粒子效果,但如果你需要功能更全面,更复杂的库,请查看 Proton 使用 Dust 库和使用 SpriteUtilities 库是一样的。首先直接用 script 标签,引入 js 文件<script src=“https://www.kkkk1000.com/js/dust.js"></script>然后创建它的实例d = new Dust(PIXI);变量 d 现在就代表 Dust 实例。接下来,在游戏循环中调用 Dust 的 update 方法,这个方法用于更新粒子。我们在上篇文章中制作的示例中有 gameLoop 和 play 两个函数 ,你可以在这两个函数中执行此操作。建议在 gameLoop 中执行此操作,就在调用 state 函数之后但在渲染阶段之前,如下所示:function gameLoop(){ requestAnimationFrame(gameLoop); state(); d.update(); renderer.render(stage);}制作粒子制作粒子需要用到 Dust 库的 create 方法 参数:名称类型默认值描述xnumber0粒子出现的 x 坐标ynumber0粒子出现的 y 坐标spriteFunctionfunction 一个函数,它返回要用于每个粒子的精灵,如果提供具有多个帧的精灵,Dust 将随机显示不同帧containerobject一个 PIXI 容器要添加粒子的容器numberOfParticlesnumber20要创建的粒子数gravitynumber0重力randomSpacingbooleantrue随机间隔minAnglenumber0最小角度maxAnglenumber6.28最大角度minSizenumber4最小尺寸maxSizenumber16最大尺寸minSpeednumber0.3最小速度maxSpeednumber3最大速度minScaleSpeednumber0.01最小比例速度maxScaleSpeednumber0.05最大比例速度minAlphaSpeednumber0.02最小alpha速度maxAlphaSpeednumber0.02最大alpha速度minRotationSpeednumber0.01最小旋转速度maxRotationSpeednumber0.03最大旋转速度返回值:返回一个数组,其中包含对用作粒子的所有精灵的引用,如果需要进行碰撞检测等原因必须访问它们,这可能很有用。现在我们来试试这个方法。示例代码:<!doctype html><html lang=“zn”><head> <meta charset=“UTF-8”></head><body> <div id=“px-render”></div> <script src=“https://cdnjs.cloudflare.com/ajax/libs/pixi.js/4.8.2/pixi.min.js"></script> <script src=“https://www.kkkk1000.com/js/spriteUtilities.js"></script> <script src=“https://www.kkkk1000.com/js/dust.js"></script> <script> //创建一个 Pixi应用 需要的一些参数 let option = { width: 400, height: 300, transparent: true, } //创建一个 Pixi应用 let app = new PIXI.Application(option); //获取舞台 let stage = app.stage; //获取渲染器 let renderer = app.renderer; let playground = document.getElementById(‘px-render’); //把 Pixi 创建的 canvas 添加到页面上 playground.appendChild(renderer.view); let su = new SpriteUtilities(PIXI); let d = new Dust(PIXI); //需要加载的图片的地址 let imgURL = “https://www.kkkk1000.com/images/learnPixiJS-ParticleEffects/star.png"; //加载图像,加载完成后执行setup函数 PIXI.loader.add(imgURL).load(setup); function setup() { stars = d.create( 128, //x 起始坐标 128, //y 起始坐标 () => su.sprite(imgURL), //返回要用于每个粒子的精灵 stage, //粒子的容器 50, //粒子数 0,//重力 false,//随机间隔 0, 6.28,//最小/最大角度 30, 90,//最小/最大尺寸 1, 3//最小/最大速度 ); //开始游戏循环 gameLoop(); } function gameLoop() { requestAnimationFrame(gameLoop); d.update(); renderer.render(stage); } </script></body></html>查看效果使用 ParticleContainer在前面的示例代码中,我们创建的粒子都被添加到根容器(第四个参数)。但是,你可以将粒子添加到任何你喜欢的容器或任何其他精灵。PIXI 有一个叫 ParticleContainer 的方法,任何在 ParticleContainer 里的精灵都会比在一个普通的 Container 的渲染速度快2到5倍。到这里可以了解 ParticleContainer 如果要对粒子使用 ParticleContainer,只需在 create 方法的第四个参数中添加要使用的 ParticleContainer 对象的名称。以下是修改前面的示例代码以将粒子添加到名为 starContainer 的 ParticleContainer 的方法。//创建ParticleContainer并将其添加到stagelet starContainer = new PIXI.particle.ParticleContainer( 1500, { alpha: true, scale: true, rotation: true, uvs: true });stage.addChild(starContainer);function setup() { //创建星形粒子并将它们添加到starContainer stars = d.create( 128, //x 起始坐标 128, //y 起始坐标 () => su.sprite(imgURL), starContainer, //粒子的容器 50, //粒子数 0,//重力 false,//随机间隔 0, 6.28,//最小/最大角度 30, 90,//最小/最大尺寸 1, 3//最小/最大速度 ); //开始游戏循环 gameLoop();}查看效果 ParticleContainers 针对推送数千个精灵进行了优化,因此,除非你为很多粒子设置动画,否则你可能不会注意到对于使用普通 Container 对象的性能提升。使用粒子发射器create 方法会产生一次粒子爆发,但通常你必须产生连续的粒子流。你可以在粒子发射器的帮助下完成此操作。粒子发射器以固定的间隔产生粒子以产生流效果,你可以使用 Dust 的 emitter 方法创建一个粒子发射器。发射器具有 play 和 stop 方法,可让打开和关闭粒子流,并可以定义粒子的创建间隔。下面的代码是使用 Dust 的 emitter 方法的一般格式。它需要两个参数。第一个参数是创建粒子间隔(以毫秒为单位)。第二个参数与我们在前面的示例中使用的 create 方法相同。let particleStream = d.emitter( 100, () => d.create(););任何100毫秒或更短的间隔值将使颗粒看起来以连续流的形式流动。这里有一些产生星形喷泉效果的代码。let particleStream = d.emitter( 100, () => d.create( 128, 128, () => su.sprite(imgURL), stage, 30, 0.1, false, 3.14, 6.28, 30, 60, 1, 5 ) );第六个参数,0.1,是重力。将重力设置为更高的数字,粒子将更快的下落。角度介于3.14和6.28之间。这使得粒子出现在其原点之上的半月形大小的角度内。下图说明了如何定义该角度。星星在中心原点处创建,然后在圆圈的上半部分向上飞出。然而,星星在重力的作用下,最终将落在画布的底部,这就是产生星形喷泉效果的原因。你可以使用 emitter 的 play 和 stop 方法在代码中随时打开或关闭粒子流,如下所示:particleStream.play();particleStream.stop();效果图:完整代码:<!doctype html><html lang=“zn”><head> <meta charset=“UTF-8”></head><body> <div id=“px-render”></div> <script src=“https://cdnjs.cloudflare.com/ajax/libs/pixi.js/4.8.2/pixi.min.js"></script> <script src=“https://www.kkkk1000.com/js/spriteUtilities.js"></script> <script src=“https://www.kkkk1000.com/js/dust.js"></script> <script> //创建一个 Pixi应用 需要的一些参数 let option = { width: 400, height: 300, transparent: true, } //创建一个 Pixi应用 let app = new PIXI.Application(option); //获取舞台 let stage = app.stage; //获取渲染器 let renderer = app.renderer; let playground = document.getElementById(‘px-render’); //把 Pixi 创建的 canvas 添加到页面上 playground.appendChild(renderer.view); let su = new SpriteUtilities(PIXI); let d = new Dust(PIXI); let particleStream; //需要加载的图片的地址 let imgURL = “https://www.kkkk1000.com/images/learnPixiJS-ParticleEffects/star.png"; //加载图像,加载完成后执行setup函数 PIXI.loader.add(imgURL).load(setup); function setup() { let particleStream = d.emitter( 100, () => d.create( 128, 128, () => su.sprite(imgURL), stage, 30, 0.1, false, 3.14, 6.28, 30, 60, 1, 5 ) ); particleStream.play(); //开始游戏循环 gameLoop(); } function gameLoop() { requestAnimationFrame(gameLoop); d.update(); renderer.render(stage); } </script></body></html>查看效果上一篇 学习 PixiJS — 精灵状态 ...

January 22, 2019 · 2 min · jiezi

学习 PixiJS — 精灵状态

精灵状态如果你有复杂的游戏角色或交互式对象,你可能希望该角色根据游戏环境中发生的情况,以不同的方式运行。每个单独的行为称为状态。如果你在精灵上定义状态,那么只要游戏中出现与该状态相对应的事件,就可以触发这些状态。比如,通过键盘的方向键控制一个游戏角色时,按下左箭头,角色就向左移动,其实可以理解为,按下左键头时,触发了角色的向左移动的状态。如果要开始使用精灵状态,首先需要一个状态播放器。状态播放器用于控制精灵状态。Pixi 精灵没有自己的状态播放器,但你可以使用 SpriteUtilities 库中的 sprite 的方法,该方法将创建一个内置状态播放器的精灵。 SpriteUtilities 库的使用上一篇提到过了,可以看 学习 PixiJS — 动画精灵 这篇文章。sprite定义:使用 sprite 函数制作任何类型的 Pixi 精灵。用法:let anySprite = su.sprite(frameTextures, xPosition, yPosition);参数:第一个参数 frameTextures 可以是以下任何一个:一个 PNG 图像字符串一个Pixi 纹理对象纹理图集帧 id 数组一个 PNG 图像字符串的数组一个 Pixi 纹理对象数组如果你为 sprite 方法提供一个数组,它将返回一个动画精灵,这个动画精灵会内置了一个状态播放器。状态播放器只是四个新属性和方法的集合,用于控制精灵动画状态。fps:用于设置精确的动画速度的属性,以每秒帧数为单位。它的默认值是12,fps 与游戏循环 fps 无关,这意味着你可以让精灵动画以独立于游戏或应用程序速度的速度播放。playAnimation:一种播放精灵动画的方法。如果要播放帧的子集,就传入开始帧编号和结束帧编号两个参数。默认情况下,动画将循环播放,除非你将精灵的 loop 属性值设置为 false 。stopAnimation:一种在当前帧停止精灵动画的方法。show:接受参数是一个数字,用来显示特定帧编号的方法。第二个参数 xPosition 和 第三个参数 yPosition 表示创建的精灵的 x 和 y 坐标。什么是精灵状态?下图是一个游戏角色的 PNG 图像,其中包含使角色看起来像是在四个不同方向行走所需的所有帧。这个雪碧图中实际上有八个精灵状态:四个静态状态和四个动画状态。让我们看看这些状态是什么以及如何定义它们。静态状态精灵的静态状态定义精灵在不移动时的四个位置。这些状态是:down, left, right,和up。下图显示了雪碧图上的状态以及标识这些状态的帧号。可以看到第0帧是向下状态,第4帧是左侧状态,第8帧是右侧状态,第12帧是向上状态。怎么定义这些状态呢?首先,创建精灵,以下代码展示了如何使用 sprite 方法创建精灵。let frames = su.filmstrip(“images/adventuress.png”, 32, 32);let adventuress = su.sprite(frames);接下来,在精灵上创建一个名为 states 的对象字面量属性。并在 states 对象中创建down,left,right,和up 的键。将每个键的值设置为与状态对应的帧编号。adventuress.states = { down: 0, left: 4, right: 8, up: 12};接下来就是使用精灵的 show 方法来显示正确的状态。例如,以下代码展示如何显示精灵的 left 状态:adventuress.show(adventuress.states.left);下图显示了改变这些状态对精灵外观的影响。你在可以在任何你需要的地方使用它,让精灵对游戏世界的变化作出反应。比较常见的一个场景是在键盘按键的时候,这样你就可以通过箭头键的方向改变精灵面向的方向。例如,按下左箭头键时,你可以通过以下方式将精灵转向左侧。//左箭头按下left.press = () => { //显示left状态 adventuress.show(adventuress.states.left);};只需对其余的箭头键使用相同的格式,就可以使精灵面向所有的四个方向。动画状态精灵的动画状态定义了精灵移动时的四个动作序列。这些状态是:walkDown,walkLeft,walkRight,和walkUp 。下图显示了这些状态在雪碧图上的位置。这些状态中的每一个由四个帧组成,当在循环中播放时,将创建连续的步行动画。要定义每个动画状态,就在 states 对象中创建描述该状态的键。键的值应该是一个包含两个元素的数组:起始帧编号和结束帧编号。例如,以下是如何定义 walkLeft 状态://3是动画序列 开始的帧编号,5是结束的帧编号walkLeft: [3, 5]以下是如何将这四种新动画状态添加到 adventuress 精灵中:adventuress.states = { down: 0, left: 4, right: 8, up: 12, walkDown: [0, 3], walkLeft: [4, 7], walkRight: [8, 11], walkUp: [12, 15]};现在它的状态都被定义了,让我们做一个会走的精灵。 把制作动画精灵和定义状态还有键盘响应所学到的知识相结合,就可以制作一个步行游戏角色。查看效果如果希望精灵在屏幕上移动得更快或更慢,就在箭头键方法中更改 vx 和 vy 的值。如果希望精灵的步行动画效果更快或更慢,就更改精灵的 fps 属性。制作动画帧的工具使用 Adobe Illustrator 或 Photoshop 手动绘制每个帧。Flash Professional 只需将动画导出为雪碧图,就可以在 JavaScript 游戏中使用它。你还可以使用 Shoebox 等工具将 Flash 的 SWF 文件格式转换为纹理图集。Piskel 是一个免费的在线工具,用于制作像素风格的动画游戏角色。Dragon Bones,Spine,和 Creature。这三个工具都非常相似。它们可以创建复杂的游戏角色,为它们设置动画,并将它们导出为雪碧图和 JSON 文件。Shoebox 是一款基于Adobe Air 的免费应用程序,它的功能挺多,比如可以用来制作雪碧图,也可以拆分雪碧图,还可以检测透明图像中的精灵并将其剪切出来 等。上一篇 学习 PixiJS — 动画精灵 ...

January 19, 2019 · 1 min · jiezi

想玩DApp,没有钱包账户怎么行?—— ETH钱包

*作者:DD君欢迎添加作者微信 btcbtc555 与他进行交流!未经授权禁止转载!*MetaMask是一款在谷歌浏览器Chrome上使用的插件类型的ETH钱包。该钱包不需要下载,只需要添加对应的扩展程序即可。非常轻量级,使用起来也非常方便。本文以MetaMask为例,手把手教大家创建ETH账户,让您玩转整个ETH生态。ETH账户创建教程进入谷歌商店,搜索MetaMask,选择“添加至Chrome”。选择后弹出如下窗口,选择“添加扩展程序”。若跳转到此页面,并且右上角出现小狐狸图标,则安装成功。点击小狐狸图标,在弹窗中选择"CONTINUE"。在这个页面创建MetaMask登录密码(不少于8位),密码输入完成后点击“CREATE”。进入如下页面后,可以注意到左上角有一个圆形图案,是通过相应算法系统生成,每一个账户,对应的图案都不相同。此后会有三个默认选项,可以直接选择"NEXT"或“ACCEPT”。一系列默认选项后,进入如下页面,灰色区域为助记词位置,点击“CLICK HERE TO REVEAL SECRET WORDS”显示助记词。MetaMask会默认为用户创建12个英文助记词,这些助记词一定要保存好。我们所有的私钥-公钥-地址都由该助记词创建。建议大家可以拿本子记好,以防丢失。备份好后,点击“NEXT”,依次选择助记词的顺序,完成后点击“COMFIRM”。完成后点击“VIEW ACCOUNT”,MetaMask主界面如下:点击右上方图标,可以建立新的账户。输入账户名字后,点击“CREATE”,便创建了一个新的账户。在主界面中点击“…”,即可了解账户详情点击过后,您可查看您的账户地址。点击上图下方“EXPORT PRIVATTE KEY”,进入如下界面,输入您初始设置的登陆密码(步骤5),即可查看您的私钥。您的钱包已经创建好,打开任意您想玩的ETH游戏,勾选二者默认绑定选项,即可体验该游戏。你有哪些感兴趣的DApp?欢迎留言回复下一次讨论的,也许就是它。

January 17, 2019 · 1 min · jiezi

0xUniverse : 除了脚下的土地,我们还拥有广阔的星空。

作者:DD君欢迎添加作者微信 btcbtc555 与他进行交流!未经授权禁止转载!近期在DappDiscover的榜单中,一款名为0xUniverse(以太星际)的游戏,成功的吸引了小编的注意。自其上线以来,无论其日活还是交易量都保持着良性发展趋势。即使现在整体市场行情疲软,没有新用户入场,0xUniverse的日活每天仍可达到200左右。目前除了头部几个区块链游戏或以新的概念,或者是新的玩法能吸引用户,使其日活可以突破1000,其余游戏的日活简直惨不忍睹。就连老牌游戏Cryptokitties的日活现在也只能维持在300左右,所以0xUniverse的质量还是可以的。本篇内容,小编将带你走近0xUniverse,探索区块链上的星际宇宙。开发公司0xUniverse是由一家成立于2017年12月的区块链游戏开发工作室0xGames 开发。核心开发人员均有超10年的游戏开发经验,团队成员致力于打造一个区块链上的星际宇宙。0xGames目前已开发出三款区块链游戏,市场反应良好,0xUniverse是该工作室最先开发出的游戏。游戏背景0xUniverse官方设定的时间背景是在22世纪。彼时星际旅行,成为了人人可以实现的现实,每一位玩家,都是星际中的发现者。游戏中,玩家需要购买星球来生产资源,然后利用星球上的知识和人口来发明和打造飞船,最后通过发射飞船进行星球殖民。玩家可以在殖民过程中发现并获得新星球。新星球可以在游戏交易市场上出售获利。官方设定星球以太星际中,星球是最有价值的资产。每颗星球都用独特的外观和性质:序号,发现日,名字,拥有者,品质(普通,稀有,史诗或传说)。其中,品质越高,星球价值越大。跟星球的分类一样,星球上的资源也被分为普通,稀有,史诗和传说等级,你需要这些资源来发明飞船和打造飞船。此外,每颗传说的等级的星球都有自己的故事,只有星球的拥有者才能看到。星际整个星际被划分为1,000个扇区(25 x 40)。每个扇区平均拥有1,000颗合适殖民的星球,以太星际中最多共有1,000,000颗星球,由区块链智能合约限定,永不增发。地球联合政府地球联合政府设定的目的是维护秩序,此外政府还主张拍卖,并且会对每一笔交易都会收取5%的税收。星球拍卖此游戏中星球可以自由交易,任何人都可以在拍卖行中买卖星球。想要出售星球,你只需点击星球下面的出售,然后设定拍卖时间,初始价格和最终价格即可。注意:拍卖期间, 该星球上的资源将无法被使用。也就是说如果你想要使用资源,那么你必须把拍卖取消掉。世界观故事玩家能够在传说等级的星球上找到以太星际的世界观故事,随着每一部分故事片段的发现,你都能离揭开整个星际故事更进一步。故事讲述了在人类之前定居星际的其他种族的发展。此外,坚持到底的探索者将能发现生命起源的秘密以及通往最珍贵星球的道路。新手教程注册和其它以太坊上的DApp一样,加入以太星际,需要浏览器和MetaMask插件,谷歌浏览器和火狐浏览器均可。安装该插件后,创建钱包即可。完成以上操作后,你就可以开始注册,启动游戏并打开用户窗口,输入邮箱地址和昵称。接下来在MetaMask的弹窗中阅读并同意隐私条款并点击注册按钮即可。购买星球注册游戏后,你需要做的第一件事就是拥有一颗星球。购买星球既可以通过右上角的星球图标也可以通过点击扇区,查看当前扇区在出售的星球。不同级别的星球具有不同的资源产出,资源用于制造飞船。打造飞船拥有星球之后,你可以开始打造飞船。但首先你需要发明飞船。打开我的飞船页面,你会看到知识的累计进度。知识由星球居民创造,是发明飞船的必要条件。(1个人每个小时可以产生1点知识)。也就是说拥有的星球数量越多,居民越多,你能发明的飞船也就越多。而发明的飞船越多,你就越有可能获得高级飞船。发现新星球发明飞船后, 你可以打造并派遣飞船搜寻新的星球。如果远征成功,那么你会发现一颗新星球。如果失败,你将失去飞船。小提示远征成功与否取决于飞船的性能和发射地球星所处的扇区。发射地所处扇区的星球越少,发现新星球的概率越大。飞船都是从自己的星球上发射,来发现自己星球所在扇区和周围扇区的星球。通过地图可以发现,扇区的颜色大致可以分为暖色调和冷色调两种,颜色越亮代表这个扇区已经被发现的星球越多,颜色越暗代表这个扇区已经被发现的星球越少。所以在买星球时,尽量买颜色暗的扇区的星球,这样你有更大的概率发现其他的星球。总结0xUnivers这款游戏的玩法设定以及画面在区块链游戏中都算中上乘,但和传统游戏相比仍然有一定的差距。虽然由于大家都知道的一些原因,游戏中完成支付后需要经过一段延迟后才能确认成功,但是还是在一般玩家的可容忍范围内。自上线以来,0xUnivers一度占据以太游戏排行榜前五。同以太猫一样,它的每颗星球都是ERC721 Token。这也意味着每个着星球都是独一无二、不可替代的。同时,由于星球的数量是有限的,所以随着时间的流逝,新的星球会越来越来难找到,后续星球的价值肯定也会越来越高,这款游戏还是值得一试的。你有哪些感兴趣的DApp?欢迎留言回复下一次讨论的,也许就是它。

January 16, 2019 · 1 min · jiezi

如何通过服务端控制游戏逻辑

在如何开发答题对战小游戏中给大家展示了对战开发的基础结构:拥有多个房间类型的游戏,每个房间有两个玩家的情况下,游戏过程中玩家之间的通信均通过 LeanCloud Play 实时对战转发。游戏中,我们还使用了 MasterClient ,作为一个裁判或上帝视角的角色,用于出题及判断每个玩家的分数。Play 实时对战默认房间的创建者为 MasterClient,也就是说,创建房间的 Client 会有两种身份,一个是普通的玩家,另一个是 MasterClient 裁判角色。MasterClient 除了在答题小游戏中出题之外,还可以在卡牌类游戏中洗牌、控制刷怪的时机或等级、判断游戏胜负等等。它掌握着房间内整个游戏逻辑。既然 MasterClient 是个这么重要的角色,那么我们把他放在客户端就会有一个重要问题:安全隐患。例如客户端的代码被破解之后,MasterClient 身份的玩家可以篡改游戏数据,指定本该输掉的人胜利等。为了解决这个问题,我们把控制游戏逻辑的 MasterClient 从客户端移到服务端,这样从客户端就拿不到游戏逻辑代码,进而也无法控制游戏逻辑。我们把每个房间的 MasterClient 托管在一个叫 Client Engine 的后端服务上,MasterClient 在 Client Engine 中通过实时对战后端服务和客户端进行交互。产生了新的架构:这里 Client Engine 和实时对战云都是 LeanCloud 的服务,同在 LeanCloud 的后端内网中。实战开发目标 Demo下面我们感受下如何基于这种架构开发小游戏,在这次分享中我们的目标是开发一个剪刀石头布对战小游戏。你可以用两个浏览器打开这个页面,感受下整个小游戏。在这个小游戏中,两个客户端点击「快速开始」,进入到同一个房间内,游戏开始后进行猜拳,一轮猜拳后判断胜负,游戏结束。游戏逻辑我们把游戏逻辑拆解为以下步骤:1.进入房间:客户端点击「快速开始」时,MasterClient 及玩家客户端 A 和 B 进入同一房间2.双方开始游戏:玩家 A 选择手势玩家 B 界面展示:对方已选择玩家 B 选择手势玩家 A 界面展示:对方已选择玩家 A 及 B 的界面展示结果3.游戏结束,双方离开房间,房间销毁。服务和语言1.服务选择:选择已经搭建好的后端服务 LeanCloud Play,不需要我们再自己去搭建后端整体架构。服务端逻辑控制:Client Engine游戏内通信:实时对战服务2.语言选择:JavaScript(这样我们一个人就能搞定前端和后端的代码)明确服务端及客户端的分工服务端:托管 MasterClient 代码,控制游戏逻辑。客户端:根据情况展示 UI准备项目框架服务端 Client Engine 初始项目客户端项目游戏逻辑开发下面我们进入写代码的模块。进入房间客户端点击「快速开始」时,MasterClient 及玩家客户端 A 和 B 进入同一房间Client Engine 服务端:维护 MasterClient 并创建房间,下发 roomName 给客户端客户端:加入服务端创建的房间中我们先看一下 Client Engine 中的逻辑:Client Engine 负责维护 MasterClient 并创建房间,通过一个名为 /reservation 的自定义 API 接口为客户端提供 roomName,在这个接口中我们实现逻辑「快速开始」。「快速开始」中创建房间的功能是使用 Client Engine SDK 中的 GameManager 来实现的。在 Client Engine 中,我们使用到的 Client Engine SDK 提供以下两个组件。Game:每个房间对应一个 Game 实例,Client Engine 中有 N 个 Game。GameManager:GameManager 负责创建、管理、销毁 Game。我们只需要根据情况组合这两个组件的功能就可以实现自己的需求。接下来我们写「快速开始」的逻辑:随机为客户端找到一个房间,如果没有空房间,就创建一个新房间。import { Game, GameManager, ICreateGameOptions } from “@leancloud/client-engine”; export default class Reception<T extends Game> extends GameManager<T> { public async makeReservation(playerId: string) { let game: T; const availableGames = this.getAvailableGames(); if (availableGames.length > 0) { game = availableGames[0]; this.reserveSeats(game, playerId); } else { game = await this.createGame(playerId); } return game.room.name; } }在这段代码中,我们创建了一个 Reception 类继承自 GameManager 来管理 Game。在这个类中,我们写了一个 public 方法 makeReservation 实现「快速开始」:首先调用 GameManager 自身的 getAvailableGames() 方法查看有没有可用的空房间,如果有,就取第一个空房间,返回 roomName ;如果没有空房间,则使用 GameManager 的 createGame() 方法创建一个新房间,返回新房间的 roomName。从上面的代码中我们还可以看到,Reception 管理了一个 T 类型的 Game 对象,因此我们还需要为 Reception 准备 Game。下面我们继续自定义一个自己的 Game :import { Game } from “@leancloud/client-engine”;import { Event, Play, Room } from “@leancloud/play”;export default class RPSGame extends Game { constructor(room: Room, masterClient: Play) { super(room, masterClient); }}在这段代码中,我们自定义了一个名为 RPSGame 的类继承自 Game,之后会在 RPSGame 中撰写房间内的游戏逻辑,在这里我们先简单的将这个类构造出来。接下来我们把这个类给到 Reception,让 Reception 来管理这个类。import PRSGame from “./rps-game”;const reception = new Reception( PRSGame, APP_ID, APP_KEY, {concurrency: 2});在这段代码中,我们创建了一个 reception 对象,在创建对象的第一个参数中,我们传入了刚才创建的 RPSGame,这样 Reception 就可以管理 RPSGame 了,到现在为止「快速开始」的逻辑就可以跑起来了。下面我们写一个 API 接口来提供「快速开始」功能:app.post("/reservation", async (req, res, next) => { try { const {playerId} = req.body as {playerId: any}; // 调用我们在 Reception 类中准备好的 makeReservation() 方法 const roomName = await reception.makeReservation(playerId); return res.json({roomName}); } catch (error) { next(error); }}到这里,服务端「快速开始」就准备好了,当客户端调用该 /reservation 接口时,服务端会执行快速开始的逻辑,给客户端随便返回一个有空位的房间。客户端调用 /reservation 的示例代码如下:// 向 Client Engine 请求快速开始。// 这里通过 HTTP 调用在 Client Engine 中实现的 /reservation 接口const { roomName } = await (await fetch( ${CLIENT_ENGINE_SERVER}/reservation, { method: “POST”, headers: {“Content-Type”: “application/json”}, body: JSON.stringify({ playerId: play.userId }) } )).json(); // 加入房间return play.joinRoom(roomName);当客户端 A 和 客户端 B 都运行加入房间的代码,进入同一个房间后,就可以开始游戏了,接下来是实现房间内的逻辑。自定义游戏逻辑限定房间人数export default class RPSGame extends Game { public static defaultSeatCount = 2;}在这段代码中,我们给 RPSGame 设定一个静态属性 defaultSeatCount = 2,当房间玩家数量为两个人时,GameManager 会认为房间已满,不再是可用房间;GameManager 管理的 MasterClient 向实时对战服务请求创建新房间时,也会以这里的数量为标准,限定房间最大玩家数量是 2 个人,满 2 个人时不得有新玩家再加入房间。房间人满,广播游戏开始当房间内的玩家数量等于 defaultSeatCount 时,我们可以通过以下代码来监听房间人满事件:@watchRoomFull()export default class RPSGame extends Game { public static defaultSeatCount = 2; constructor(room: Room, masterClient: Play) { super(room, masterClient); // 游戏创建后立刻监听房间人满事件 this.once(AutomaticGameEvent.ROOM_FULL, this.start); } protected start = async () => { // 标记房间不再可加入 this.masterClient.setRoomOpened(false); // 向客户端广播游戏开始事件 this.broadcast(“game-start”); …… }}在这段代码中,@watchRoomFull 装饰器会让 Game 在人满时抛出 ROOM_FULL 事件,我们在 constructor() 方法中监听到这个事件后,调用了自己的 start 方法。在 start 方法中,我们将房间关闭,然后向客户端广播 game-start 事件,客户端收到这个事件后,在界面上展示:游戏开始。双方开始游戏我们再看一下双方游戏的逻辑:玩家 A 选择手势玩家 B 界面展示:对方已选择玩家 B 选择手势玩家 A 界面展示:对方已选择玩家 A 及 B 的界面展示结果将游戏逻辑对应到开发逻辑上,过程如下图所示:从图中可以看到,这里涉及到三方:客户端 A 、客户端 B、处在 Client Engine 中的 MasterClient。当客户端 A 出拳时,发送一个名为 play 的事件给 MasterClient,MasterClient 接收事件后,记录下来客户端 A 的选项,然后抹掉选项数据将事件转发给客户端 B,这样客户端 B 只知道客户端 A 出拳,但是并不知道具体手势是什么。接着客户端 B 出拳发送 play 事件,MasterClient 转发给客户端 A。这时 MasterClient 发现双方都已经出拳了,判定游戏结果,并通过广播 game-over 事件通知双方客户端游戏结束。首先我们看一下客户端 A 的出拳代码:play.sendEvent(“play”, {index}, {receiverGroup: ReceiverGroup.MasterClient});在这段代码中,客户端 A 使用实时对战 SDK 发送了 play 事件,在事件中附带了手势数据 {index},指定这个事件的接收对象为 MasterClient。处在 Client Engine 中的 MasterClient 收到 play 事件后转发事件给客户端 B:this.masterClient.on(Event.CUSTOM_EVENT, event => { const eventId = event.eventId; if (eventId === ‘play’) { this.forwardToTheRests(event, (eventData) => {}); }});在这段代码中,我们使用了 SDK 中 Game 提供的 forwardToTheRests() 方法,这个方法会转发事件给房间内其他人,第一个参数是原始事件 event,在第二个参数中,我们修改了原始 event 中的数据,将 eventData 设置为了空数据,这样客户端 B 收到事件时无法知道具体的手势信息。当客户端 B 收到事件后,就可以在界面上展示:对方已选择。相关代码如下:play.on(Event.CUSTOM_EVENT, ({ eventId, eventData, senderId }) => { const eventId = event.eventId; if (eventId === ‘play’) { //这里写客户端 UI 展示的代码 }});接着游戏逻辑是,客户端 B 选择手势,MasterClient 转发手势给客户端 A,这里的逻辑和上面的一样,不再赘述,我们直接跳到判断游戏胜负并广播游戏结束。相关代码如下:this.masterClient.on(Event.CUSTOM_EVENT, event => { const eventId = event.eventId; if (eventId === ‘play’) { …… if (answerArray.length === 2) { const winner = this.getWinner(answerArray); this.broadcast(“game-over”, {winnerId: winner.userId}); } }});在这段代码中可以看到,每次 MasterClient 收到 play 事件时,都会保存玩家的手势,当发现两个玩家都出拳后,根据两个玩家的出拳结果判断胜负,然后广播 game-over 事件,在 game-over 事件中告诉所有人胜负。客户端收到 game-over 事件后,在界面上展示游戏结束。客户端相关代码如下:play.on(Event.CUSTOM_EVENT, ({ eventId, eventData, senderId }) => { const eventId = event.eventId; if (eventId === ‘play’) { …… } if (eventId === ‘game-over’) { //展示游戏结束 }});离开房间当两个客户端都离开房间后,房间会被 GameManager 自动销毁,不需要我们再写额外的代码。总结在本次分享中,我们把负责游戏逻辑的 MasterClient 放在服务端来保证安全性。MasterClient 被托管到 Client Engine 中,通过实时对战后端云与同房间内的客户端传递消息,保证游戏正常运行。参考资料如果你希望有更详细的资料来帮助你一步一步开发猜拳小游戏,或更进一步了解 Client Engine,可以参考以下文档Client Engine 快速入门你的第一个 Client Engine 小游戏上期分享补充增加倒计时可以自己尝试为剪刀石头布游戏增加倒计时功能,例如某个客户端在限定时间内没有做出选择,则输掉本局比赛。RxJS如果希望对事件有更好的代码组织方式,可以学习下 RxJS。Q & A1.Client Engine SDK 和 Play SDK 有什么不一样?Play SDK 指的是实时对战 SDK,玩家客户端和处在 Client Engine 中的 MasterClient 都要使用这个 SDK 与实时对战服务交互,进而互相传递消息。为了方便大家撰写 Client Engine 中的代码,Client Engine SDK 提供了两方面的功能:对 Play SDK 更进一步的封装,提供了作为 MasterClient 便利的方法:广播、转发消息等。额外提供了 GameManager 及 Game,方便对多个房间进行管理。2.使用 Client Engine 开发游戏逻辑,和在客户端开发游戏逻辑相比,各自有什么优缺点。在一开始的时候有讲到,将代码放到 Client Engine 中会更安全,避免客户端被破解,进而篡改游戏逻辑。可能有的同学认为有一个缺点是需要部署并运维服务端,但 Client Engine 的使用方式十分便捷,全部交给 LeanCloud 来部署运维,自己只需要写游戏逻辑就可以,所以不存在自己部署以及运维困难的问题。3.如今都原生支持异步的情况下,还需要学习 RxJS 吗?RxJS 会将异步及事件组合为一个流式操作,在大型项目上逻辑性会更好,对工程师要求的抽象水平更高,代码也会更加简洁。参考资料中《你的第一个 Client Engine 小游戏》使用的是 Play SDK 事件代码,github 的 repo 中使用了 Client Engine 封装的 RxJS 的方法,建议自己亲自动手写一写代码,会感受到其中的不同。 ...

January 10, 2019 · 4 min · jiezi

极速高清——给你带来全新的高清视野

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~本文由腾讯云视频发表于云+社区专栏关注公众号“腾讯云视频”,一键获取 技术干货 | 优惠活动 | 视频方案欢迎来到吃鸡战场很生气!!!我才刚落地,就因游戏界面糊了一下,阻止了我捡枪的步伐,就被不知道从哪蹿出来的家伙给打死了!!!瞬间落地成盒!!!我很愤怒,于是找了游戏部门的同事吐槽了一番,得到的回答是:画质的问题归你们部门,劳烦你自行进行处理!为了能让自己有个愉快的游戏体验感,于是乎,深陷于研发高清画质的工作中……经过前期的了解,得知当前游戏直播行业1080P、>=45FPS、码率6-10mbps已成为游戏主播上行的标配,各视频平台用户对视频源清晰度观看体验要求越来越高,CDN带宽成本占视频APP平台成本比例大头。如何降低带宽成本压力是各视频平台降成本最重要的措施,其中视频降码率是现阶段主要措施有,主要措施如下:算法升级AV1/H.265/VP9/H.264等,AV1刚定稿AOM编码性能相比其它3家100倍以上差距,由于核心成员有Google/Amazon/Cisco/Netflix等这些大佬以及定位对web的友好性,AV1 3月刚完成V1.0的定稿以及ffmpeg4.0的支持,可以预见的是,后面硬件支持友好后,Netflix、Youtube都将是第一批AV1的使用者,H.265其复杂专利结构导致的较高许可费用,创立之初也未充分考虑到网页播放的友好性,更致命的是复杂的算法让解码端异常吃力,VP9开源、WEB兼容性也好、解码复杂度低,除Apple和技术原因外可能的理由之一就是业内也不太愿意让这么重要一个国际标准被一个独立的公司所控制。 现在视频平台主流编码算法还是以H.264为主普通转码短视频和直播平台、视频网站对视频分源、超清、高清、流畅等不同档位,基本都是一些按分辨率和码率要求强制压缩转码,效果不理想都是以省码率为目标没有考虑用户观看体验极速窄带高清腾讯云极速高清、窄带高清以及netflix的动态编码都是基于场景、清晰度、分辨率、码率、帧率、编码算法、播放策略等目标在不降低甚至增强源视频画质体验的基础上降低视频码率视频源和普通转码存在的问题视频源和普通转码主要存在的质量问题有:转码失真、低分辨率模糊、镜头抖动、噪声大、低码率锯齿块等极速高清是如何解决这些问题视频智能分类 把视频分成游戏、秀场、体育、户外、动漫、美食、影视剧等十几个大类几十个小类场景,通过画面特征比较,明显场景类如游戏、足球、蓝球、动漫等场景,纯CNN网络模型准确率98%以上,电视剧、户外运动、美食、旅游等画面特征比较分散,帧间运动变化比较大的场景CNN结合RNN+LSTM做时域+空域分析,准确率85%左右编码参数 通过视频场景分类实时识别(特殊直播场景识别延时大概有10秒-60秒左右),根据场景识别结果,不同场景配置不同最优编码参数, 根据视频源码率、帧率、分辨率、纹理和运动变化幅度等情况以及综合机器负载和画质效果选择最优编码模板参数前置处理 根据不同场景分类、客户对视频画质的不同要求,以及结合视频源画面纹理和实时运动检测结果进行锐化、软模糊、反交错、去块、降噪、色阶补偿、降帧等前置处理动态优化 不同的视频类别,同一个视频里的不同段,应用完全不一样的编码参数;“不同的参数”的概念包括但不限于:IBP帧类型、量化参数QP、分辨率等,支持编码参数按帧实时更新生效码率控制 不管是标准H.264/JVT-G012 码率控制算法还是x264的码率控制算法在运动变化切换比较明显的场景下预编一次得到率失真理论凸曲线都是尽可能接近最优失真曲线,国内CDN带宽基本都是按95计费法,CDN带宽采样点是5分种的均值,对于这种运动场景实时检测切换比较明显的场景帧我们在x264码率控制的基础上会综合帧时序信息做一些补偿因子和画质控制,画质VMAF得分会有3-5分以上的提高如上图极速高清在VMAF得分相同情况下码率控制更低更精准。detail reduce ☟针对h264视频编码格式,设计了一种在视频残差的频域上消除噪声的算法。该算法结合了当前编码宏块的残差大小,宏块的QP值,历史的频域值等,并根据不同场景选择匹配的video denoise模板,自适应地进行宏块级的视频处理,能够以极低的CPU消耗对噪声宏块进行优化,同时保留清晰宏块的完整性ROI处理 ☟SIFT+差分图像+运动目标图像检测或用户指定(如台标、水印)关注ROI区域,对该区域的宏块编码进行强化(放大/缩小量化步长)、锐化、色阶补偿等处理,如央视世界杯就要求对台标和字幕区域画质和亮度增强VMAF评分 ☟VMAF是Video Multimethod Assessment Fusion的缩写netflix 开源的视频主观感受质量评估算法,看名字这就是一种多方法融合的算法,主要使用了3种指标:visual quality fidelity(VIF)、detail loss measure(DLM)、temporal information(TI)。其中VIF和DLM是空间域的也即一帧画面之内的特征,TI是时间域的也即多帧画面之间相关性的特征。这些特性之间融合计算总分的过程使用了训练好的SVM来预测基本原理流程图从我们评估测试对比效果看VMAF得分和人眼主观感受画面质量很接近,基本能反应用户对画质的主观感受,当然VMAF在一些主要评估特性功能上还有很多功能不完全支持以及评估时要手动严格帧对齐也比较费精力,netflix训练模型主要是在明亮的室内通过电视观看1080p视频时的质量评估。不过手机上的模型也在做了效果不是非常理想github地址:https://github.com/Netflix/vmaf极速高清主要基于VMAF的得分效果优化相关编码参数和算法调整效果效果对比上图是极速高清与普通转码和xx云窄带高清转码同码率下效果对比,总体我们测试效果和客户反馈对比效果看同码率下我们VMAF分比竞品和普通转码高10以分以上,同画质VAMF得分下我们码率最大能降低30%左右另注: PSNR和SSIM三大直接问题:◆ 它只能衡量其与原图的差异也即相对质量,不能计算绝对质量◆◆ 孤立地计算每一帧,无法利用视频中相邻帧的相关性和运动信息◆◆◆ PSNR/SSIM值的计算方法过于straight-forward,结果跟人眼的主观感受并不总能匹配客户反馈极速高清现在应用主要客户有:熊猫、斗鱼、龙珠、虎牙、火猫、企鹅电竞、CCTV、新英体育等客户。且极速高清服务也可进行私有化部署,全程支撑cctv.com世界杯期间赛事直播今天天气好晴朗,处处好风光,好风光……皇天不负有心人,自从有了极速高清的应用,在游戏中分分钟吃鸡,瞬间成为部门的吃鸡高手,还有不少小迷妹让我带着吃鸡呢,迎来了人生的巅峰,哈哈哈哈哈哈问答请问小程序即时通讯如何接入发送消息?相关阅读IM即时通讯实现原理iOS 即时通讯 + 仿微信聊天框架 + 源码开发一款即时通讯App,从这几步开始 【每日课程推荐】机器学习实战!快速入门在线广告业务及CTR相应知识

October 29, 2018 · 1 min · jiezi

大佬带你深入浅出Lua虚拟机

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦本文由鹅厂优文发表于云+社区专栏作者:郑小辉 | 腾讯 游戏客户端开发高级工程师写在前面:本文所有的文字都是我手工一个一个敲的,以及本文后面分享的Demo代码都是我一行一行码的,在我之前已经有非常多的前辈研究过Lua虚拟机了,所以本文很多思想必然是踏在这些巨人的肩膀上的。 本文标题是”深入浅出Lua虚拟机”,其实重点在浅出这两字上。毕竟作者的技术水平有限。但是听说名字要起的屌一点文章才有人看,故而得名。 谨以此文奉献给那些对Lua虚拟机有兴趣的人。希望本文能达到一个抛砖引玉的效果。Lua的执行流程:Lua代码的整个流程:如下图所示:程序员编码lua文件->语法词法分析生成Lua的字节码文件(对应Lua工具链的Luac.exe)->Lua虚拟机解析字节码,并执行其中的指令集->输出结果。蓝色和绿色的部分是本文所试图去讲的内容。词法语法分析: 我不准备讲Lua的所有词法分析过程,毕竟如果浪费太多时间来写这个的话一会策划同学要提刀来问我需求的开发进度如何了,所以长话短说,我就根据自己对Lua的理解,以某一个具体的例子来做分析: Lua代码块: If a < b then a = c end 这句话咱们程序员能看懂,可是计算机就跟某些男程序员家里负责貌美如花的老婆一样,只知道这是一串用英文字符拼出来的一行没有任何意义的字符串而已。 为了让计算机能够读懂这句话,那么我们要做的第一件事情就是分词:既然你看不懂。我就先把一句话拆成一个一个单词,而且我告诉你每个单词的含义是什么。 分词的结果大概长下面这样: 分词结果 类型(意义) if Type_If (if 关键字) a Type_Var (这是一个变量) < Type_OpLess(这是一个小于号) b Type_Var(这是一个变量) then Type_Then(Then关键字) a Type_Var (这是一个变量) = Type_OpEqual(这是一个等号) c Type_Var(这是一个变量) end Type_End(End关键字) 好了。现在计算机终于明白了。原来你写的这行代码里面有9个字,而且每个字的意思我都懂了。所以现在问题是,计算机理解了这句话了吗? 计算机依然不理解。就好像“吃饭”这句话,计算机理解了 “吃”是动词,张开嘴巴的意思。“饭”是名词,指的米饭的意思。但是你把吃饭放在一起,计算机并不知道这是“张开嘴巴,把饭放进嘴里,并且咽到胃里”的意思。因为计算机只知道“张开嘴巴”和“米饭”两件事,这两件事有什么联系,计算机并不能理解。有人会说了:简单:吃+其他字 这种结构就让计算机笼统的理解为把后一个词代表的东西放进嘴巴里的意思就好了啊?这种情况适合”吃饭”这个词,但是如果这样你让计算机怎么理解“吃惊”这个词呢?所以这里引出下一个话题:语义解析。 关于语义解析这块,如果大家想要了解的更深入,可以去了解一下AST(抽象语法树)。然而对于我们这个例子,我们用简单的方式模拟着去理解就好了。 对于Lua而言,每一个关键字都有自己特别的结构。所以Lua的关键字将成为语义解析的重点。我们现在涉及到的if这个例子:我们可以简单的用伪代码表述这个解析过程: 对于if语句我们可以抽象成这种结构: If condition(条件表达式) then dosth(语句块) end 所以对if语句块进行解析的伪代码如下: ReadTokenWord(); If(tokenWord.type == Type_If) then ReadCondition() //读取条件表达式 ReadThen() //读取关键字then ReadCodeBlock() //读取逻辑代码块 ReadEnd() //读取关键字End End所以为了让计算机理解,我们还是得把这个东西变成数据结构。 因为我只是做一个Demo而已,所以我用了先验知识。也就是我假定我们的If语句块逻辑结构是这样的: If 小于条件表达式 then 赋值表达式 End 所以在我的Demo里转成C++数据结构就是IfStateMent大概是这样: OK,所以现在,我们整个词法语法分析都做完了。但是真正的Lua虚拟机并不能执行我们的ifStateMent这种东西。Lua源码里的实现也是类似这种TokenType 和 结构化的 if Statement whileStatement等等,并且Lua没有生成完整的语法树。Lua源码的实现里面,它是解析一些语句,生成临时的语法树,然后翻译成指令集的。并不会等所有的语句都解析完了再翻译的。语义解析和翻译成指令集是并行的一个过程。贴一个源码里面关于语义解析的部分实现: OK,现在咱们已经把我们程序员输入的Lua代码变成了一个数据结构(计算机能读懂)。下一步我们要把这个数据结构再变成Lua虚拟机能认识的东西,这个东西就是 Lua 指令集! 至于转换的过程,对于我们这个例子,大概是这样的: If a < b then a = c end 先理解条件 a<b:一种基于寄存器的指令设计大概是这样的: a,b均为变量。假定我们的可用的寄存器索引值从10(0-9号寄存器都已经被占用了)开始:又假定我们有一个常量索引表:0号常量:字符’a’,1号常量:字符串’b’。那么a<b可以被翻译为这样:LoadK 10,0 :将_G[ConstVar[0]]载入10号寄存器: R[10] = _G[“a”]LoadK 11,1 :将_G[ConstVar[1]]载入11号寄存器: R[11] = _G[“b”]LT 10,11 : 比较R[10]<R[11]是否成立,如果成立,则跳过下一条指令(++PC),否则执行下一条指令。LT后面跟着的一条指令必然是JMP指令。就是如果R[10]<R[11]成立,则不执行JMP,直接执行JMP后面的一条指令(a=c的语句块对应的指令集),否则直接跳过下面的一个语句块(跳过a=c的赋值过程)。 同理,继续进行a=c的翻译等等。 所以If a < b then a = c end在我写的demo里面最后被翻译成了: OK,我们现在大概明白了从Lua代码怎么变成指令集的这件事了。 现在我们来具体看一下Lua5.1的指令集: Lua的指令集是定长的,每一条指令都是32位,其中大概长这样: 每一条指令的低六位 都是指令的指令码,比如 0代表MOVE,12代表Add。Lua总共有37条指令,分别是MOVE,LOADK,LOADBOOL,LOADNIL,GETUPVAL,GETGLOBAL,GETTABLE,SETGLOBAL,SETUPVAL,SETTABLE,NEWTABLE,SELF,ADD,SUB,MUL,DIV,MOD,POW,UNM,NOT,LEN,CONCAT,JMP,EQ,LT,LE,TEST,TESTSET,CALL,TAILCALL,RETURN,FORLOOP,TFORLOOP,SETLIST,CLOSE,CLOSURE,VARARG. 我们发现图上还有iABC,iABx,iAsBx。这个意思是有的指令格式是 OPCODE,A,B,C的格式,有的指令是OPCODE A,BX格式,有的是OPCODE A,sBX格式。sBx和bx的区别是bx是一个无符号整数,而sbx表示的是一个有符号的数,也就是sbx可以是负数。 我不打算详细的讲每一条指令,我还是举个例子: 指令编码 0x 00004041 这条指令怎么解析: 0x4041 = 0000 0000 0000 0000 0100 0000 0100 0001 低六位(05)是opcode:000001 = 1 = LoadK指令(037分别对应了我上面列的38条指令,按顺序来的,0是Move,1是loadk,2是loadbool…..37是vararg)。LoadK指令格式是iABC(C没用上,仅ab有用)格式。所以我们再继续读ab。 a = 低613位 为 00000001 = 1所以a=1 b = 低1422位 为000000001 = 1所以b=1 所以0x4041 = LOADK 1, 1 指令码如何解析我也在demo里面写了,代码大概是这样: 那么Lua文件经过Luac的编译后生成的Lua字节码,Lua字节码文件里面除了包含指令集之外又有哪些东西呢?当然不会像我上面的那个词法语法解析那个demo那么弱智拉。所以下面我们就讲一下Lua字节码文件的结构: Lua字节码文件(*.lua.bytes)包含了:文件头+顶层函数: 文件头结构:顶层函数和其他普通函数都拥有同样的结构: 所以我们是可以轻松自己写代码去解析的。后文提供的Demo源码里面我也已经实现了字节码文件的解析。Demo中的例子是涉及到的Lua源代码以及最终解析字节码得到的信息分别是: OK,本文现在就剩最后一点点东西了:Lua虚拟机是怎么执行这些指令的呢? 大概是这样的: While(指令不为空) 执行指令 取下一条要执行的指令 End 每一条指令应该怎么执行呢???如果大家还有印象的话,咱们前文语义解析完之后转指令集是这样的:a < bLoadK 10,0 :将_G[ConstVar[0]]载入10号寄存器: R[10] = _G[“a”]LoadK 11,1 :将_G[ConstVar[1]]载入11号寄存器: R[11] = _G[“b”]LT 10,11 : 比较R[10]<R[11]是否成立,如果成立,则跳过下一条指令(++PC),否则执行下一条指令。LT后面跟着的一条指令必然是JMP指令。就是如果R[10]<R[11]成立,则不执行JMP,直接执行JMP后面的一条指令(a=c的语句块),否则直接跳过下面的一个语句块(跳过a=c的赋值过程)。那当然是指令后面的文字就已经详细的描述了指令的执行逻辑拉,嘿嘿。为了真正的执行起来,所以我们在数据结构上设计需要 1,寄存器:2,常量表:3,全局变量表:为了能执行我们demo里面的例子:我实现了这段代码涉及到的所有指令insExecute[(int)OP_LOADK] = &LuaVM::LoadK;insExecute[(int)OP_SETGLOBAL] = &LuaVM::SetGlobal;insExecute[(int)OP_GETGLOBAL] = &LuaVM::GetGlobal;insExecute[(int)OP_ADD] = &LuaVM::_Add;insExecute[(int)OP_SUB] = &LuaVM::_Sub;insExecute[(int)OP_MUL] = &LuaVM::_Mul;insExecute[(int)OP_DIV] = &LuaVM::_Div;insExecute[(int)OP_CALL] = &LuaVM::_Call;insExecute[(int)OP_MOD] = &LuaVM::_Mod;insExecute[(int)OP_LT] = &LuaVM::_LT;insExecute[(int)OP_JMP] = &LuaVM::_JMP;insExecute[(int)OP_RETURN] = &LuaVM::_Return;以Add为例:bool LuaVM::_Add(LuaInstrunction ins){ //R(A):=RK(B)+RK(C) ::: //Todo:必要的参数合法性检查:如果有问题则抛异常 // 将ins.bValue代表的数据和ins.cValue代表的数据相加的结果赋值给索引值为ins.aValue的寄存器 luaRegisters[ins.aValue].SetValue(0, GetBK(ins.bValue) + GetBK(ins.cValue)); return true;}下面是程序的运行效果截图: 看完整个过程,其实可以思考这个问题:为什么Lua执行效率会远远低于C程序? 个人愚见: 1,真假寄存器:Lua指令集涉及到的寄存器是模拟的寄存器,其实质还是内存上的一个数据。访问速度取决于CPU对内存的访问速度。而C程序最后可以用win32指令集or Arm指令集来执行。这里面涉及到的寄存器EBX,ESP等都是CPU上面的与非门,其访问速度=CPU的频率(和cpu访问内存的速度对比简直一个天上一个地上)。 2,指令集运行的平台:Lua指令集运行的平台是Lua虚拟机。而C程序指令集运行的直接是硬件支持的。 3,C里面的数据直接对应的就是内存地址。而Lua里面的数据对应的是一个描述这个数据的数据结构。所以隔了这么一层,效率也大打折扣了。 4,比如Lua的Gc操作等等这些东西都是C程序不需要去做的。。。。 OK,最后献上我写的这个demo的源代码:这份源代码是我在清明节在家的时候瞎写的。也就是说代码并没有经过耐心的整理,而且清明节有人找我出去喝酒,导致我有很长一段时间都处于“我艹快点码完我要出去喝了”这种心不在焉的状态,所以有些编码格式和结构设计都处处能看到随性的例子毕竟只是一个demo嘛。人生在世,要有佛性,随缘就好!如果各位真的想进一步理解关于Lua虚拟机的东西,那么我推荐诸位有空耐着性子去读一读Lua虚拟机的源代码~ 最后,诚挚感谢所有看到了最后这句话的同学。谢谢你们耐着性子看完了一个技术菜鸡的长篇废话。Demo.zip问答Lua支持Unicode吗?相关阅读Lua 性能剖析使用lua小技巧Lua 游戏开发学习 【每日课程推荐】机器学习实战!快速入门在线广告业务及CTR相应知识 ...

October 25, 2018 · 2 min · jiezi

腾讯云 Game-Tech 技术沙龙小游戏专场“空降”长沙

欢迎大家前往腾讯云+社区,获取更多腾讯海量技术实践干货哦~本文由腾讯游戏云发表于云+社区专栏小游戏作为今年快速成长的新生态,在开放进入市场之后持续成为行业热点,获得了游戏开发商的高度关注与参与。在阿拉丁统计平台最新公布的2018年8月小程序 Top100榜单中,有超过40%的小程序为小游戏,面对大量开发技术需求,腾讯游戏云针对小游戏开发者最为关注的技术问题和未来的发展趋势,将于2018年10月18日在长沙为“游戏湘军”带来Game-Tech 技术沙龙小游戏专场。本次长沙站小游戏专场,腾讯云Game-Tech技术沙龙不仅汇聚了腾讯云资深专家为开发者进行技术解读,来自知名的游戏引擎Layabox和专注于微信小程序生态服务的阿拉丁小程序统计平台的大咖们也将来到现场为从业者带来小游戏的开发技术分享。届时来自三方的资深技术专家将从小程序新技术&大商业、如何快速开发小游戏、用LayaAir 2.0高效开发微信小游戏、重度小游戏架构经验分享、H5游戏语音解决方案等方面进行深度探讨。另外,本次活动也得到了草花互动及七米文化的大力支持。小程序新技术&大商业根据阿拉丁报告显示,截至2018年1月至8月,微信小程序开发者数量从100万上升至150万,小程序用户平均每月打开小程序次数从4.01次上升至5.98次,无论是开发端还是用户端,今年小程序的增长都颇为显著。阿拉丁小程序统计平台创始人&CEO史文禄将围绕目前小程序行业发展状况、优秀小程序案例及阿拉丁指数榜单,展望小程序未来变化,为行业从业者带来深度观察。如何快速开发小游戏?——小程序·云开发解决方案微信小程序开发平台上月推出了全新的能力——小程序·云开发。腾讯云产品经理黄赞志本次将就此全新推出的能力,分享介绍云开发模式及其优势,以及如何在小游戏项目中使用云开发能力。“小程序·云开发”是由微信小程序团队及腾讯云云开发团队联合推出的功能,为开发者提供了完整的云端支持,开发者无需搭建服务器,通过小程序官方提供的 API ,即可进行核心业务开发,实现快速上线和迭代。用LayaAir 2.0高效开发微信小游戏Layabox合伙人李明将从小游戏开发入门介绍开始切入,结合LayaAir2.0的新特性,例如可视化物理系统、组件化、场景管理等功能,以及用前端的开发模式开发联网游戏等,再针对小游戏分包、物理缓存、开放域等开发中常见的问题,全面讲解用LayaAir 2.0引擎高效快速的开发微信小游戏产品。重度小游戏架构经验分享小游戏的出现吸引了无数的开发者加入,短短时间内成为了游戏行业的又一新的风口。腾讯云高级解决方案架构师陶为将从小游戏的特点讲起,向开发者全面讲解如何从容应对因社交传播导致小游戏瞬间爆发所带来的运维困境、以及腾讯云为小游戏开发者推出的扶持方案等内容。H5游戏语音解决方案随着小游戏市场规模不断扩大,自2018年以来用户群体日益递增,其社交需求也正逐渐提升,实现小游戏语音互通成为当下游戏开发商的迫切需求。为适应小游戏社交新形态,并增加客户黏性,语音能力支持将是一个不得不解决的问题。腾讯云GME高级工程师白兴师将从如何设计小游戏社交新形态,提升用户粘性;如何通过快速接入腾讯云游戏语音GME,实现低延迟的H5小游戏全球语音互通等问题着手全面介绍腾讯云H5小游戏实时语音解决方案及其优势所在。小游戏作为今年游戏行业的风口,自年初起就备受行业关注,其所带来的技术挑战其实并不亚于其他游戏品类,无论是在技术研发还是运维阶段,都需要成熟完善的技术作为底层支撑。腾讯云作为游戏云服务领域的领跑者,本次长沙站腾讯云Game-Tech技术沙龙将通过以上5位专家对小游戏行业的发展趋势、小游戏技术研发和运维等方面的深度探讨,为从业者带来小游戏开发及运维过程中的最新思考和最佳实践,持续为游戏从业者和开发商们保驾护航,带来丰富的技术干货。请锁定腾讯云Game-Tech沙龙小游戏专场,10月18日下午2点在长沙市雨花区劳动东路139号夸克仓库等你!报名速戳:https://cloud.tencent.com/dev…此文已由作者授权腾讯云+社区发布,更多原文请点击搜索关注公众号「云加社区」,第一时间获取技术干货,关注后回复1024 送你一份技术课程大礼包!

October 13, 2018 · 1 min · jiezi