Cocos2dx 3.0 过渡篇(八)浅谈容器Vector

前端之家收集整理的这篇文章主要介绍了Cocos2dx 3.0 过渡篇(八)浅谈容器Vector前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

尊重原创,转载请注明来自:star特530的CSDN博客http://blog.csdn.net/start530/article/details/19170853


尊重原创,转载请注明来自:star特530的CSDN博客http://blog.csdn.net/start530/article/details/19170853

前两天有人问我说在3.0 beta2版本里,使用array 后编译出错,其实是因为自beta版本开始,已没有Array,取而代之的是容器:Vector 和 Map


先说Vector吧。
如果说C++的vector容器怎么用,如果我说太多肯定一下子就暴露了我菜鸟的身份。所以呢,在这里不过多阐述,也请大神绕路。
所以,还是回到Vector的使用问题上吧。该怎么用?既然Vector是替代了Array,那就拿Array 和Vector进行对比吧。

下面我就以创建 Sprite 精灵对象的容器为例介绍吧
1、创建

先创建两个精灵:



auto sp1 = Sprite::create("CloseNormal.png");  
sp1->setPosition(Point(100,100));  
this->addChild(sp1,1);  
  
auto sp2 = Sprite::create("CloseSelected.png");  
sp2->setPosition(Point(100,200));  
this->addChild(sp2,1);  


创建容器


Alpha:  
    auto sp_array = Array::create();  
beta:  
    Vector<Sprite*> sp_vec;  

2、将创建好的精灵添加进容器中


Alpha:  
    sp_array->addObject(sp1);  
    sp_array->addObject(sp2);  
  
  
beta:  
    sp_vec.pushBack(sp1);//和 堆栈 一样一样的  
    sp_vec.pushBack(sp2); 

3、获得容器中的大小


Alpha:  
    int count = sp_array->count();  
beta:  
    int count = sp_vec.size(); 

4、获得容器中的精灵,并让这些元素都做统一的动作


Alpha:  
    for(int i=0;i<sp_array->count();i++)  
    {  
        auto sp = (Sprite*)sp_array->getObjectAtIndex(i);  
        sp->runAction(MoveTo::create(0.2f,Point(100,100)));  
    }  
beta:  
    for( auto& e : sp_vec)
    {
        e->runAction(MoveTo::create(0.2f,100)));//这种for写法是C++ 11的新特性
    }

5、删除容器中的精灵


//如果是要删除容器中最后一个精灵的话:  
Alpha:  
    sp_array->removeLastObject();  
beta:  
    sp_vec.popBack();  
      
//如果是直接删除对象:  
Alpha:  
    sp_array->removeObject(sp1);  
beta:  
    sp_vec.eraSEObject(sp1);  
//如果是要删除容器中全部的对象:  
Alpha:  
    sp_array->removeAllObject();  
beta:  
    sp_vec.clear();  

6、其他
”说破不值钱“ ,其实Vector也就那样啦,恩,那样...最后补充一些其他的用法


//a 在容器中的任何一个位置插入对象:  
sp_vec.pushBack(sp1);  
sp_vec.pushBack(sp2);  
//目前的情况是,sp1在容器的第一个位置,sp2在容器的第二个位置,这时候我们要将sp3放入第一个位置:  
sp_vec.insert(0,sp3);//ok  
  
//b 查找容器中的对象:  
//1、假设不知道容器中是否有sp3这个精灵,这时候可以这样:  
sp_vec.contains(sp3);//如果有,返回true,无返回false;  
//2、已知容器中有sp3这个精灵,想获得它在容器中的位置:  
int pos_int = sp_vec.find(sp3);  
//上面的方法可以获得sp3的位置,但返回的其实是迭代器的地址,你得到的结果可能是45214等等,如果想获得正常需要的位置,可以这样:  
int pos_int = sp_vec.find(sp3) - sp_vec.begin();//ok  

恩,时间不多,先写到这吧。昨晚才去了解beta里的Vector,如果有什么写错的地方或者用的不恰当的地方,敬请告知...


转载请声明原创地址:http://blog.csdn.net/start530?viewmode=contents

对象
  Vector<Sprite*> sp_vec;  
  sp_vec.pushBack(sp2); 
  int pos_int = sp_vec.find(sp3) - sp_vec.begin();
  virtual Vector<Node*>& getChildren() { return _children; }   //Vector<Node*> _children;   
  virtual const Vector<Node*>& getChildren() const { return _children; }


指针 static 全局函数
Vector<Block*> * Block::blocks = new Vector<Block*>();

Vector<Block*> * Block::getBlocks()
{
	return Block::blocks;
}

	auto bs = Block::getBlocks();
	for (auto it=bs->begin();it!=bs->end();it++)
	{
		(*it)->moveDown();
	}

	auto b = new Block();
    blocks->pushBack(b);
    blocks->eraSEObject(this);

猜你在找的Cocos2d-x相关文章