win10 vs2022 搭建 cocos2d-x 3.17 开发环境

打印 上一主题 下一主题

主题 912|帖子 912|积分 2736

引擎下载地址

https://cocos2d-x.org/download/
也可以在 github 下载
https://github.com/cocos2d/cocos2d-x/tags
手册地址

https://docs.cocos2d-x.org/cocos2d-x/v3/zh/
api 文档地址

https://docs.cocos2d-x.org/api-ref/cplusplus/v3x/index.html
hello world

安装注意事项


  • 需要 python2 , 安装后可以用 python2 的绝对路径运行 cocos 的 setup.py
  • 如何没有把 python2 加入到环境变量, 可以修改引擎路径下的 tools\cocos2d-console\bin\cocos.bat
  1. @echo off
  2. @python2 绝对路径 "%~dp0/cocos.py" %*
复制代码
新建项目
  1. cocos new HelloCocos -p com.laolang.hellococos -l cpp
复制代码
然后打开 proj.win32 目录下的 .sln 文件, 提示升级点确认, 编译运行即可
中文乱码问题

参考:
Cocos2d-x 中文标题设置
Cocos2d-x 中文内容设置
标题直接用下面的函数转一下, Label等内容的中文显示还需要中文字体的支持, 可以从网上下载或者从C盘拷一个, 例如宋体常规, 此字体文件名为:simsun.ttc
  1. std::string CommonUtil::GBKToUTF8(const std::string& strGBK)
  2. {
  3.     std::string strOutUTF8 = "";
  4.     WCHAR* str1;
  5.     int n = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0);
  6.     str1 = new WCHAR[n];
  7.     MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, str1, n);
  8.     n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL);
  9.     char* str2 = new char[n];
  10.     WideCharToMultiByte(CP_UTF8, 0, str1, -1, str2, n, NULL, NULL);
  11.     strOutUTF8 = str2;
  12.     delete[]str1;
  13.     str1 = NULL;
  14.     delete[]str2;
  15.     str2 = NULL;
  16.     return strOutUTF8;
  17. }
复制代码
hello world 关键代码注释

AppDelegate的applicationDidFinishLaunching方法
其四个方法含义分别为(https://blog.csdn.net/xiayao2012/article/details/49472423)
initGLContextAttrs();//设置 OpenGL环境
applicationDidFinishLaunching();  //逻辑初始化
applicationDidEnterBackground();  //切换到后台
applicationWillEnterForeground(); //切换到前台
  1. bool AppDelegate::applicationDidFinishLaunching() {
  2.     // 初始化 director
  3.     auto director = Director::getInstance();
  4.     auto glview = director->getOpenGLView();
  5.     // 初始化 opengl 试图
  6.     if(!glview) {
  7.         glview = GLViewImpl::createWithRect(CommonUtil::GBKToUTF8("第一个 Cocos2d-X 程序"), cocos2d::Rect(0, 0, resolutionSize.width, resolutionSize.height));
  8.         director->setOpenGLView(glview);
  9.     }
  10.     // 开启左下角 FPS 状态信息
  11.     director->setDisplayStats(true);
  12.     // 设置 FPS 为 60, 默认为 60
  13.     director->setAnimationInterval(1.0f / 60);
  14.     // 设置屏幕分辨率
  15.     glview->setDesignResolutionSize(resolutionSize.width, resolutionSize.height, ResolutionPolicy::NO_BORDER);
  16.     register_all_packages();
  17.     // 创建 Hello World 场景, 对象的释放交给 cocos2d-x 管理
  18.     auto scene = HelloWorld::createScene();
  19.     // 运行
  20.     director->runWithScene(scene);
  21.     return true;
  22. }
复制代码
HelloWorldScene的init方法
  1. bool HelloWorld::init()
  2. {
  3.     // 先执行父类的 init
  4.     if (!Scene::init())
  5.     {
  6.         return false;
  7.     }
  8.     // 获得可视区域大小
  9.     const auto visibleSize = Director::getInstance()->getVisibleSize();
  10.     log("width:%f , height:%f", visibleSize.width, visibleSize.height);
  11.     // 获得原点位置 左下角
  12.     const Vec2  origin = Director::getInstance()->getVisibleOrigin();
  13.     log("x:%f , y:%f", origin.x, origin.y);
  14.     // 关闭按钮, 是一个 MenuItemImage, 表示一个菜单项
  15.     auto closeItem = MenuItemImage::create(
  16.         "CloseNormal.png", // 非选中状态
  17.         "CloseSelected.png", // 选中状态
  18.         CC_CALLBACK_1(HelloWorld::menuCloseCallback, this) // 回调函数
  19.     );
  20.     // 按钮位置, 窗口右下角
  21.     const float x = origin.x + visibleSize.width - closeItem->getContentSize().width / 2;
  22.     const float y = origin.y + closeItem->getContentSize().height / 2;
  23.     closeItem->setPosition(Vec2(x, y));
  24.     // 把菜单项添加到菜单中
  25.     auto menu = Menu::create(closeItem, NULL);
  26.     menu->setPosition(Vec2::ZERO);
  27.     // 菜单添加到当前层
  28.     this->addChild(menu, 1);
  29.     // Hello World 文本
  30.     const auto label = Label::createWithTTF(CommonUtil::GBKToUTF8("第一个程序"), CommonUtil::GetDefaultFontPath(), 24);
  31.     // 设置文本位置
  32.     label->setPosition(Vec2(origin.x + visibleSize.width / 2, origin.y + visibleSize.height - label->getContentSize().height));
  33.     // 文本添加到当前层
  34.     this->addChild(label, 1);
  35.     // 创建背景图片
  36.     const auto sprite = Sprite::create("HelloWorld.png");
  37.     // 图片位置
  38.     sprite->setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y));
  39.     // 背景图片添加到当前层
  40.     this->addChild(sprite, 0);
  41.     return true;
  42. }
复制代码
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

火影

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表