玩塞尔达荒野之息的特殊感觉
[TOC]
2019年10月开始玩塞尔达荒野之息,觉得游戏里面有种感觉非常有意思。我不知道该用什么专业的词语来概括它。但我很容易在游戏里感觉它。
在荒野之息游戏里这么大的地图空间,并且又没有指引的情况下,为什么我在游戏过程并不觉得自己在胡乱的瞎逛呢?自己行走路线都很有规则,比如为了看清周围地域(找神庙),我总会朝着高处走。看到异样的建筑/地形/植物/怪物(如平原里有座小山),总感觉那些地方会有事情发生,而吸引着我过去,常常会有克洛洛和宝箱在那。又比如看到矿石会忍不住过去敲。
玩荒野之息玩到不知天时(连续几个小时),回头想来好像就是这个感觉,一直在让我乐此不疲地从一个地方到另一地方(进行游戏内容)
直到最近,听一些游戏介绍视频,无意地知道原来这感觉叫作【引力】。何物?吸引玩家...
Click to read more ...
记一次C#数据包GC优化
[TOC]
几个月前接手了项目客户端网络层模块,要求分析数据包GC大小并优化。基于不可抗拒的原因,这个项目没有使用流行的通信协议,如google protobuffer和风云大大的sproto等,而是自研的key-value协议。经过一系列优化,最终将代码的GC减少了约50%,并且优化以来运行良好。由于不能将项目的具体代码逻辑贴出来,同时为了更好地理解本文主旨,下文使用伪代码来表达主体逻辑,请放心这不会影响你对要点的理解。
也许阅读的过程你会嘲笑和惊讶部分代码为何“如些地烂”。遗憾的是已无法对这些“上古的遗迹”细细地追溯过去,只能战战兢兢地修改下去罢了~~!!
修改前的代码
主要有两个对象NetPackage和NetWork
NetPackage 数据包实例。负责储存着字段列...
Click to read more ...
使用swig导出c# wraper并调用native dll
[TOC]
Building a C# module是swig导出C# wraper并调用native dll的官方样例。本文没有使用样子里的gcc和mono-csc,而是用了window自家的编译指令cl和csc
我将所有执行命令放到build.bat脚本中。因为使用了cl和csc,你需要在Visual Studio Command Prompt下运行build.bat,并且传入swig安装路径,如:
build.bat d:\swigwin-3.0.12\swig.exe
原文:
https://lizijie.github.io/2020/01/03/%E4%BD%BF%E7%94%A8swig%E5%AF%BC%E5%87%BAc-wraper%E5%B9%B6%...
Click to read more ...
思索了几个C&C++实习生面试题
[TOC]
近期公司招C/C++实习生,看了一下公司面试题。觉得题目考点太偏向概念、语法题。缺少一些基本原理和实践题。
特意思索了5题。前3题关于指针/内容空间。后2题关于实践。
如有雷同,纯属巧合
题一
在C/C++中,以下代码的执行结果
char* str = "abcd";
str[0] = '1';
答:题中str的声明类型是char,但字符串常量指向的内存空间不可写。严格来说char是个指针并不是内置字符串类型(c#/java的string )。在C++中内置字符串类型是std::string
题二
小端字节序下,printf的打印结果是
int main()
{
short v = 0x1234;
char* p = (char*)&...
Click to read more ...
记一次修改unity3d富文本插件的设计缺陷
[TOC]
小弟最近开发客户端的聊天系统。策划案子要求支持图片和文字混排。我在github上找到了功能较为丰富,start数比较多的插件TextInlineSprite
它支持:
文本超链接显示
文本下划线效果
支持同时多个表情集
插件提供了详细的样例代码,让你非常容易入手。在此感觉作者coding2233的贡献
然而,当我滑动无限复用列表时,表情位置显示不正确(如上图)!!特别是在UI项超出边界,被回收复用时,偏移尤为明显。我参考插件样例ChatTest相关代码(如下),当ScrollRect的位置变化时,同时也调整SpriteGraphic的位置,目的是抵消表情位置偏差。不过问题依然没有改善。
namespace EmojiText.Taurus
{
...
Click to read more ...
C++不应该有垃圾回收
[TOC]
只要C/C++还是操作系统的主要实现语言,C/C++就不会有内置垃圾回收机制。
近日看了这本书前几章,先声明书中没谈我的这个观点。只是在理解了书中主旨后,回想起常有人抱怨C/C++没有垃圾。顿足思片刻,立此结论。
我大概看前面几章,介绍了如下几个GC算法:位图标记,复制gc,引用计数和分代gc(后面章节还有很多)。尽管这么多算法,但每种算法都解决同一个问题,对象什么时候被释放才是效率最大。因为频繁使用的对象就算没被引用,在空间和性能允许的条件下也应该被继续保留,而不是立即清除。保留多久的问题上就是各个GC实现细节差异。引用计数认为当计数小于等于0时就要释放对象,而分代认为最后创建的对象会被优先考虑GC。而算法在性能和空间的微小取舍上也出现了各个版本。如标记GC算法...
Click to read more ...
Unity ugui非常不友好!自定义控件创建流程。
[TOC]
刚接触unity ugui,觉得以下几点非常不友好
好的工具软件都有顺手的快捷键,为有如此编辑过程才能高效生产。然而!!!万万没想到!Unity居然没有创建控件的快捷键。目前都要从Hierarchy窗口右键->UI,或者菜单GameObject->UI创建控件。
很多控件不需要勾选raycastTarget。但创建的控件默认勾选raycastTarget。而选了raycastTarget的控件,会额外参与摄像机的UI事件计算。所以为了避免不必要的消耗,我们在每次创建控件后,都要手动关闭该选项。
各个游戏项目可能使用了各自的非默认字库。但Text默认使用了Arial.ttf字库。所以每次创建后,都要重新选择字库。
有如下几个方法解决上面问题
...
Click to read more ...