cocos2dx:将数组更改为向量

cocos2dx : Change Array to Vector

我需要将 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 转换此方法。 谢谢

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

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

这样存储children:

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

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

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

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

balls.pushBack (myNewBall);

编辑 -

据我了解,您想从 scene/layer 中获得一个随机球。您可以通过简单地 returning 球 object:

来执行此操作
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;
}

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