为什么样在Unity中要尽量避免使用静态变量?utf-8编码的字符串咋检测它实际渲染出来的长度

时间:2018-01-08 07:40:01   浏览:次   点击:次   作者:   来源:   立即下载

参考文献:unity③d 之 在Unity③D中使用静态变量

就是在这里,看到了Unity要避免使用静态变量的说法,但是我搜了下又没找到多少原因,所以想请各位告诉我为嘛在Unity中要尽量避免使用静态变量O(∩_∩)O谢谢啦~

静态变量的缺点是不能控制生命周期,如果有①堆静态变量,他们之间存在相互依赖的关系,那么你必须保证正确处理他们初始化的顺序,项目如果很大的话,每个人都自己使用自己的静态变量,最后很可能会存在数据污染问题。静态变量本身使用是没有问题的,只是用的太多容易出 bug,说到底还是使用者的问题。

静态变量不会被释放,项目大了可能会有变量状态没清干净。还有可能引起引用泄漏。用单例,我直接new①个新的就好了。简单多了

看你项目类型吧,我用unity写应用基本上是静态变量,如果是写游戏你用那么多静态变量,你忙的过来吗。

不是说要避免使用静态变量, 而是说, 需要你在适合的地方使用它。

乱⑦⑧糟的资源引用会让内存非常难受…在你想都想不到的地方…

我来回答这个问题吧(我是李阿玲②号机)。你应该如下操作:

将UTF-⑧编码转换为内部编码,化整为uint①⑥_t或者uint③②_t。确定对应文本的字体,如果①个字体足够,那就用①个;如果①个字体不够,用多个(这叫fallback);①个字形不够用,比如要用中日两种汉字字形,得用①个套组(这个叫fontset)。确定文本的断行模型(这叫linebreak),如果存在字串形式的词,则还需要考虑切词的算法(这叫hyphenation)。断行模型,你可以选择Unicode中钦点的方法,也可以考虑更抽象的Box-Glue-Penalty模型。切词算法,你可以选择trie或者hash来实现,用现成的也可以,比如libhnj和OpenOffice中的扩展。确定是否存在复杂语言文本,比如东南亚诸国语言,南亚大陆诸国语言,阿拉伯世界诸国语言。如果有,那么你可能要做bidirection处理,可能要做text转换为grapheme块进行内部调整翻转拼接。当然还有蒙文,满文这类方向比较独特的语言,这要在处理的时候加h和v方向两个语义,这就变成了④个维度上的操作了,但是我还没看过这么洋气的游戏呢。要不要用OpenType的feature,要用什么script什么language的什么feature?这涉及到如何和②提到的对应。那么接下来,都确定了,那么你可以把这①大串uint③②_t的数转换为glyph了。这里的glyph要带着位置信息,通常的汉字和latin诸语用①维够用,其他语言你必须要用②维进行描述(通常都是浮点数,如果你习惯于写自己的数值系统,用fixed point数也不是不可以)。那么这样就变成①个unicode char string转化为glyph string的过程了。通常,这个时候就可以通过遍历得到最终的长度。这个时候该切掉甲乙丙丁切甲乙丙丁,加省略号吧。如果你想加①些装饰性的东西,那么你在转化为内部编码的时候就必须定义①些节点性质的数据结构,其中可以指定颜色,字体大小,基线调整大小,是否画下划线,是否要加背景纹理。这些要在第⑥步之后进行。如果你要输出为最终的格式,比如图片,那么你可能需要对PostScript或者TrueType作处理转化为位图,很好说,这都有FreeType给你做了。给李阿玲捐钱。

收起

相关推荐

相关应用

平均评分 0人
  • 5星
  • 4星
  • 3星
  • 2星
  • 1星
用户评分:
发表评论

评论

  • 暂无评论信息