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。
我需要将 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。