win10 vs2022 搭建 cocos2d-x 3.17 開發環境

来源:https://www.cnblogs.com/khlbat/archive/2023/06/08/17465004.html
-Advertisement-
Play Games

# 引擎下載地址 https://cocos2d-x.org/download/ 也可以在 github 下載 https://github.com/cocos2d/cocos2d-x/tags # 手冊地址 https://docs.cocos2d-x.org/cocos2d-x/v3/zh/ # ...


引擎下載地址

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

安裝註意事項

  1. 需要 python2 , 安裝後可以用 python2 的絕對路徑運行 cocos 的 setup.py
  2. 如何沒有把 python2 加入到環境變數, 可以修改引擎路徑下的 tools\cocos2d-console\bin\cocos.bat
@echo off
@python2 絕對路徑 "%~dp0/cocos.py" %*

新建項目

cocos new HelloCocos -p com.laolang.hellococos -l cpp

然後打開 proj.win32 目錄下的 .sln 文件, 提示升級點確認, 編譯運行即可

中文亂碼問題

參考:
Cocos2d-x 中文標題設置
Cocos2d-x 中文內容設置

標題直接用下麵的函數轉一下, Label等內容的中文顯示還需要中文字體的支持, 可以從網上下載或者從C盤拷一個, 例如宋體常規, 此字體文件名為:simsun.ttc

std::string CommonUtil::GBKToUTF8(const std::string& strGBK)
{
    std::string strOutUTF8 = "";
    WCHAR* str1;
    int n = MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, NULL, 0);
    str1 = new WCHAR[n];
    MultiByteToWideChar(CP_ACP, 0, strGBK.c_str(), -1, str1, n);
    n = WideCharToMultiByte(CP_UTF8, 0, str1, -1, NULL, 0, NULL, NULL);
    char* str2 = new char[n];
    WideCharToMultiByte(CP_UTF8, 0, str1, -1, str2, n, NULL, NULL);
    strOutUTF8 = str2;
    delete[]str1;
    str1 = NULL;
    delete[]str2;
    str2 = NULL;
    return strOutUTF8;
}

hello world 關鍵代碼註釋

AppDelegate的applicationDidFinishLaunching方法
其四個方法含義分別為(https://blog.csdn.net/xiayao2012/article/details/49472423)

initGLContextAttrs();//設置 OpenGL環境
applicationDidFinishLaunching(); //邏輯初始化
applicationDidEnterBackground(); //切換到後臺
applicationWillEnterForeground(); //切換到前臺

bool AppDelegate::applicationDidFinishLaunching() {
    // 初始化 director
    auto director = Director::getInstance();
    auto glview = director->getOpenGLView();
    // 初始化 opengl 試圖
    if(!glview) {
        glview = GLViewImpl::createWithRect(CommonUtil::GBKToUTF8("第一個 Cocos2d-X 程式"), cocos2d::Rect(0, 0, resolutionSize.width, resolutionSize.height));
        director->setOpenGLView(glview);
    }

    // 開啟左下角 FPS 狀態信息
    director->setDisplayStats(true);
    // 設置 FPS 為 60, 預設為 60
    director->setAnimationInterval(1.0f / 60);

    // 設置屏幕解析度
    glview->setDesignResolutionSize(resolutionSize.width, resolutionSize.height, ResolutionPolicy::NO_BORDER);

    register_all_packages();

    // 創建 Hello World 場景, 對象的釋放交給 cocos2d-x 管理
    auto scene = HelloWorld::createScene();

    // 運行
    director->runWithScene(scene);

    return true;
}

HelloWorldScene的init方法

bool HelloWorld::init()
{
    // 先執行父類的 init
    if (!Scene::init())
    {
        return false;
    }

    // 獲得可視區域大小
    const auto visibleSize = Director::getInstance()->getVisibleSize();
    log("width:%f , height:%f", visibleSize.width, visibleSize.height);
    // 獲得原點位置 左下角
    const Vec2  origin = Director::getInstance()->getVisibleOrigin();
    log("x:%f , y:%f", origin.x, origin.y);


    // 關閉按鈕, 是一個 MenuItemImage, 表示一個菜單項
    auto closeItem = MenuItemImage::create(
        "CloseNormal.png", // 非選中狀態
        "CloseSelected.png", // 選中狀態
        CC_CALLBACK_1(HelloWorld::menuCloseCallback, this) // 回調函數
    );
    // 按鈕位置, 視窗右下角
    const float x = origin.x + visibleSize.width - closeItem->getContentSize().width / 2;
    const float y = origin.y + closeItem->getContentSize().height / 2;
    closeItem->setPosition(Vec2(x, y));

    // 把菜單項添加到菜單中
    auto menu = Menu::create(closeItem, NULL);
    menu->setPosition(Vec2::ZERO);
    // 菜單添加到當前層
    this->addChild(menu, 1);

    // Hello World 文本
    const auto label = Label::createWithTTF(CommonUtil::GBKToUTF8("第一個程式"), CommonUtil::GetDefaultFontPath(), 24);
    // 設置文本位置
    label->setPosition(Vec2(origin.x + visibleSize.width / 2, origin.y + visibleSize.height - label->getContentSize().height));
    // 文本添加到當前層
    this->addChild(label, 1);

    // 創建背景圖片
    const auto sprite = Sprite::create("HelloWorld.png");
    // 圖片位置
    sprite->setPosition(Vec2(visibleSize.width / 2 + origin.x, visibleSize.height / 2 + origin.y));
    // 背景圖片添加到當前層
    this->addChild(sprite, 0);

    return true;
}

本文來自博客園,作者:laolang2016,轉載請註明原文鏈接:https://www.cnblogs.com/khlbat/p/17465004.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • Vue3簡介 Vue3是Vue.js的最新版本,於2020年9月18日正式發佈。Vue3相比Vue2有很多改進和優化,包括但不限於: 更快的渲染速度:Vue3通過使用Proxy代理對象和優化虛擬DOM演算法等方式,提高了渲染性能。 更小的體積:Vue3的體積比Vue2更小,打包後的文件更小,載入速度更 ...
  • # 1. Iconfont * 阿裡傾力打造的矢量圖標管理、交流平臺,設計師將圖標上傳到 iconfont 平臺,用戶可以自定義下載多種格式的icon,平臺也可將圖標轉換為字體,便於前端工程師自由調整與調用。 * 地址:Iconfont ![](https://img2023.cnblogs.com ...
  • 一、前言 針對目錄結構、CSS規範、JavaScript規範、Vue規範 可參照官方給出的 [風格指南](https://v2.cn.vuejs.org/v2/style-guide/index.html) 這裡主要總結業務開發中常遇到的代碼問題和實踐,幫助大家後續各自做好codeReview,一些 ...
  • 這裡給大家分享我在網上總結出來的一些知識,希望對大家有所幫助 前言 🛰🛰 我們在無論是在查閱別人的代碼,還是在實際項目開發的過程中,肯定都會使用導入導出的功能,有時候我們會搞混這幾種方式到底有什麼區別,今天我們就來細緻的區分一下: 導入導出方式⚔️⚔️ 我們都知道最常見的幾種導出方式無非是exp ...
  • 我們要尋求更好的技術方案,推動架構的良性演進,每一步都是經過深度思考的,而架構設計方法就是幫助我們思考的框架。通過做架構設計,我們應該提升軟體的質量和效率,降低風險和成本。 ...
  • ![cover.jpeg](https://p9-juejin.byteimg.com/tos-cn-i-k3u1fbpfcp/e86fc6dcb452419498a7db6878591e30~tplv-k3u1fbpfcp-watermark.image?) #### 1 人工智慧的發展歷程 如今 ...
  • 前段時期我負責部門內部主幹開發落地相關事宜,這個過程中,也真真切切的體會到了多人開發過程中,面對特性分支管理中,大家遇到的一些困擾,尤其面對敏捷迭代的開發方式,合併衝突,集成測試,代碼重用等方面,都與高效兩個字背離。當然,我在推進主幹開發過程中,也遇到了一些問題和坎坷,在這裡,集中的做一次分享。 ...
  • [toc] # 一、爬取目標 本次爬取的目標是,愛奇藝電視劇類目下的10個榜單:[電視劇風雲榜-愛奇藝風雲榜](https://www.iqiyi.com/ranks1/2/0) ​![愛奇藝頁面](https://img2023.cnblogs.com/blog/2864563/202306/28 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...