自己动手写cocos2dx游戏引擎(八)——Node节点

自己动手写cocos2dx游戏引擎(八)——Node节点,第1张

概述UI都是树状形式组织。 每一个小的控件就是一个小的节点。 同时,为了表示父子节点的关系需要保存一个父节点。 最简单的形式是这样的: #include <vector>class Node { Node *_parent;// 父节点指针 std::vector<Node*> _children;// 子节点指针};因为子节点的个数是不确定的,因为需要用一个vector来保存子节点。 当然

UI都是树状形式组织。

每一个小的控件就是一个小的节点。

同时,为了表示父子节点的关系需要保存一个父节点。

最简单的形式是这样的:

#include <vector>class Node {	Node *_parent;// 父节点指针	std::vector<Node*> _children;// 子节点指针};
因为子节点的个数是不确定的,因为需要用一个vector来保存子节点。

当然除了这两个最重要的信息之外,还有一些其他的属性也很重要,比人zOrder,tag和name等。

在demo7的基础上,添加Node.h头文件,代码如下:

#ifndef __NODE_H__#define __NODE_H__#include "Ref.h"#include <vector>class Node: Ref {    public:        static const int INVALID_TAG = -1;        static Node* create();        Node();        virtual ~Node();        virtual bool init();        virtual voID setTag(int tag);        virtual int getTag() const;        virtual const std::string& getname() const;         virtual voID setname(const std::string& name);        virtual voID addChild(Node * child);        virtual voID addChild(Node * child,int localZOrder);        virtual voID addChild(Node* child,int localZOrder,int tag);        virtual voID addChild(Node* child,const std::string &name);                virtual Node* getParent();    protected:        voID childrenAlloc(voID);        voID insertChild(Node* child,int z);        voID setParent(Node * parent);        Node *_parent;        std::vector<Node*> _children;//所有子节点集合        int _localZOrder;// z轴        int _tag;// node标记        std::string _name;// node名字    private:        voID addChildHelper(Node* child,int tag,const std::string &name,bool setTag);};Node::Node(): _parent(NulL),_localZOrder(0),_tag(INVALID_TAG),_name(""){}Node::~Node() {}Node* Node::create() {    Node* ret = new Node();    if (ret && ret->init()) {        ret->autorelease();    } else {        if (ret != NulL) {            delete ret;            ret = NulL;        }    }    return ret;}bool Node::init() {    return true;}voID Node::childrenAlloc() {    _children.reserve(4);}voID Node::insertChild(Node* child,int z) {    _children.push_back(child);    child->_localZOrder = z;}voID Node::setParent(Node * parent) {    _parent = parent;}Node* Node::getParent() {     return _parent; }voID Node::setTag(int tag) {    _tag = tag ;}int Node::getTag() const {    return _tag;}voID Node::setname(const std::string& name) {    _name = name;}const std::string& Node::getname() const {    return _name;}voID Node::addChild(Node *child,int zOrder) {    this->addChild(child,zOrder,child->_name);}voID Node::addChild(Node *child) {    addChild(child,child->_localZOrder,child->_name);}voID Node::addChild(Node *child,int tag) {   addChildHelper(child,localZOrder,tag,"",true);}voID Node::addChild(Node* child,const std::string &name) {    addChildHelper(child,INVALID_TAG,name,false);}voID Node::addChildHelper(Node* child,bool setTag) {    if (_children.empty()) {       childrenAlloc();     }        insertChild(child,localZOrder);    child->setParent(this);    if (setTag) {        child->setTag(tag);    } else {        child->setname(name);     }}#endif

添加了一些对这些属性 *** 作的方法,并让Node继承自Ref。

修改AppDelegate.h文件如下:

#ifndef __APP_DELEGATE_H__#define __APP_DELEGATE_H__#include "Application.h"#include "Director.h"#include "GLVIEw.h"#include "GLVIEwImpl.h"#include "Geometry.h"#include "Node.h"#include <iostream>class AppDelegate: private Application {    public:        virtual bool applicationDIDFinishLaunching(); };bool AppDelegate::applicationDIDFinishLaunching() {    Director* director = Director::getInstance();    GLVIEw* glvIEw = director->getopenGLVIEw();    if (!glvIEw) {        glvIEw = GLVIEwImpl::createWithRect("Winname",Rect(0,960,640));        director->setopenGLVIEw(glvIEw);    }    Node* node = Node::create();    node->setname("parent");    Node* lnode = Node::create();    lnode->setname("child");    node->addChild(lnode);    std::cout << lnode->getParent()->getname() << std::endl;    std::cout << lnode->getname() << std::endl;    return true;}#endif

在AppDelegate中,对我们前面写的Node类进行了一个简单的测试。

代码

总结

以上是内存溢出为你收集整理的自己动手写cocos2dx游戏引擎(八)——Node节点全部内容,希望文章能够帮你解决自己动手写cocos2dx游戏引擎(八)——Node节点所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1075912.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-26
下一篇 2022-05-26

发表评论

登录后才能评论

评论列表(0条)

保存