Cocos2d-x的学习之旅(三)自己的 HelloWorld
声明
本教程仅用于初学cocos2dx同学使用,内容由本人(Code-Man)编写,此教程使用cocos2dx版本为3.4。本教程内容可以自由转载,但必须同时附带本声明,或注明出处。QQ群:Cocos2d-CodeMonkey ,461679592。
【一】添加资源
2.资源导入到项目
Add到工程
【二】场景构建
【三】代码分析
①Tag值和Name值
②节点与节点之间的关系
③Lable的使用注意事项
<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
Cocos2d-x的学习之旅(三)自己的 HelloWorld相关推荐
- HALCON学习之旅(三)
HALCON学习之旅(三) 文章目录 HALCON学习之旅(三) 1.创建自适应图形窗口 2.霍夫变换寻找图像直线 1.创建自适应图形窗口 原因:默认的图形窗口尺寸为512*512.当图像变量尺寸与图 ...
- 滴滴Booster移动APP质量优化框架 学习之旅 三
推荐阅读: 滴滴Booster移动App质量优化框架-学习之旅 一 Android 模块Api化演练 不一样视角的Glide剖析(一) 滴滴Booster移动App质量优化框架-学习之旅 二对重复资源 ...
- Hadoop学习之旅三:MapReduce
MapReduce编程模型 在Google的一篇重要的论文MapReduce: Simplified Data Processing on Large Clusters中提到,Google公司有大量的 ...
- Python学习之旅三:python高级语法
使用pycharm和jupter notebook. 1 包 1.1 模块 一个模块就是一个包含python代码的文件,后缀名为.py即可,模块就是个python文件. 1.1.1 为什么要使用模块呢 ...
- Threejs 学习之旅(三)
PerspectiveCamera 透视相机 例: const camera = new THREE.PerspectiveCamera(75, sizes.width / sizes.height, ...
- Microsoft .NET Pet Shop 4.0 学习之旅(三) - 项目的引用关系2
Microsoft .NET Pet Shop 4.0 学习之旅(三) 项目的引用关系2 <?xml:namespace prefix = o ns = "urn:schemas-mi ...
- WCF学习之旅—第三个示例之二(二十八)
上接WCF学习之旅-第三个示例之一(二十七) 五.在项目BookMgr.Model创建实体类数据 第一步,安装Entity Framework 1) 使用NuGet下载最新版的Entity Fram ...
- WCF学习之旅—第三个示例之四(三十)
上接WCF学习之旅-第三个示例之一(二十七) WCF学习之旅-第三个示例之二(二十八) WCF学习之旅-第三个示例之三(二十九) ...
- 小猪的Python学习之旅 —— 10.三分钟上手Requests库
小猪的Python学习之旅 -- 10.三分钟上手Requests库 标签:Python 一句话概括本文: 本节讲解Requests库的常见使用,以及一个实战项目: 扒取某一篇微信文章里所有的图片,视 ...
- Flask学习之旅——1.3 URL与视图(三)
Flask学习之旅--1.3 URL与视图(三) 前言 由于本小节内容较多,故分成几篇文章来记录. 本文为<知了传课--URL与视图>的学习笔记. 原文地址:第三节:URL与视图 - Py ...
最新文章
- layui fixbar 返回顶部_FANUC 数控系统机床返回参考点功能的应用研究
- (asp.net MVC学习)System.Web.Mvc.UrlHelper的学习与使用
- LeetCode Combination Sum IV(动态规划)
- pytorch_导入d2l_pytorch包问题
- RocketMQ事务消息实现分析
- 我的代码第一次运行时的样子
- 一键清理maven未下载完全的依赖脚本
- python mysql numpy_Python 之Numpy应用
- NioEventLoopGroup 源码分析
- websocket动态添加广播路径_数据可视化WebSocket实现聊聊我的实现思路
- [OpenStack] OpenStack Essex - Glance api 的实验(curl)
- 学习操作系统心得体会
- 常见蓝屏代码解释及解决方法
- vue 项目完美运行在IE或者360浏览器兼容模式下 踩坑笔记
- curl: (67) Access denied: 530的可能原因
- python量化策略——改进的美林时钟代码(代码版)
- DevOps ACA 阿里云效软件测试和质量保证(八)
- Stream编程之Collectors.joining方法解析
- windows打印机服务开启方法
- 关于JPEG2000软件