cocos2dx:将数组更改为向量

时间:2016-05-20 08:20:50

标签: arrays vector cocos2d-iphone

我需要将Array更改为Vector,因为它在cocos2dx中被删除。 之前它正在运行,但在弃用之后它给出错误。 因为我对cocos2dx很新,所以我无法解决这个问题。

这是我的代码:

int BaseScene::generateRandom()
{
//int  rn = arc4random()%6+1;
int  rn = rand() % 6 + 1;
Array * balls = (Array*)this->getChildren();

Array * ballsTypeLeft = Array::create();
//    if(balls->count() <= 7)
{
for (int j=0; j<balls->count(); j++)
{
Node * a = (Node*)balls->objectAtIndex(j);
if(a->getTag() >= Tag_Ball_Start)
{                
Ball * currentBall =  (Ball*)balls->objectAtIndex(j);
bool alreadyHas = false;
for(int k=0;k<ballsTypeLeft->count();k++)
{
if(strcmp(((String*)ballsTypeLeft->objectAtIndex(k))->getCString(), (String::createWithFormat("%d",currentBall->type))->getCString()) == 0)
{
alreadyHas = true;
}
}
if(alreadyHas)
{

}
else
{
ballsTypeLeft->addObject(String::createWithFormat("%d",currentBall->type));
}
}
}
}
//    CCLog("%d",ballsTypeLeft->count());
if(ballsTypeLeft->count() <=2)
{
// int tmp = arc4random()%ballsTypeLeft->count();
int tmp = rand() % ballsTypeLeft->count();
return ((String*)ballsTypeLeft->objectAtIndex(tmp))->intValue();
}
return rn;
}

如何使此方法有效? 请使用Vector转换此方法。 感谢

1 个答案:

答案 0 :(得分:1)

要将cocos2d :: Array更改为cocos2d :: Vector,您必须先了解它。 cocos2d :: Vector实现了模仿std :: vector。 std :: vector是c ++中STL的一部分。 cocos2d :: Vector专门用于处理cocos2d :: Ref。每当您向Vector添加Ref类型时,它会自动保留,然后在清理时释放。

现在在代码中将Array更改为Vector:

以这种方式存放儿童:

Vector <Node*> balls = this->getChildren();

以这种方式在索引i处访问球:

Ball* ball = (Ball*)balls.at (i);

以这种方式向元素添加元素:

balls.pushBack (myNewBall);

编辑 -

根据我的理解,你想从场景/图层中获得一个随机的球。您只需返回Ball对象即可执行此操作:

Ball* BaseScene::generateRandom()
{
    Vector <Node*> nodeList = this->getChildren();

    Vector <Ball*> ballList;
    for (int i = 0; i<nodeList.size(); i++)
    {
        if (ball->getTag() >= Tag_Ball_Start)
        {
            Ball * ball = (Ball*)nodeList.at(i);
            ballList.pushBack(ball);
        }
    }

    if (ballList.size() > 0)
    {
        return ballList[rand() % ballList.size()];
    }

    return nullptr;
}

如果没有球,它将返回NULL,您可以在调用该函数时进行检查。您在下面链接的代码似乎在函数外部使用了数组。您需要进行更改以适应这种情况。我建议研究Vector的documentation