【3.8.5】Windows 原生字体描边和全屏显示的解决方法

  • Label描边

Windows 原生打包字体没描边的问题疑似八百年前就存在了,虽然本人的shader知识还很初级,但是这个问题论坛里面有人提没人回答,于是贴个傻瓜式的解决方法,希望对大家有帮助
assets.zip (7.2 KB)
基于3.8.5制作,大佬肯定不屑于看这么简单的原理,不了解shader的新手光看本贴也没法入门,直接下载压缩包,解压并替换工程的assets文件夹就可以用了,但是我什么都不说又不好,所以还是简单讲下

在shader里判断字体的周围位置是否透明,如果这个位置在描边范围内就置成描边颜色


为了让描边大小正好等于2个像素,在ts里把label的尺寸传进去(但是这样做了描边横纵的粗细好像还是不一样,这个还请大佬解答),除此之外还可以把描边大小和描边颜色也传进去,本人偷懒没传

直接把这个ts拖到需要描边的label下,打包原生效果如下
嗯,可以看得出有狗牙,这个问题就交给万能的cocoser们了

这样做描边优缺点:

  1. 打包Windows,如果勾选VULKAN,会导致Label一整个渲不出来
  2. 溢出处理选择NONE,会导致描边的左右两侧被切掉
  • 设置全屏

这个一行代码就可以解决了
在windows工程下,game.cpp 的 init 函数里加上一行

_windowInfo.flags = cc::ISystemWindow::CC_WINDOW_FULLSCREEN_DESKTOP;

  • 最后来说说为什么要打Windows原生包而不使用Electron
  1. 本人最开始学的是 cocos2dx,接SDK还是C++更顺手
  2. Windows原生包比Electron打包运行效率快(楼下有图有真相)
  3. 反正包一层壳就是浑身难受
4赞

下面来看看Windows原生打包和Electron打包的实际运行效果



上面是本人开发中的游戏测试图,同样的设置,代码一行不变,都是打开了Bloom和环境光遮蔽,electron平均帧数在45,Windows原生Release出来直接帧数起飞,可以保持在接近60
但是不吹不黑,Electron的画面更清晰一点,看起来自带抗锯齿,所以这样对比有点不公平

1赞

除了描边以外,本人碰到的另一个问题是Windows的 input.gamepad 没反应
于是改成在C++获取手柄状态,再用swig传给ts(官方提供的方法)
起初用的是微软推荐的GameInput,测试用的是山寨xbox手柄,可以检测到设备连接,但是按键无响应,上网查了一下,不止是我遇到这个问题,于是改用XInput
用XInput就好了,没遇到什么障碍。关于手柄如果大家感兴趣,之后也可以开一贴再说细一点

3赞

但是这样做了描边横纵的粗细好像还是不一样,这个还请大佬解答

本人的重大失误,ts里面这样写不行,你得创建一个新的Material,不然就是在修改同一个实例


修改后的版本assets.zip (28.6 KB)

1赞