顺利完成了打包以及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中把这些文件导入进去
调用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);
就可以禁止调整窗口大小
有问题欢迎指出交流讨论,谢谢大家