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