技术

A collection of 22 posts
黑神话:悟空销量破千万记
技术

黑神话:悟空销量破千万记

游戏科学发布的统计信息,《黑神话:悟空》截止8月23日日整,销量突破千万最高在线人数同时在线300W。 据观察👀最近“黑神话:悟空”这个游戏流量是拔高不减异常的热闹,直播游戏主播全是黑神话,朋友圈全部在发高清的玩上游戏的图片,甚至连外交部发言人提问都提到了这游戏,所以也来凑个热闹。 有人说它抄袭!有人说它是国产游戏之光!有人说他是文化输出产品!甚至有人说游戏内的光照、水纹哪些不是游戏科学开发的... 作为身处这个行业的人来说,能出这样3A品质的游戏还是值得开心🥳的,应该在今年科隆的游戏盛世下能看见悟空获奖🏆,因为这个产品让国产游戏“有脸”了,真的是这样吗? 当然不是,其实每年都会有“现象级”的产品,最多能让我们大部分行业内的人心生感慨,感概只是拥有这么多年的行业经验而已。 在资本当道的行业里,能沉浸下来不被打扰的开发产品真的是太难了,我们只是看见他们的高光,没有见到背后的心酸。开发过太多的游戏,最终都是因为项目不盈利而终止,甚至都没有拿得出手的作品。其实很简单在面包和牛奶面前大部分人会选择前者,没有面包就会“饿死”。 前段时间朋友发了“国产游戏终于顶起来了”背后励
3 min read
技术

如何摆脱知识盲区

在开发过程中总是会遇见很多自己不知道的事物,这时候我们已经进入了知识盲区,遇见这样的情况我们作为开发人员需要怎么处理呢? 问题背景 之前总是碰见一些团队对各种开发过程中使用的软件有些争议,比如下边几种代表性的: * 为什么不使用 git,其实我觉得 svn 挺好的,Git 那货…..? * Jenkins 那个配置太麻烦了,我觉得 shell 会更好用点…. * 为什么不使用 Jira、禅道、youtrack 等项目管理软件,学习成本太高了不如 excel 来的快…. 一般沟通到这里就会停住了,因为已经意识到团队中所缺乏的东西了。其实一般出现上边的问题有不愿意接受新事物,及其懒惰的思想因素在里面,长期的经验主义者总是落后于前沿的技术。 发现问题进行接纳能提升很大的团队工作效率,如果因为业务团队的负责人一意孤行不被接纳导致团队效率下降 ⬇️ 这时候开发人员就该考虑下是否团队适合 🈴️ 自己了! 怎么做? 其实并不是某些新的软件及系统就一定好,但如果能提升整体的开发效率及进度何乐而不为呢? 在技术日新月异的今天,每天都有个总不同的新思想、新软件来解决我们遇见的问
2 min read
技术

Golang中配置文件热重载方案

最近用Golang写Web微服务应用,在开发过程中有需求是对本地配置服务器配置文件需要解析读取进内存待程序逻辑调用,但项目的配置文件数据都是通过excel表来进行管理的,需要导出成Json文件进行解析在应用服务器逻辑中把数据读取进内存或Redis中进行缓存,由此就产生了需要对配置文件热重载的必要性。 热重载的意思就是在不重启应用的情况下对配置文件的更改后实时读取到内存中或刷新Redis及时生效,更改为这种方案的优点就不阐述了但也有一些缺点就是如果不能保证修改配置文件的准确性那么会有很大机会导致运行的服务崩溃 :alien: ,但这里也可以通过工具预先对需要读取的配置文件数据进行校验然后在导入到运行的应用中来避免以上缺点. 代码实现思路 通过比对文件的MD5码进行校验是否需要更新对应配置文件的数据,获取MD5代码参见如下: //返回文件的MD5码 func FileToMD5(filePath string) (string, error) { file, err := os.Open(filePath) if err != nil {
2 min read
技术

不能导出私人笔记的软件都是流氓软件

为什么会想写下这个主题呢? 这是一篇吐槽文,最近因为以前在印象笔记里面记录的 📝 的东西吧,想进行下导出 markdown 文件进行整理,结果发现这玩意还不支持导出,对 notion 里面的笔记我也以同样的方式进行操作过,随说 notion 是支持导出但还是不尽人意的不支持批量导出。 这里就让我想起来了前段时间遇见的一件事,比如在知乎或 CSDN 内看见某篇博文写的还可以 😌,文章中引用了某些其他站的文章,看的正起劲的时候点击链接跳转时平台给跳出一个中转页面让我确认是否要进行访问,好吧久而久之就火了,每次都这样就感觉自己被侮辱了…… 我都已经点击了就是我已经确认好啦的,为什么平台还要我再次确认下,平台的那点为了流量的小九九其实大家都心知肚明的,还有更恶心的做法是强制要用户登陆,其实久了像我这样的用户就流失了。 对于以上跳转确认的情况,对于会点技术的人来说其实写个 chrome 插件就解决了也就很少的代码但能提高自己在网中畅游的效率,但对不支持导出私人笔记的平台或软件下边在继续吐槽。 对于不能导出笔记的软件和平台其实最终还是会选择替代方案来进行解决新的笔记问题,“可批量导出笔
3 min read
技术

如何在UE4中平衡蓝图与C++的使用

👋 在项目中使用UE4有段时间了,这篇文章也算是对项目开发中我们如何在面对在UE4中到底是该使用蓝图还是C++的一个总结,希望给更多喜欢UE的朋友一个参考。 蓝图是什么? {#蓝图是什么} 先解释下什么是蓝图吧,惯性思维让我们开发者一听见蓝图就感觉很高大上,但在UE中的蓝图其实就是内置的可视化脚本编程语言,为了更多让更多的创作者能轻松上手UE,并快速开发出原型进行版本迭代而开发的一套可视化工具🧰,有点类似于编程语言中的脚本语言,和我们平时使用的Javaacript、Lua等有异曲同工之妙处,相比之下蓝图入手后让没有编程语言的基础的创作者以最小的代价就可以进行产品原型的创作。蓝图就是这么强大,但针对会高级语言的人来说其实缺点也是比较明显的;逻辑上太冗余、在项目模块逐渐增多的情况下,后期维护时回溯蓝图里面的逻辑也是比较复杂的。 什么时候用C++ {#什么时候用c-plus-plus} 相比蓝图C++的运行时性能是毋庸置疑的,但开发效率确实比较低,入门门槛是指数级别的难度不容易上手,有点编程基础的小伙伴相比Java等语言还是门槛高,对于这门C++上古时期的语言来说会挡
4 min read
研究UE4(虚幻引擎)后的感想
技术

研究UE4(虚幻引擎)后的感想

因最近项目需要用 UE4 来开发,也开始着手对 UE4(虚幻引擎 Unreal Engine)进行研究和项目实践,研究后的唯一感悟就是 UE 确实强大,强大的在于入门口它的提升工作效率的流程及实时渲染的效率上边,同时也了解到了 Unreal Engine 的设计哲学: 不为你不需要的东西付出代价 ,其实我们所使用的工具或者框架、引擎最主要是在为我们提高工作效效率,而不是在引擎和工具上折腾并花费更多的事件,在逐渐了解和使用过程中得到以下的几点感想: 其他游戏引擎都是"垃圾" 笔者经验用过 cocos 全套、Unity 等游戏引擎,都有过 2 年以上的项目开发经验;放出这个观点很容易被喷,声明这句话不是来拉仇恨的,其实是对比其他引擎后得出的; 先从虚幻的开发哲学(不为不是使用的东西付出任何代价)讲,归结起来就是不为不使用的东西来付出内存占用,这也是 C++这门编程语言的哲学; 然后再是蓝图,这玩意真的是能让你不编写一行代码拖着蛇形曲线就可以游戏的原型,用后真的觉得是太赞了 👍,Unity 中也有蓝图但需要升级到 plus
3 min read
Mac Mini M1真香定律
技术

Mac Mini M1真香定律

最近因跟 10 年的机器确实在编译项目太费时间,外加 Android Studio 模拟器运行并编译项目真的让人头疼,所以决定另外购置一台工作机由于已经用 macOS 系统多年还真是逃离不了苹果的圈子了,平时玩 🎮 的需求也不是很大在网上了解下就觉得入手 mac mini2020 版本。 从知道 mac mini2020 版本是使用的 Apple m1 的芯片后有点犹豫是否还是购置 Inter 芯片的 mac mini,并且也犹豫去配置一台 PC Win 电脑,但多番比较和进行考虑 💭 后,还是决定使用带 macOS 电脑,对于自己的担心也从购买过的朋友哪里了解到自己的担心有些多余,因为 m1 芯片可以通过 Rosetta 程序对不支持 m1 芯片的进行转换成 x86 程序来使用,其实购买 mac OS 的另一个原因就是尽量在环境和系统上进行少点折腾,毕竟工具还是自己用的顺手的是最好的工具,
4 min read
游戏开发中使用的概率算法
技术

游戏开发中使用的概率算法

近来在游戏中涉及到了一些需要使用随机算法的逻辑,这里简单记录下使用到的算法以便以后翻阅 随机概率分布算法 概率分布算法在游戏中可以用在,计算游戏命中、闪避、暴击机率设定对应的分布机率来随机当次攻击属于的类型,上边的思路有点像 圆桌算法 : function randomProbability(rate:number[],totalRate:number=100) { let random =Math.random() let random_number = Math.floor(random * (totalRate- 1) + 1) let start = 0; let index = 0; for (let i = 0; i < rate.length; i++) { start += rate[i] if (random_number
1 min read
Android和H5网游加速器解决方案的探索
技术

Android和H5网游加速器解决方案的探索

上个月业余时间和兴趣的驱使对网游加速器进行了研究和技术探索,这里对当前的手机网游加速原理和使用技术作个记录和总结,废话也不多说了直接上干货,在介绍原理之前我们先区分一下游戏加速的类型。 目前我们所说的网络加速器其实分为对游戏行为进行加速和对网络速度进行加速两种,我们研究的是第一种类型就是对游戏行为的速度进行加速已达到比如挂机类的游戏在上边耽误太多的时间直接最大化游戏的战斗速度来获得游戏结果; 在手游中的加速技术,我们还是主要讨论 Android 平台上边的加速原理,普遍情况下 Android 平台我们主要是对系统 Clock 时钟进行hook 然后通过修改系统的时钟时间值来达到我们的加速目的,其中还要确认需要加速的游戏是使用的什么引擎;在介绍游戏引擎的Hook 上边我们先来看以下Hook工具有哪些: Hook 工具 {#hook-工具} 包括目前市面上一些加速器比如:X8沙箱等都使用的是 CydiaSubstrate[1] SDK来进行 hook, Cydiasubstrate 目前只支持Android2.3 以下版本,接入简单如果2.3以上需要对系统进行Root 才能使
4 min read
技术

Go Lang的defer声明

很多新出的语言中都有 defer 声明,比如:Go、Swift 等我所还不知道的编程语言,最近也特意的去研究了一下关于这个声明的用处和使用建议并在此记录一下,在 swift 和 go lang 中 defer 声明的用法及其概念都是一样的。 defer 简介 defer 语法声明就是延迟执行声明语句后所带的表达式或函数,主要是使用在函数返回以后对函数体内的某些变量或指针执行清理工作,比如:在一个函数内执行打开文件操作,但在调用 open 来获得对文件操作的指针以后,出现了 return 操作这时被打开的文件指针就在程序运行期间被一直未关闭,如果有了 defer 语句我们就可以在 open 以后 defer fp.close() 这样只要在函数返回后就会由执行 defer 语句后面的表达式,整体感觉有了这个声明后让我们的程序变的更简洁并且更可控了. 注意事项 * 在使用 defer 获取函数里面变量的值时,变量值是获取的时候值,函数体以后对变量的操作和更改并不会 defer 里面该变量的值。 import
2 min read
游戏开发

WebP图片文件格式的了解总结

前段时间看了一篇文章说某公司自研游戏引擎使用webp文件格式来处理图片资源,查看了一下cocos2d-x框架也是对这种图片格式的解码操作也是支持的,也就多少的算是对WebP图片文件格式的一个基本了解并作如下总结。 WebP格式文件是什么? 在2010年由google开发并发布的一种同时提供有损压缩与无损压缩的图片文件格式,目标是减少图片文件大小并达到和JPGE格式相同的图片质量,减少图片文件在网络上的发送时间. 怎么转换图片资源到WebP格式 以MAC OS为例: $ brew install webp $ cwebp source.png -o target.webp #转换图片资源为webp,支持图片格式PNG或JPG $ vwebp target.webp #查看webp格式文件 $ dwebp source.webp -o target.png #转换webp文件为JPG或PNG 关于在游戏中使用的一些思考 WebP图片的优点是减少app包体的大小,缺点是:AIO解码的时候比png或jpg慢,就会导致读取图片数据时间更长会影响游戏的体验性
1 min read