怎么运行cocos2dx 3.x simulator?

时间:2023-03-09 03:17:19
怎么运行cocos2dx 3.x simulator?

1.simulator的好处是:

快速切换分辨率;F5快速重新启动项目;

这对于脚本语言来说都是很方便快捷的。

怎么运行cocos2dx 3.x simulator?

2.涉及到显示参数的文件有两个:

①lang,这个是菜单的语言文件,如果没有这个文件的话,则上图的菜单为英文。(这个文件可以在ide-support文件夹找到,但是在3.13中去掉了这个文件夹)

②config.json,这个文件定义了一些分辨率之类的参数,将在下面列出来。

③还有启动参数,也在下面列出来。

3.启动参数(不提供启动参数,将不能正常运行,在windows下可以使用bat文件来提供启动参数进行启动)

具体可以参看ProjectConfig.cpp文件里的parseCommandLine函数实现

①-workdir:工作目录

②-writable-path:写入路径

③-entry:脚本入口文件

④-landscape:是否横屏

⑤-portrait:是否竖屏

⑥-resolution:窗体分辨率

⑦-scale:缩放比例

⑧-write-debug-log:日志路径

⑨-console:是否显示控制台

⑩-position:窗体偏移位置

⑪-debugger:调试器类型

⑫-app-menu:是否显示菜单

⑬-resize-window:窗口大小是否可变

⑭-retina-display:是否retina

⑮-port:没有实现功能

⑯-listen:绑定监听地址

⑰-search-path:资源搜索路径

⑱-first-search-path:首个资源搜索路径

⑲-language-data-path:语言数据路径

在windows下写的运行bat如下(simulator.exe当前目录为工作目录;当前目录下的src和res为资源搜索路径;窗口分辨率1134x750):

@echo off
start simulator.exe -workdir ./ -search-path ./src;./res -resolution 1334x750
exit

4.config.json配置文件

具体可以参看ConfigParser.cpp文件里的readConfig函数实现

①width:设计分辨率的宽

②height:设计分辨率的高

③name:窗口显示的名字

④isLandscape:是否横屏

⑤entry:脚本入口文件

⑥consolePort:控制台监听端口

⑦debugPort:没有实现

⑧uploadPort:文件上传端口

⑨isWindowTop:没有实现

⑩simulator_screen_size数组:菜单按钮显示的分辨率

5.个性化需求:让运行窗口在屏幕中间

①-position可以设置偏移位置,如果屏幕分辨率都一样的话可以设置这个属性,另外一个方法就是增加一个参数。

②增加一个-screen-center参数

在ProjectConfig.h/ProjectConfig.cpp中增加_isInScreenCenter属性(仿照_isResizeWindow属性增加对应的方法)

③ProjectConfig.h增加代码:

怎么运行cocos2dx 3.x simulator?

怎么运行cocos2dx 3.x simulator?

④ProjectConfig.cpp增加代码:

怎么运行cocos2dx 3.x simulator?

怎么运行cocos2dx 3.x simulator?

读取配置文件中的数据:

怎么运行cocos2dx 3.x simulator?

⑤在SimulatorWin.cpp中增加代码

    Vec2 pos = _project.getWindowOffset();
if (pos.x != && pos.y != )
{
RECT rect;
GetWindowRect(_hwnd, &rect);
if (pos.x < )
pos.x = ;
if (pos.y < )
pos.y = ;
MoveWindow(_hwnd, pos.x, pos.y, rect.right - rect.left, rect.bottom - rect.top, FALSE);
}
//增加的代码
else if (_project.isInScreenCenter()){
RECT rect;
GetWindowRect(_hwnd, &rect);
int screen_x = GetSystemMetrics(SM_CXSCREEN);
int screen_y = GetSystemMetrics(SM_CYSCREEN);
SetWindowPos(_hwnd, HWND_TOP, (screen_x + rect.left - rect.right) / , (screen_y + rect.top - rect.bottom) / , , , SWP_NOSIZE | SWP_NOZORDER);
}

6.个性化需求:增加-console_leftop参数让控制台窗口出现在屏幕左上角的位置

①和上面的代码同理,增加_isConsoleLeftTop属性

②在SimulatorWin.cpp中增加代码

    if (_project.isShowConsole())
{
AllocConsole();
_hwndConsole = GetConsoleWindow();
if (_hwndConsole != NULL)
{
ShowWindow(_hwndConsole, SW_SHOW);
BringWindowToTop(_hwndConsole);
freopen("CONOUT$", "wt", stdout);
freopen("CONOUT$", "wt", stderr); HMENU hmenu = GetSystemMenu(_hwndConsole, FALSE);
if (hmenu != NULL)
{
DeleteMenu(hmenu, SC_CLOSE, MF_BYCOMMAND);
} //增加的代码
if (_project.isConsoleLeftTop()){
RECT rect;
GetWindowRect(_hwndConsole, &rect);
MoveWindow(_hwndConsole, , , rect.right - rect.left, rect.bottom - rect.top, FALSE);
}
}
}