声明

本教程仅用于初学cocos2dx同学使用,内容由本人(Code-Man)编写,此教程使用cocos2dx版本为3.4。本教程内容可以自由转载,但必须同时附带本声明,或注明出处。QQ群:Cocos2d-CodeMonkey ,461679592

经过上一节课相信Monkey们对Cocos2dx的HelloWorld有一定的了解了。如果还不能理解,就赶快加入我们的QQ群吧,期待与你一起成长。今天的任务很明显,写一个自己的HelloWorld,想写点特别点的。与自带的HelloWorld有所区别,但又不能超出一定的知识范围,为此我也挺头痛的!!! 求安慰!!!,经过我日思夜想,天天不能寝,夜夜不能寐最后想到了,我们要完成一个伟大的壮举。创建夏娃和亚当。。。。不要问为什么,技术宅任性。
为什么是《罪恶王冠》? ??? 因为我前几天刚追完。让我发泄一下!! 我的楪祈女神。。。至于跟夏娃亚当有什么关系??不懂的自己补番。。。

【一】添加资源

本文以Xcode为列。下图就是我们的一个项目包的大概的一个结构
1.添加资源到资源文件

2.资源导入到项目

回到工程,资源文件右键Add Files to “MyCppGame”

Add到工程

完成结果,注意!!! 图片一定是PNG格式!!!

【二】场景构建

1.创建第一个C++文件,New File...
2.Next C++文件
3.文件名
4.头文件
我们先来理一理,我们需要做的事情。
①.创建场景--->创建层---》创建两个按钮
②.两个按钮:一个能添加我们的主角到我们场景中,一个能删除我们的主角们(这么可爱都舍得删,太可恶了!! 23333)
③.需要一串文字来指导我们的操作
如图:
建议:Monkey们先按照这个思路自己写一些。无论写成什么样都可以。。。。

【三】代码分析

本文知识点:

①Tag值和Name值

②节点与节点之间的关系

③Lable的使用注意事项

最后,我们只要执行我们的场景就好了,在哪呢???
打开 Appelegate.cpp文件
附上源码:
  <pre name="code" class="cpp">
</pre><pre name="code" class="cpp">//
//  LessonOneScene.h
//  MyCppGame
//
//  Created by He_bi on 15/6/4.
//
//#ifndef __MyCppGame__LessonOneScene__
#define __MyCppGame__LessonOneScene__#include <stdio.h>
#include <cocos2d.h>
USING_NS_CC;class LessonOneScene : public Layer {public://创建场景static Scene* createScene();//初始化函数virtual bool init();//用宏去创建一个层(自己)CREATE_FUNC(LessonOneScene);private://删除按钮的回调void menuRemoveCallback(cocos2d::Ref* pSender);//添加按钮的回调void menuAddCallback(cocos2d::Ref* pSender);private://一个英雄节点Node* HeroNode;//按钮层Menu* MyMenu;//屏幕大小Size WinSize;
};
#endif /* defined(__MyCppGame__LessonOneScene__) */
//
//  LessonOneScene.cpp
//  MyCppGame
//
//  Created by He_bi on 15/6/4.
//
//#include "LessonOneScene.h"//这个函数在此次不累赘、越往后面,对于前面的知识不会做无谓的讲解。
//忘记的可以复习前面的只是
Scene* LessonOneScene::createScene(){auto Myscene=Scene::create();auto MyLayer=LessonOneScene::create();Myscene->addChild(MyLayer);return Myscene;
}bool LessonOneScene::init(){if (!Layer::init()) {return false;}WinSize=Director::getInstance()->getVisibleSize();//创建我们的背景图片auto bg=Sprite::create("LessonOne_Bg.png");//WinSize/2 这种写法是3.0之后才有的,是不是很方便bg->setPosition(WinSize/2);//这个这样理解吧,“别名”,也就是这个对象的另一个名字。例如:张三,别名:Monkey,哈哈哈!bg->setName("bg");this->addChild(bg);//按钮控件,还记得上一节课的那个按钮吗?那个使用图片作为按钮,现在我们使用的是文字按钮auto AddMenItem=MenuItemFont::create("添加按钮", CC_CALLBACK_1(LessonOneScene::menuAddCallback, this));AddMenItem->setPosition(WinSize.width/2, WinSize.height/2/2);auto RemoveMenItem=MenuItemFont::create("删除按钮", CC_CALLBACK_1(LessonOneScene::menuRemoveCallback, this));RemoveMenItem->setPosition(WinSize.width/2, WinSize.height/2+WinSize.height/2/2);//把按钮都添加到Men层上MyMenu=Menu::create(AddMenItem, RemoveMenItem ,NULL);// Vec2::ZERO= Vec2(0,0) ,3.0后的写法,直接变成静态变量MyMenu->setPosition(Vec2::ZERO);this->addChild(MyMenu);/**还记得我们上一节课,是如何创建helloWorld文字的吗?Label::createWithTTF("Hello World", "fonts/Marker Felt.ttf", 24);这是上一节课创建方式。是不是稍微不一样?到底哪里不一样呢?其实看函数名可以很好的理解。WithTTF:依靠着TTF(True Type File 字型文件),Marker Felt.ttf(不包含中文)WithSystemFont:跟随着系统的文字。所有如果我们使用上一节课的方式创建,是看不到中文的*/auto MyLabel=Label::createWithSystemFont("请添加主角", "宋体", 43);MyLabel->setPosition(WinSize.width-MyLabel->getContentSize().width,WinSize.height/2);//Node的常用函数,设置一个Node的颜色,但如果我们直接创建一个Node而不是它的子类然后设置颜色会怎么样呢?留给大家耍一耍MyLabel->setColor(Color3B(255, 0, 0));//这个,跟名字一样而是对象的另一个名字,好比人的身份证MyLabel->setTag(10000);bg->addChild(MyLabel,2);return true;
}void LessonOneScene::menuAddCallback(cocos2d::Ref *pSender){
//    在主角节点为空的适合我们就去招呼出我们的萌萌哒的主角if (HeroNode==nullptr) {//        创建我们的空节点,理解为容器吧,可以装很多东西HeroNode=Node::create();this->addChild(HeroNode);
//       出来吧男主角auto LessonOne_Boy=Sprite::create("LessonOne_Boy.png");auto BoySize=LessonOne_Boy->getContentSize();LessonOne_Boy->setPosition(BoySize.width/2, WinSize.height/2/2);
//        装到容器里面HeroNode->addChild(LessonOne_Boy);//        出来吧女主角auto LessonOne_Gril=Sprite::create("LessonOne_Gril.png");auto GrilSize=LessonOne_Gril->getContentSize();LessonOne_Gril->setPosition(GrilSize.width/2, WinSize.height/2+WinSize.height/2/2);HeroNode->addChild(LessonOne_Gril);//      this是谁?自己,自己是什么?,层,层有一个儿子它的别名叫“bg”,“bg”有一个儿子它的身份证是10000。结合上面就能找到最后哪个人就是:上面的MyLabelauto MyLabel=(Label*)this->getChildByName("bg")->getChildByTag(10000);
//        重新设置显示的文字MyLabel->setString("请删除我们的\n英雄");}else{
//        打一个log出来可以在控制台看见log("这个Node已存在,无需重复添加");}}void LessonOneScene::menuRemoveCallback(cocos2d::Ref *pSender){//  只要我们的容器不为空,我们就继续执行if (HeroNode !=nullptr) {
//        我们并没有主动去删除男女主角,而是通过删除它的父节点,也就是主角的容器。HeroNode->removeFromParentAndCleanup(true);HeroNode=nullptr;auto MyLabel=(Label*)this->getChildByName("bg")->getChildByTag(10000);
//        再次更改它的文字MyLabel->setString("请添加我们的\n英雄");}else{log("这个Node删除,无需重复删除");}
}

资源下载地址: http://pan.baidu.com/s/1gdvTiTX

Monkey们下次见吧!!!!最近一直在干项目。。。心好塞。。。

Cocos2d-x的学习之旅(三)自己的 HelloWorld相关推荐

  1. HALCON学习之旅(三)

    HALCON学习之旅(三) 文章目录 HALCON学习之旅(三) 1.创建自适应图形窗口 2.霍夫变换寻找图像直线 1.创建自适应图形窗口 原因:默认的图形窗口尺寸为512*512.当图像变量尺寸与图 ...

  2. 滴滴Booster移动APP质量优化框架 学习之旅 三

    推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 滴滴Booster移动App质量优化框架-学习之旅 二对重复资源 ...

  3. Hadoop学习之旅三:MapReduce

    MapReduce编程模型 在Google的一篇重要的论文MapReduce: Simplified Data Processing on Large Clusters中提到,Google公司有大量的 ...

  4. Python学习之旅三:python高级语法

    使用pycharm和jupter notebook. 1 包 1.1 模块 一个模块就是一个包含python代码的文件,后缀名为.py即可,模块就是个python文件. 1.1.1 为什么要使用模块呢 ...

  5. Threejs 学习之旅(三)

    PerspectiveCamera 透视相机 例: const camera = new THREE.PerspectiveCamera(75, sizes.width / sizes.height, ...

  6. Microsoft .NET Pet Shop 4.0 学习之旅(三) - 项目的引用关系2

    Microsoft .NET Pet Shop 4.0 学习之旅(三) 项目的引用关系2 <?xml:namespace prefix = o ns = "urn:schemas-mi ...

  7. WCF学习之旅—第三个示例之二(二十八)

    上接WCF学习之旅-第三个示例之一(二十七) 五.在项目BookMgr.Model创建实体类数据 第一步,安装Entity Framework 1)  使用NuGet下载最新版的Entity Fram ...

  8. WCF学习之旅—第三个示例之四(三十)

           上接WCF学习之旅-第三个示例之一(二十七)               WCF学习之旅-第三个示例之二(二十八)              WCF学习之旅-第三个示例之三(二十九)   ...

  9. 小猪的Python学习之旅 —— 10.三分钟上手Requests库

    小猪的Python学习之旅 -- 10.三分钟上手Requests库 标签:Python 一句话概括本文: 本节讲解Requests库的常见使用,以及一个实战项目: 扒取某一篇微信文章里所有的图片,视 ...

  10. Flask学习之旅——1.3 URL与视图(三)

    Flask学习之旅--1.3 URL与视图(三) 前言 由于本小节内容较多,故分成几篇文章来记录. 本文为<知了传课--URL与视图>的学习笔记. 原文地址:第三节:URL与视图 - Py ...

最新文章

  1. layui fixbar 返回顶部_FANUC 数控系统机床返回参考点功能的应用研究
  2. (asp.net MVC学习)System.Web.Mvc.UrlHelper的学习与使用
  3. LeetCode Combination Sum IV(动态规划)
  4. pytorch_导入d2l_pytorch包问题
  5. RocketMQ事务消息实现分析
  6. 我的代码第一次运行时的样子
  7. 一键清理maven未下载完全的依赖脚本
  8. python mysql numpy_Python 之Numpy应用
  9. NioEventLoopGroup 源码分析
  10. websocket动态添加广播路径_数据可视化WebSocket实现聊聊我的实现思路
  11. [OpenStack] OpenStack Essex - Glance api 的实验(curl)
  12. 学习操作系统心得体会
  13. 常见蓝屏代码解释及解决方法
  14. vue 项目完美运行在IE或者360浏览器兼容模式下 踩坑笔记
  15. curl: (67) Access denied: 530的可能原因
  16. python量化策略——改进的美林时钟代码(代码版)
  17. DevOps ACA 阿里云效软件测试和质量保证(八)
  18. Stream编程之Collectors.joining方法解析
  19. windows打印机服务开启方法
  20. 关于JPEG2000软件

热门文章

  1. 微信聊天记录删除掉怎么恢复回来
  2. 本周知识分享会议总结
  3. 大数据电信号分析项目
  4. 错误集合--CRM项目
  5. 2月天猫彩妆类目销量排行榜:销额近16亿,国货品牌入围TOP3
  6. 关于计算点到线段的距离
  7. android强制关掉应用,android应用程序强制关闭执行此查询
  8. 【艺术名家·共谱文脉传承】2020官方重点推荐书画名家——高庭山
  9. python:判断字符串类型方法
  10. Android手机跑逆向,Android 逆向工程:基于Xposed Hook实现动态逆向分析