Author Archives: Rivers

cocos2dx小号字体显示模糊的解决方案

cocos2dx对于小字号的字体显示效果实在是一般,字号越小越模糊。

尝试过使用setAliasTexparameters(),但效果不理想。

最后搜到一个非常取巧的解决方案:

如果你要使用14号的字体,那么你实际将之设置为28,也就是x2。然后再setScale(0.5f)。这样效果就会好很多了。如果还不够好,可以尝试x4,然后scale 0.25。

将这个技巧反过来使用还可以得到字体的模糊效果。╮( ̄▽ ̄)╭

游戏性能优化备忘

排除GPU问题

只要:

1. 尽量不使用shader,或者只使用简单的shader

2. 不要画太多内容(三角形所占总像素面积)。

那么一般就不会是GPU导致的性能问题。

减少CPU占用

1. 尽量使用批量绘制。

2. 尽量减少draw call次数。

3. 尽量使用占内存更小的纹理。(RGBA4444+抖动)

4. 不在屏幕内的物体,应设置为不显示。

减少GPU占用

绘制大图的时候,把大图拆分成多个多边形,或者使用polygon sprite meshes,以减少透明区域,可降低GPU占用,但是相应的会提升CPU占用。

Cocos2dx项目Android Studio打包趟坑记录

问题描述:

游戏一直用Windows环境打包Android版本,临时需要用Mac打包,但是报错。

解决方法:

Mac下默认安装的是JDK 10,换成JDK 8即可。(也可能与Android Studio或者Gradle的版本有关系)

下载安装JDK 8并删除JKD 10。

小技巧:

Android Studio的报错信息不一定有用,直接在Android Studio的命令行(Terminal)下输入:./gradlew build 来编译,这样输出的错误信息更有参考价值。

Android Studio打包APK报错collect2.exe: error: ld returned 5 exit status的解决办法

因为cocos2dx 3.16版本,官方只支持到NDK(14),所以只能用这个版本。

但是用这个版本打包APK时会报这个错误:

collect2.exe: error: ld returned 5 exit status

解决方法:

下载最新版本NDK(17),将其中的ld.exe复制出来,覆盖NDK(14)中的对应文件。

在合并分支时如何跳过某次提交

比如我们在分支A上做了一次改动,但是我们不想让这个改动在将来执行合并时被合并到分支B上。具体做法如下:

  1. 在分支A上正常修改并提交。
  2. 切换到分支B。
  3. 执行 git merge -s ours branch_A
  4. 重新切换到分支A继续开发。

重点在第三步,加了 -s ours 参数的合并会忽略分支A的提交,但是仍然标记为已合并。

易于提交的App Store Preview视频格式

反正我是为了提交App Store的Preview视频操碎了心。

总之是这个链接拯救了我:

https://stackoverflow.com/questions/25820601/unable-to-load-app-preview-in-itunes-connect

这个方法使用了一个叫做HandBrake的视频格式转换软件。

除了链接中提到的之外,其实还有几点需要注意的。我把所有的都列一下好了:

  1. Format:MP4 File
  2. Framerate(FPS): 30, Constant Framerate
  3. Quality: Constant Quality, RF: 0. (其实RF这里可以,可以调整一下,是导出质量)
  4. 切换到Picutre页签。
  5. 注意Storage Size还有Display Size要与Source保持一致。如果不一致,则需要调整Anamorphic和Cropping选项。
  6. 切换到Audio页签。
  7. Samplerate设置为44.1。

这样基本上导出来的格式就比较稳了。

 

为游戏缩减TTF字体文件

找到几个方案,最终决定用FontPruner来实现。其它方案可参考下方的相关资料。

FontPruner的执行需要电脑支持Python和Jave的运行。

提前准备

1. 文本合并

首先,为了方便FontPruner的执行,我们要把所有的文本信息保存到一个txt文件中。

实现文本合并有很多方法,这里我采用了Notepad++以及它自带的插件Combine来实现。

步骤:

  1. 在Notepad++中打开所有要包含的文件。
  2. 为了以后使用方便,我们可以把当前打开的文件保存成一个Session(相当于工程文件)。
  3. 执行Combine插件,并保存为alltext.txt。

2. 运行准备

  1. 在FontPruner的目录下创建input目录,并将alltext.txt拷贝进来。
  2. 如果需要追加其它字符,可以在input目录下创建另外的txt,并将要追加的字符保存进去。
  3. 一定要注意txt的编码格式统一,否则转换会失败。
  4. 将字体文件拷贝到FontPruner目录下。
  5. 在FontPruner的目录下创建output目录。

开始导出

打开命令行执行如下命令:

如果没有报错,那就导出成功了。

但是不知道为什么,FontPruner会过滤掉空格和Tab符号。为了解决这一点需要以下操作:

打开output\intermediate\unChineseOutPut.txt文件,在开头手动加入一个空格和一个Tab符号。

然后执行:

这次的导出文件中就会包含空格了。

相关资料

https://github.com/GameBuildingBlocks/FontPruner

http://font-spider.org/

http://ecomfe.github.io/fontmin/

http://fontstore.baidu.com/static/editor/index.html

将Sprite绘制到RenderTexture指定位置的方法

有时候我们想要复制一个Sprite或者Node,不但复制其自身还要包含其子元件。最直接的办法就是使用RenderTexture,将Sprite及其子元件都绘制到RenderTexture上。但是Sprite在RenderTexture上的位置是不能直接指定的,我们又不想改变Sprite的位置。解决方法如下: