【超详尽】有关Cocos Creator打windows 10包且接入STEAM需要注意的事项

顺利完成了打包以及STEAM SDK接入,这里记录一下步骤,也希望能够帮助到大家
需要调整的地方非常多,不过Cocos初衷并不是为了windows包考虑的,所以实际上不维护也无可厚非
下面进入正题吧

版本

  • Cocos Creator 2.4.3
  • 打包使用了Visual Studio 2019
    使用的组件
  • windows 10 sdk(10.0.16299.0)
  • MSVC v142

打包

Cocos Creator导出的设置


不勾选调试模式,完成以后使用VS2019打开你的工程\build\jsb-link\frameworks\runtime-src\proj.win32中的.sln文件
在VS2019打包时选择Debug,Win32,点击本地windows调试器

解决报错

如果打开工程很有可能遇到这样的报错: function不是std成员
实际上和sdk版本等均有关,需要升级一下部分源码
为报错的文件顶部加上头文件就可以解决了

#include<functional.h>
#include<iostream.h>

参考这篇文章
function不是std成员解决

解决BUG

如果可以正常编译的话,可能还会遇到一些dll文件缺少的提示,这个时候就需要在.exe文件目录中导入这些文件,比如说msvcr全家桶
msvcr100.dll msvcr110.dll msvcr120.dll msvcr120d.dll
steam的dll也放进去,后面要用steam_api.dll,这个我们稍后再谈
msvcr的dll套装.zip (2.0 MB)
这样应该可以正常打包运行了

屏幕分辨率和全屏

这里先讲讲获取当前屏幕分辨率的方法

#include <Windows.h>
//main.cpp
int nScreenWidth, nScreenHeight;
nScreenWidth = GetSystemMetrics(SM_CXSCREEN);
nScreenHeight = GetSystemMetrics(SM_CYSCREEN);
// create the application instance
// DPI问题待讨论
//直接全屏
AppDelegate app( nScreenWidth, nScreenHeight);
//如果想要无边框全屏需要配合下面的部分使用
//AppDelegate app( nScreenWidth, nScreenHeight+1);
app.start();

看起来可以全屏但实际上还是会有窗口边缘(不是沉浸式全屏),这里需要对CCGLView-desktop.cpp进行修改

覆盖旧版glfw3.h

首先覆盖cocos creator自带的旧版glfw3.h
因为在旧版glfw3.h中是不带GLFW_TRUE,GLFW_FALSE,GLFW_RESIZABLE,GLFW_FLOATING
这些标识符的

旧版glfw3.h所在的位置是:
C:\CocosCreator2\resources\cocos2d-x\external\win32\include\glfw3
(C:\CocosCreator2是我之前cocos的安装地址,后面的可以保持一致)
如果是2.4.3,路径则为C:\CocosDashboard_1.0.11\resources.editors\Creator\2.4.3\resources\cocos2d-x\external\win32\include\glfw3
这里也把glfw3的链接给到大家
glfw3.h.zip (41.9 KB)

修改CCGLView-desktop.cpp开启全屏

加入头文件
#include "glfw3/glfw3.h"
然后


在138行后追加glfwWindowHint相关函数

glfwWindowHint(GLFW_DECORATED, GLFW_FALSE);

即可关闭窗口修饰,实现无边框全屏

接入STEAM

导入

steam官方教学
steam SDK下载链接
解压完成以后把public文件夹放在.sln你的工程同一个文件夹下


在VS2019中把这些文件导入进去
image

调用API

加入头文件
#include "steam_api.h"

AppDelegate app()之前调用

if ( !SteamAPI_Init() )
{
    printf( "Fatal Error - Steam must be running to play this game (SteamAPI_Init() failed).\n" );
    return 1;
}

创建id指示用txt

那么现在steam还找不到你的appid,你需要在最后生成出来的exe文件目录中放入steam_api.dll以及一个指示你appid的txt文件


具体原理可以参考官方教学
steam_api.dll.zip (93.5 KB)

最后运行应该可以看到steam右下角的弹出框,而且会提示你正在游玩了!

F12截图

steam默认F12截图,当时一按就立刻断点,还以为是报错,实际上是VS2019自带调试快捷键23333333
我们单独运行exe是不会有问题的

音频数量上限提升

搜索MAX_AUDIOINSTANCES
在不止一个结果,如果是windows的话,修改AudioEngine-win32.h中的宏
改为
#define MAX_AUDIOINSTANCES 256
这样就支持256个音频的同时播放了

关闭输入法

找到main.cpp
加入头文件

#include <imm.h>  
#pragma comment (lib ,"imm32.lib")

然后在_tWinMain函数中AppDelegate的前面加入

//关闭输入法
ImmDisableIME(0);

打开垂直同步

有时候游戏会出现撕裂的问题,我们可以通过开启垂直同步来避免
在app.start()之前开启垂直同步

void openSync() {
	typedef BOOL(APIENTRY* PFNWGLSWAPINTERVALFARPROC)(int);
	PFNWGLSWAPINTERVALFARPROC wglSwapIntervalEXT = 0;
	wglSwapIntervalEXT = (PFNWGLSWAPINTERVALFARPROC)wglGetProcAddress("wglSwapIntervalEXT");
	wglSwapIntervalEXT(1);//打开垂直分布,限制帧率
}

分辨率调整

我的做法是,Cocos Creator里面,调用一个接口存文件,文件里面记录了长高,是否全屏,然后C++这边读取文件,就可以确定长高,是否全屏了。需要改动的地方是main.cpp。这样就可以实现游戏内可以调整分辨率和全屏选项,然后重启就可以应用了!

设置窗口为不可拉伸

在CCGLView-desktop.cpp中,加入一行
glfwWindowHint(GLFW_RESIZABLE, GLFW_FALSE);
就可以禁止调整窗口大小

有问题欢迎指出交流讨论,谢谢大家

25赞

mark~~

mark~谢谢分享

赞赞赞~~

mark!