Cocos2d-x中常用的类

Node节点类

  • 什么是游戏元素?

    • 游戏中的场景、精灵、文本、地图、菜单、层等任何对象都是节点。

Cocos2d-x中用Node类来对应游戏元素的概念,它是Cocos2d-x最为重要的根类。

Node的属性

节点关系

  • 假设有三个精灵,其中两个精灵被添加到了父精灵。如果给父精灵旋转了一个角度,那么子精灵会有什么变化呢?

如果节点被添加到一个父节点中,那么父节点的属性变化会被应用到子节点中。

对Node的操作

创建Node对象
auto node = Node::create();//创建Node对象
node->setTag(100);//设置标识
node->setName("容器节点");//设置元素名称
node->setPosition(Vec2(Vec2::ZERO));//设置坐标位置
node->setAnchorPoint(Vec2::ANCHOR_MIDDLE);//设置锚点处理正中心
node->setRotation(90);//设置旋转90度
node->setContentSize(Size(100, 100));//设置大小100*1000
node->setScale(10);//设置放大10倍显示
node->setVisible(true);//设置显示
node->setColor(Color3B::WHITE);
this->addChild(node);
增加子节点
  • 在父节点中默认显示层级,添加默认元素标识的子节点
parentNode->addChild(node);
  • 在父节点中指定显示层级,添加默认元素标识的子节点
parentNode->addChild(node,zorder);
  • 在父节点中指定显示层级,添加指定元素标识的子节点
parentNode->addChild(node,zorder,tag);

TIPS:

Node类提供了三种子节点的重载方法:

  1. Node::addChild(Node* node);
  2. Node::addChild(Node* node,int zorder);
  3. Node::addChild(Node* node,int zorder,int tag);
查找子节点
  • 通过元素标识查找

    auto node = parentNode->getChildByTag(tag);
    
  • 通过元素名称查找

    auto node = parentNode->getChildByName(name);
    
  • 遍历查找

    Node* findNode = nullptr;
    int findTag = 20;
    for(auto node : parentNode->getChildren())
    {if(node->getTag() == findTag){findNode = node;break;}//得到下一个node
    }
    

TIPS:

在查找子节点的过程中,使用getChildByTag优于getChildByName,由于name是字符串,而tag是整型。

当有非常多的节点需要查找的时候,我们尽可能使用遍历查找来查找节点。因为不管是getChildByTag还是getChildByName内部都是一个遍历查找,当要查找多个节点的时候我们使用它们查找我们会执行多次遍历,而使用遍历查找我们只执行一次遍历。

删除节点
  • 删除指定元素标识的节点

    parentNode->removeChildByTag(tag);
    
  • 删除指定元素名称的节点

    parentNode->removeChildByName(name);
    
  • 删除指定节点

    parentNode->removeChild(child);
    
  • 删除所有子节点

    parentNode->removeAllChildren();
    

小结

  • Node类是Cocos2d-x中最重要的根类
  • Node的基本属性
    • 描述元素间的关系
    • 描述元素本身的属性
  • 节点与节点之间的关系
  • 使用Node方法
    • 对Node的操作

      • 创建节点、增加子节点、删除子节点、查找子节点

Director类

  • 一个典型的游戏流程实例

Director类对应电影拍摄中导演的概念,是Cocos2d-x引擎中的“总指挥”。

  Director类和Node类都继承自Ref类,Ref是Cocos2d-x中的内存管理机制。

Director类的职责

  • 访问和切换场景
  • 访问Cocos2d-x的配置信息
  • 暂停、继续和停止游戏
  • 转换坐标

Director类的使用

  • 访问场景

    Director::runWithScene(Scene* scene)
    
  • 替换场景

    Director::replaceScene(Scene* scene)
    

Cocos2d-x中的字符串

字符串

Cocos2d-xV3.10之前可以使用cocos2d::String,之后的版本不建议使用。

  • C语言、C++、Cocos2d-x字符串风格对比

  • C语言、C++、Cocos2d-x字符串风格相互转换

//String *content = String::create("hello");
String *content = String::createWithFormat("hello,%s","world");
content->append("!!!");//拼接字符串
log("string length:%d",content->length());//获取长度
const char* str = content->getCString();

cocos2d::String类的使用

StringUtils

Cocos2d-xV3.10之后推出的新的处理字符串的工具集合。

#include<string>
using namepsace std;
string content = StringUtils::format("hello,%s","world");
const char* str = content.c_str();

Label类

  • Cocos2d-x中的字体

    • BMFont
    • TTF(TrueTypeFont)
    • SystemFont
  • 创建Label标签

    Label::create("My Label Text","Arial",20);
    Label::create("myFont.ttf","My Label Text",20);
    

TIPS:

  1. 创建BMFont需要.fnt和.png文件。
  2. BMFont,如果想不失真的缩放,就要提供多种字体文件。
  3. 使用TTF很方便,不需要为每种尺寸和颜色单独使用字体文件。
auto visibleSize = Director::getInstance()->getVisibleSize();
//Label *label = Label::create("Hello World!","Arial",72);
auto label = Label::createWithSystemFont("你好,世界!","微软雅黑",39);
label->setAnchorPoint(Vec2::ANCHOR_MIDDLE);
//坐标位置设置在屏幕正中心
label->setPosition(Vec2(visibleSize.width/2,visibleSize.height/2));
this.addChild(label);

Cocos2d-x中常用的类相关推荐

  1. java 中常用的类

    java 中常用的类 Math Math 类,包含用于执行基本数学运算的方法 常用API 取整 l  static double abs(double  a) 获取double 的绝对值 l  sta ...

  2. C#之windows桌面软件第十三课:C#中常用的类有哪些?构造函数怎么用?

    C#之windows桌面软件第十三课:C#中常用的类有哪些?构造函数怎么用? using System; using System.Collections.Generic; using System. ...

  3. java中常用的包、类、以及包中常用的类、方法、属性----sql和text\swing

    java中常用的包.类.以及包中常用的类.方法.属性 常用的包 java.io.*; java.util.*; java.lang.*; java.sql.*; java.text.*; java.a ...

  4. Java中常用的类,包,接口

    Java中常用的类,包,接口 包名 说明 java.lang 该包提供了Java编程的基础类,例如 Object.Math.String.StringBuffer.System.Thread等,不使用 ...

  5. JAVA语言异常_Java语言中常用异常类EoFException是用来处理( )异常的类_学小易找答案...

    [填空题]Java语言中常用异常类ClassNotFoundException是用来处理 ( )的异常的类 [填空题]Java语言声明 ( ) 类为会产生"严重错误"的类 [简答题 ...

  6. java有哪些类_Java中常用的类有哪些?

    展开全部 一. System: 1.     首先是System类,因为从一开始从接触java起,我32313133353236313431303231363533e58685e5aeb9313333 ...

  7. Java中常用的类及其特点

    Java中的内部类有四种(内部类作用1.封装装类型. 2.直接访问外部类成员. 3.回调.)内部类,方便他们的外部类调用,一般不会被其它类使用,比如事件监听器之类的,外部类刚好继承了一个别的类,如果你 ...

  8. Cocos2d—android 中常用的工具类

    <span style="font-size:18px;"> 在开发游戏过程中通常会用到一个经常编写的重复的代码,比如加载游戏地图,从地图中加载指定点的集合,序列帧的播 ...

  9. C++ i/o类库中 常用流类

    类名 作用 在哪个头文件中声明 ios 抽象基类 iostream ------------------------------------------------------------------ ...

  10. Java concurrent包中常用的类

    1. Atomic类 基于 compareAndSwap,即CAS操作实现. CAS指令有两个步骤:冲突检测和更新操作. CAS指令需要3个操作数:内存位置(V),旧的预期值(A),新值(B).CAS ...

最新文章

  1. java远程调用笔记
  2. uniapp 生成Android证书及.keystore转.jks、.pem
  3. Subversion For Windows的安装与使用
  4. ReactNative用指定的设备/模拟器运行项目
  5. Vuex与登录状态保存
  6. 升级Hbase,解决bug问题
  7. python常用快捷键、写代码事半功倍_Pycharm常用快捷键总结及配置方法
  8. 【今日CS 视觉论文速览】31 Dec 2018
  9. 卸载exchange后注意事项
  10. Linux网络 - 数据包的接收过程
  11. mysql怎么创建普通用户_mysql怎么创建用户账户
  12. 从stm32转向Linux,STM32MP1Distrib
  13. 5-5 多边形周长计算(继承)
  14. delphi CnPack
  15. rectangle函数与Rect函数的用法
  16. WPS 使用宏 下载 VBA
  17. python 列表长度_python求列表长度
  18. 金三银四,作为Java程序员的你为什么面试总拿不到高薪?
  19. php订阅号怎么借服务号权限,微信订阅号已经认证能否有网页授权功能
  20. linux 下 scp 的用法

热门文章

  1. 【珍藏版】 200个机器学习 NLP Python 免费相关教程
  2. 【每日算法Day 90】5种方法:求解数组中出现次数超过一半的那个数
  3. pandas—pandas.crosstab交叉表
  4. 从零实现深度学习框架——实现Tensor的反向传播
  5. 吴恩达深度学习——序列模型与注意力机制
  6. Android中native进程内存泄露的调试技巧
  7. 21天学通JAVA:类设计的技巧
  8. 4.4 Spark SQL实现用户ip地址热度分析
  9. Unicode与UTF8:字符集与字符编码的关系
  10. mysql 输入密码后闪退_iPhone抹除还原后需要输入账号密码怎么办?