cocos2dx 3.10 黄金矿工学习笔记

一 目的

学习,并作为练习的一个案例

github 地址  https://github.com/baidang201/goldminer


教程地址:

麦子学院  cocos2dx 课程,黄金矿工


二 大纲

黄金矿工 大纲
1 试玩
  //主菜单
2 使用cocos studio制作菜单界面
3 使用cocos2dx加载游戏菜单界面
4 使用cocos studio制作动画
5 游戏中播放动画效果
6 把设置界面添加到菜单界面中1,2,3
9 关闭设置界面
10 添加音效和背景音乐
11 使用UserDefault保存游戏数据

//主界面
12 调节游戏背景和金块布局界面
13 吧分数牌和倒计时牌添加到游戏中
14 制作矿工类Miner
15 添加关卡提示
16 添加矿工入场动画
17 添加倒计时入场动画
18 把钩子添加到矿工中
19 添加钩子摆动动画
20 添加放钩子事件监听器
21 添加抛绳子动作
22 在主游戏中添加物理世界和世界边界
23 添加碰撞监听器
24 添加拉绳子动作

游戏逻辑
25 获取游戏中的金块,并设置为PhysicsBody
26 钩子抓到金块后合拢
27 创建金块类
28 抓金块1,2
30 控制拉金块的速度
31 获取金块更新游戏数据1,2
33 创建暂停类,并在游戏中添加暂停设置功能
34 暂停和恢复游戏
35 实现退出关卡功能
36 添加退出关卡提示
37 添加矿工离开动画
38 更新下一关按钮状态,并注册点击事件
39 添加倒计时功能
40 游戏失败提示和保存数据
41 游戏成功提示和保存数据
42 添加多关卡
43 打包部署成apk,上线


三 小结

1 cocosstudio csb层加载加载

《1 头文件 

#include "cocostudio/CocoStudio.h"
#include "ui/CocosGUI.h"

《2 使用

    auto levelTop = CSLoader::createNode("leveltop.csb");//使用csb创建层

    addChild(levelTop);//层加入父节点使用

     auto Image_1 = static_cast<ImageView*> (Helper::seekWidgetByName(static_cast<Widget*>(levelTop), "Image_1"));//查找层里面的应用


2 cocosstudio动画(配合csb层加载使用)

《1 头文件 

#include "cocostudio/CocoStudio.h"
#include "ui/CocosGUI.h"

《2 命名空间

using namespace cocostudio::timeline;

《3使用

    auto sysMenu = CSLoader::createNode("menu.csb");使用csb创建层
    addChild(sysMenu);//层加入父节点使用

    auto actTimelineIn = CSLoader::createTimeline("menu.csb");//加载包含动画的csb层文件
    actTimelineIn->gotoFrameAndPlay(0, 60, false); //设置播放参数
    sysMenu->runAction(actTimelineIn);//播放


3 骨骼动画

《1 头文件

#include "spine\spine-cocos2dx.h"

《2 命名空间

using namespace spine;

《3 使用

    SkeletonAnimation* miner = SkeletonAnimation::createWithFile("iphonehd/miner.json", "iphonehd/miner.atlas", 0.6);//初始化骨骼动画对象
    addChild(miner);

   miner->addAnimation(0, "walk", true, 0);//播放动画
    miner->addAnimation(0, "wait", false, 2);//播放动画

《4 创建骨骼动画工具  spine,cocosstudio


4 九宫格

原理,设置4个角不缩放,只缩放中间和不包含4个角区域的边缘。

《1 头文件

#include "cocos-ext.h" //包含cocos-ext.h头文件

《2 命名空间

using namespace cocos2d::extension; //引用cocos2d::extension命名空间

《3 使用

//第一个Rect是指定Scale9Sprite的区域,第二个是指定中间用于拉伸的区域
ui::Scale9Sprite *scale9Sprite = ui::Scale9Sprite::create("sample.png", Rect(0, 0, 142, 80), Rect(10,10, 122, 60));
//目标大小
scale9Sprite -> setPreferredSize(visibleSize);
scale9Sprite -> setPosition(visibleSize * 0.5f);
this -> addChild(scale9Sprite);


5  物理世界

《1 概述

...1 一个物理世界,只有一个 PhysicsWorld

...2 物理世界的body,要和cocos2dx事件的node绑定,才能触发碰撞事件

...3 碰撞有两个情况,互不干扰。

.....(1 A物体的碰撞测试码ContactTestBitmask和B物体的碰撞测试码ContactTestBitmask相与,不为0

.....(1 A物体的类别码CategoryBitmask和B物体的碰撞码CollisionBitmask相与,不为0

《2 使用

    // 'scene' is an autorelease object
    auto scene = Scene::createWithPhysics();//创建物理世界    
    PhysicsWorld* word = scene->getPhysicsWorld();
    word->setGravity(Vec2::ZERO);//设置二维两个方向重力为0,0
    word->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);

    // 'layer' is an autorelease object
    auto layer = MainGame::create();

    Size size = Director::getInstance()->getWinSize();
    PhysicsBody* body = PhysicsBody::createEdgeBox(size);//创建边界
    //设置碰撞掩码
    body->setCategoryBitmask(10);
    body->setCollisionBitmask(10);
    body->setContactTestBitmask(10);

    Node* node = Node::create();
    node->setPosition(size/2);
    node->setPhysicsBody(body);//物理世界的body和cocos世界的node绑定
    node->setTag(WORLDTAG);
    scene->addChild(node);
    word->setGravity(Vec2::ZERO);//设置二维两个方向重力为0,0
    word->setDebugDrawMask(PhysicsWorld::DEBUGDRAW_ALL);

    // 'layer' is an autorelease object
    auto layer = MainGame::create();

    Size size = Director::getInstance()->getWinSize();
    PhysicsBody* body = PhysicsBody::createEdgeBox(size);//创建边界
    //设置碰撞掩码
    body->setCategoryBitmask(10);
    body->setCollisionBitmask(10);
    body->setContactTestBitmask(10);

    Node* node = Node::create();
    node->setPosition(size/2);
    node->setPhysicsBody(body);//物理世界的body和cocos世界的node绑定
    node->setTag(WORLDTAG);
    scene->addChild(node);


                           //创建碰撞事件监听
                            auto physicListener = EventListenerPhysicsContact::create();
                            physicListener->onContactBegin = [=](PhysicsContact& contact)
                            {
                                auto shapa = contact.getShapeA()->getBody()->getNode();
                                auto shapb = contact.getShapeB()->getBody()->getNode();
                               //添加碰撞逻辑代码

                                return true;
                            };
                            _eventDispatcher->addEventListenerWithSceneGraphPriority(physicListener, this);


6 自定义事件

//有点像QT的信号和槽,不过没有多参数支持

《1 使用

//增加自定义事件监听

_eventDispatcher->addCustomEventListener("pullcomplete", [=](EventCustom* evn)
  {
               //自定义事件监听代码                
}

_eventDispatcher->dispatchCustomEvent("pullcomplete", String::createWithFormat("%d", _gold->getValue()) ); //发送自定义事件


_eventDispatcher->removeCustomEventListeners("pullcomplete");//删除自定义事件监听

《2 注意,重复注册相同关键字的自定义事件会报错,退出时记得 removeCustomEventListeners

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: cocos2d-x 4. 学习之路 cocos2d-x是一款开源的跨平台游戏引擎,支持多种平台,包括iOS、Android、Windows、Mac OS X等。cocos2d-x 4.是最新本,相比之前本,它有很多新特性和改进,如增强的渲染性能、更好的3D支持、更好的物理引擎等。 如果你想学习cocos2d-x 4.,可以从以下几个方面入手: 1. 学习基础知识:了解cocos2d-x的基本概念、架构和工作原理,掌握cocos2d-x的编程语言和开发环境。 2. 学习API:熟悉cocos2d-x的API,包括场景管理、精灵、动画、音频、物理引擎等。 3. 学习示例代码:通过阅读和分析cocos2d-x的示例代码,了解如何使用cocos2d-x开发游戏。 4. 学习实践:通过实践开发小游戏,掌握cocos2d-x的开发流程和技巧,提高自己的编程能力。 总之,学习cocos2d-x 4.需要一定的时间和耐心,但只要你有兴趣和热情,相信你一定能够掌握它。 ### 回答2: cocos2d-x是一个强大的游戏引擎,可用于开发移动和桌面游戏。随着cocos2d-x更新至4.0本,它的功能得到了大幅升级。如果你想学习cocos2d-x 4.0,以下是一些重要的步骤和建议。 1. 更改代码结构 cocos2d-x 4.0中启用了新的代码结构,旨在更好地实现模块化和解耦。新代码结构包括Core、Renderer、2d等模块,使代码更易于维护和升级。要理解新代码结构,请先阅读cocos2d-x官方文档,并针对各个模块学习和熟悉其API。 2. 学习新功能 cocos2d-x 4.0中引入了许多新功能,例如Shader、Render Queue等。学习新功能是非常必要的,因为它们将改变以前的游戏开发模式。了解这些新功能的实现原理,并在自己的项目中应用它们,有助于提高游戏性能和质量。 3. 学习C++11 cocos2d-x 4.0开始支持C++11标准,这意味着你可以使用C++11的新特性来编写更好的代码。要理解C++11的特性,建议通读一遍C++11的官方标准,并尝试在cocos2d-x项目中使用这些新特性。 4. 实战练习 最后,实战练习是学习任何技能的关键。为了更好地学习cocos2d-x 4.0,建议你尝试开发自己的游戏项目。通过尝试解决实际问题,你能更好地理解cocos2d-x的API,并在实践中掌握游戏开发的技术。 总而言之,学习cocos2d-x 4.0需要掌握新的代码结构、新的功能和C++11标准,并通过实际项目实战练习来加深理解。这需要一定的时间和耐心,但只要你认真学习、实践和不断尝试,必定能够取得成功。 ### 回答3: cocos2d-x 4.0是目前市面上非常流行的开源游戏开发引擎,在游戏开发领域有着较为广泛的应用。然而,学习cocos2d-x 4.0需要付出一定的努力和时间。以下是我对cocos2d-x 4.0学习之路的一些经验和建议。 1. 学习基础知识 在开始学习cocos2d-x 4.0之前,我们需要了解一些基础知识,比如C++语言、OpenGL ES等,这些都是cocos2d-x 4.0的底层实现技术。掌握这些基础知识会让我们从事游戏开发时更加得心应手。 2. 学习文档 学习cocos2d-x 4.0需要阅读官方文档,这些文档详细介绍了引擎的各个方面,而且是学习的最佳资料。文档里包括了引擎的安装、使用、开发以及调试等。建议大家先从官网下载文档,并且仔细阅读。 3. 实践和开发 掌握了基础知识以及学习了文档之后,最好的方式就是通过实践和开发来加深对cocos2d-x 4.0的理解。通过实际开发游戏来体验引擎的使用,这样能够更深刻的理解引擎的机制以及遇到的各种问题该如何解决。同时,通过找到一些相近的问题,并通过查阅文档、代码实现等方式来解决问题,可以增强自己的技术水平。 4. 参与社区 cocos2d-x 4.0的官方论坛以及社区非常活跃,里面的开发者也有着丰富的经验和技术,在学习中可以多向论坛、社区里的大牛请教,获得更多的技术指导,同时也可以参与讨论,提出自己的问题和思考来获得反馈,这样可以更快地提高自己的技术。 总之,学习cocos2d-x 4.0需要耐心和对游戏开发的热情。只有通过不断的学习与实践,我们才能最终掌握这个优秀的游戏开发引擎,从而创建属于自己的游戏作品。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值