目录

1.简介

2.核心架构

3.安装与配置

3.1.系统要求

3.2.安装 Cocos2d-x 引擎

4.基础使用教程

4.1.创建第一个项目

4.2.项目结构解析

4.3.核心代码示例:HelloWorld 场景

4.4.核心功能实现

4.5.项目编译与运行

5.高级功能

5.1.性能优化技巧

5.2.热更新实现(Lua)

5.3.多分辨率适配

6.应用场景与行业案例

6.1.应用场景

6.2.知名游戏案例

6.3.与其他引擎对比分析

7.官方资源

8.总结


1.简介

        Cocos2d-x 是一个开源跨平台 2D 游戏开发框架,用 C++ 编写,支持 C++、Lua 和 JavaScript 三种编程语言开发Cocos。为游戏逻辑的编写带来了极大的灵活性。其跨平台特性更是强大,支持 iOS、Android 等智能手机平台,Windows、Mac 等桌面操作系统,以及 Chrome、Safari、IE 等 HTML5 浏览器 ,让开发者无需为不同平台的适配而烦恼。它源自 Cocos2d-iphone,2010 年首次发布,目前已成为全球最受欢迎的 2D 游戏引擎之一,尤其在移动游戏领域占据重要地位。

官方地址:https://www.cocos.com/cocos2dx

GitHub仓库地址:https://github.com/cocos2d/cocos2d-x

        像知名的《捕鱼达人》系列游戏,就借助 Cocos2d - x 实现了高效的 2D 图形渲染和流畅的动画效果,通过其丰富的 API,轻松实现了鱼群游动的逼真动画、道具的特效展示等。在开发过程中,利用 Cocos2d - x 的场景管理功能,可以方便地切换游戏主界面、关卡选择界面和游戏内场景;使用其物理引擎,能为游戏中的碰撞检测提供准确的计算,比如鱼与渔网的碰撞判定 ,大大提升了游戏的趣味性和真实感。

        核心特征:

特点 说明
跨平台能力 一套代码运行于 iOS、Android、Windows、macOS、Linux、HTML5 等平台Cocos
高性能 C++ 底层 + OpenGL/Vulkan 渲染,针对移动设备深度优化,低内存占用
轻量级 核心代码精简,编译快速,适合资源受限环境
多语言支持 C++(原生)、Lua (热更新)、JavaScript (Web) 三种开发模式Cocos
完整工具链 包含场景编辑器、粒子编辑器、动画编辑器等配套工具
开源免费 MIT 许可证,可自由修改和商用,无版税负担

2.核心架构

Cocos2d-x 遵循场景 (Scene)- 层 (Layer)- 精灵 (Sprite) 三层架构,配合导演 (Director) 核心控制机制:

  • Director:游戏的核心控制器,管理场景切换、游戏循环和渲染管道
  • Scene:游戏场景容器,包含多个 Layer,负责场景逻辑和切换
  • Layer:层容器,处理用户输入、显示 UI 和游戏元素,支持透明叠加
  • Sprite:2D 图像显示对象,支持动画、变换和批处理渲染
  • Node:所有游戏对象的基类,提供位置、旋转、缩放等基础属性

3.安装与配置

3.1.系统要求

平台 最低配置 推荐配置
Windows Win7+,VS2017+,Python2.7 Win10+,VS2022,Python2.7.18
macOS macOS 10.15+,Xcode 12+ macOS 12+,Xcode 14+
Linux Ubuntu 18.04+,GCC 7+ Ubuntu 20.04+,GCC 9+

构建要求:

  • Mac OS X 10.7+, Xcode 8+
  • or Ubuntu 14.04+, CMake 3.1+
  • or Windows 7+, VS 2015
  • Python 2.7.5+(NOT Python 3)
  • NDK r16+ is required to build Android games
  • Android Studio 3.0.0+ to build Android games(tested with 3.0.0)
  • JRE or JDK 1.6+ is required for web publishing

运行时要求:

  • iOS 8.0+ for iPhone / iPad games
  • Android 3.0.0+ for Android
  • OS X v10.9+ for Mac games
  • Windows 7+ for Win games

3.2.安装 Cocos2d-x 引擎

1.下载稳定版(推荐 3.17.2 或 4.x)

https://www.cocos.com/cocos2d-x

2.解压到无中文无空格路径(如D:\cocos2d-x-3.17.2

3.运行环境配置脚本:

cd D:\cocos2d-x-3.17.2
python setup.py  # 配置环境变量,按提示输入SDK/NDK路径

4.重启命令行,验证安装:

cocos -v  # 显示版本信息表示成功

4.基础使用教程

4.1.创建第一个项目

# 创建C++项目(推荐)
cocos new MyGame -p com.mycompany.mygame -l cpp -d D:\Projects

# 创建Lua项目(热更新)
cocos new MyGameLua -p com.mycompany.mygamelua -l lua -d D:\Projects

# 创建JavaScript项目(Web)
cocos new MyGameJS -p com.mycompany.mygamejs -l js -d D:\Projects

参数说明:

  • -p:包名(Android/iOS 必需)
  • -l:语言类型(cpp/lua/js)
  • -d:项目保存目录

4.2.项目结构解析

MyGame/
├── Classes/           # C++源代码(核心逻辑)
│   ├── AppDelegate.cpp/h  # 应用入口,初始化导演和场景
│   ├── HelloWorldScene.cpp/h  # 默认场景,包含示例代码
├── Resources/         # 资源文件(图片、音频、配置)
├── proj.android/      # Android Studio项目文件
├── proj.ios_mac/      # Xcode项目文件
├── proj.win32/        # Visual Studio项目文件
└── CMakeLists.txt     # CMake构建配置文件

4.3.核心代码示例:HelloWorld 场景

// HelloWorldScene.cpp
#include "HelloWorldScene.h"

USING_NS_CC;  // 使用Cocos2d-x命名空间

Scene* HelloWorld::createScene() {
    auto scene = Scene::create();  // 创建场景
    auto layer = HelloWorld::create();  // 创建层
    scene->addChild(layer);  // 添加层到场景
    return scene;
}

bool HelloWorld::init() {
    if (!Layer::init()) return false;
    
    // 1. 获取屏幕尺寸
    auto visibleSize = Director::getInstance()->getVisibleSize();
    Vec2 origin = Director::getInstance()->getVisibleOrigin();
    
    // 2. 添加背景
    auto background = Sprite::create("background.png");  // 创建精灵
    background->setPosition(Vec2(visibleSize.width/2 + origin.x, visibleSize.height/2 + origin.y));
    this->addChild(background, 0);  // 层级0(底层)
    
    // 3. 添加标题文字
    auto label = Label::createWithTTF("Hello Cocos2d-x!", "fonts/Marker Felt.ttf", 24);
    label->setPosition(Vec2(origin.x + visibleSize.width/2, origin.y + visibleSize.height - label->getContentSize().height));
    this->addChild(label, 1);  // 层级1(上层)
    
    // 4. 添加按钮
    auto closeItem = MenuItemImage::create(
        "CloseNormal.png",  // 正常状态图片
        "CloseSelected.png",  // 选中状态图片
        CC_CALLBACK_1(HelloWorld::menuCloseCallback, this));  // 点击回调
    closeItem->setPosition(Vec2(origin.x + visibleSize.width - closeItem->getContentSize().width/2, origin.y + closeItem->getContentSize().height/2));
    
    auto menu = Menu::create(closeItem, NULL);
    menu->setPosition(Vec2::ZERO);
    this->addChild(menu, 1);
    
    return true;
}

// 按钮点击回调函数
void HelloWorld::menuCloseCallback(Ref* pSender) {
    Director::getInstance()->end();  // 退出游戏
}

4.4.核心功能实现

1.场景切换

// 替换场景(无过渡)
Director::getInstance()->replaceScene(GameScene::createScene());

// 带淡入淡出过渡的场景切换
auto transition = TransitionFade::create(0.5f, GameScene::createScene(), Color3B::WHITE);
Director::getInstance()->replaceScene(transition);

// 场景入栈(保留当前场景)
Director::getInstance()->pushScene(PauseScene::createScene());

// 场景出栈(返回上一场景)
Director::getInstance()->popScene();

2.精灵动画

// 创建帧动画
Vector<SpriteFrame*> animFrames;
animFrames.reserve(4);
for (int i = 1; i <= 4; i++) {
    auto frame = SpriteFrame::create(StringUtils::format("player_%d.png", i), Rect(0, 0, 64, 64));
    animFrames.pushBack(frame);
}

// 创建动画对象
auto animation = Animation::createWithSpriteFrames(animFrames, 0.1f);  // 0.1秒/帧
auto animate = Animate::create(animation);

// 循环播放
auto sprite = Sprite::create("player_1.png");
sprite->runAction(RepeatForever::create(animate));

3.物理引擎集成(Box2D)

// 启用物理世界
auto scene = Scene::createWithPhysics();
scene->getPhysicsWorld()->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);  // 显示调试信息

// 创建物理边界
auto edgeBody = PhysicsBody::createEdgeBox(visibleSize, PHYSICSBODY_MATERIAL_DEFAULT, 3.0f);
auto edgeNode = Node::create();
edgeNode->setPosition(Vec2(visibleSize.width/2, visibleSize.height/2));
edgeNode->setPhysicsBody(edgeBody);
scene->addChild(edgeNode);

// 创建物理精灵
auto spriteBody = PhysicsBody::createBox(Size(64, 64), PhysicsMaterial(0.1f, 0.5f, 0.5f));
auto physicsSprite = Sprite::create("box.png");
physicsSprite->setPhysicsBody(spriteBody);
physicsSprite->setPosition(Vec2(100, 100));
scene->addChild(physicsSprite);

4.用户输入处理

// 触摸事件监听
auto listener = EventListenerTouchOneByOne::create();
listener->onTouchBegan = [](Touch* touch, Event* event) {
    auto target = static_cast<Sprite*>(event->getCurrentTarget());
    Vec2 locationInNode = target->convertToNodeSpace(touch->getLocation());
    Size s = target->getContentSize();
    Rect rect = Rect(0, 0, s.width, s.height);
    
    if (rect.containsPoint(locationInNode)) {
        // 点击精灵内部
        return true;  // 继续接收后续事件
    }
    return false;
};

// 注册监听器
_eventDispatcher->addEventListenerWithSceneGraphPriority(listener, sprite);

4.5.项目编译与运行

# 编译并运行Windows项目
cd D:\Projects\MyGame
cocos run -p win32 -m debug  # debug模式

# 编译Android项目(需配置NDK)
cocos run -p android --ap 21  # 最低API 21

# 编译iOS项目
cocos run -p ios -m release  # release模式

# 编译HTML5项目
cocos run -p web -m release

5.高级功能

5.1.性能优化技巧

  • 纹理压缩:使用 PVR、ETC 等压缩格式,减少内存占用和加载时间

  • 对象池:预创建常用对象(如子弹、敌人),避免频繁 new/delete

  • 资源异步加载:使用AssetManagerAsyncTaskPool后台加载资源,避免卡顿

  • 自动释放池:合理使用PoolManager管理临时对象,防止内存泄漏

  • 精灵批处理:使用SpriteBatchNode合并相同纹理的精灵渲染,减少 Draw Call

auto batchNode = SpriteBatchNode::create("spritesheet.png");
batchNode->addChild(sprite1);
batchNode->addChild(sprite2);  // 同纹理精灵共享渲染批次

5.2.热更新实现(Lua)

  1. 资源打包:使用cocos package工具打包资源为 zip 包
  2. 版本检查:通过 HTTP 请求服务器版本号,对比本地版本
  3. 差异下载:下载更新包并解压到可写目录
  4. Lua 代码热替换:使用package.loaded重新加载修改的 Lua 模块Cocos

5.3.多分辨率适配

// 设置设计分辨率
glview->setDesignResolutionSize(960, 640, ResolutionPolicy::FIXED_WIDTH);

// 三种适配策略
- ResolutionPolicy::EXACT_FIT:拉伸填充整个屏幕(可能变形)
- ResolutionPolicy::NO_BORDER:裁剪适配(无黑边)
- ResolutionPolicy::SHOW_ALL:显示全部内容(可能有黑边)

6.应用场景与行业案例

6.1.应用场景

场景类型 优势说明 典型案例
移动 2D 游戏 轻量级 + 高性能,适配低端设备,开发周期短 开心消消乐、捕鱼达人、刀塔传奇
休闲益智游戏 快速开发 + 跨平台,适合中小团队和独立开发者 2048、别踩白块儿、贪吃蛇大作战
教育类应用 动画效果 + 交互简单,适合儿童教育产品 宝宝巴士系列、洪恩识字
HTML5 小游戏 一键编译 Web 版本,支持浏览器和小程序嵌入Cocos 微信小游戏、QQ 空间小游戏
广告互动 H5 轻量 + 视觉效果丰富,加载速度快 品牌宣传 H5、活动互动页面
企业展示应用 跨平台 + 低成本,适合产品演示和互动展示 房地产 3D 展示、汽车配置器

6.2.知名游戏案例

  • 《开心消消乐》:全球知名消除类游戏,Cocos2d-x 早期成功案例
  • 《刀塔传奇》:卡牌 RPG 标杆,开创手游卡牌新时代
  • 《捕鱼达人》系列:经典休闲游戏,跨平台发行
  • 《球球大作战》:实时 multiplayer 游戏,展现 Cocos2d-x 网络性能
  • 《阴阳师:百闻牌》:卡牌对战游戏,结合 Cocos2d-x 与 3D 渲染技术

6.3.与其他引擎对比分析

对比项 Cocos2d-x Unity Unreal Engine
核心优势 2D 性能、轻量级、跨平台、热更新 3D 能力、可视化编辑、资源丰富 顶级渲染、3D 物理、影视级效果
学习曲线 中等(C++ 基础) 平缓(可视化为主) 陡峭(专业级工具)
性能表现 2D 最优,3D 较弱 均衡,适合中重度游戏 顶级,适合 AAA 级游戏
开发效率 代码驱动,适合技术型团队 可视化驱动,适合快速迭代 专业级工具,适合大型团队
商业授权 开源免费(MIT) 免费 + 订阅(收入分成) 免费 + 5% 版税(超过 100 万美元)
最佳场景 2D 手游、休闲游戏、轻量级应用 3D 手游、跨平台游戏、VR/AR 主机游戏、3A 大作、影视制作

7.官方资源

8.总结

        Cocos2d-x 凭借其轻量级、高性能、跨平台的特性,成为 2D 游戏开发的首选框架之一,特别适合移动平台和快速迭代项目。通过掌握核心架构、基础 API 和性能优化技巧,开发者可以高效构建从简单休闲游戏到复杂商业应用的各类产品。对于初学者,建议从 C++ 版本入手,逐步掌握 Lua 热更新和 Cocos Creator 可视化开发,形成完整的技术栈。

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐