关于抛出'std :: length_error'实例后调用的终止

时间:2014-05-04 15:11:56

标签: c++ cocos2d-x

我现在正尝试使用CCSprite在舞台上显示精灵。

字符类是一个已成功进入CCSprite的类。

我编写的代码如下:

bool HellowWorld::init()方法:

bool HelloWorld::init()
{

int Indexes[9] = {5,11,15,16,17,19,20,21,25};
int x;
int y;
CCArray *filename = new CCArray();



filename->addObject(new CCString("1-1.png"));
filename->addObject(new CCString("2-1.png"));
filename->addObject(new CCString("1-2.png"));
filename->addObject(new CCString("2-3.png"));
filename->addObject(new CCString("2-3.png"));
filename->addObject(new CCString("1-2.png"));
filename->addObject(new CCString("2-3.png"));
filename->addObject(new CCString("1-1.png"));
filename->addObject(new CCString("1-1.png"));




for(int i=0;i<9;i++){

    const char *MyImage = ((CCString*)filename->objectAtIndex(i))->getCString();
    characters *chara = (characters*)CCSprite::create(MyImage);

    x = Indexes[i]%HORIZONTAL_AXIS;
    y = Indexes[i]/HORIZONTAL_AXIS;


    CCPoint point = ccp(MARGIN_WIDTH + PIPE_WIDTH * x,MARGIN_HEIGHT + PIPE_HEIGHT * y);
    chara->setPosition(point);


    this->addChild(chara,1);


}

但是,我收到以下错误消息:

libc++abi.dylib: terminating with uncaught exception of type std::length_error: basic_string::_S_create

我该如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

这里肯定存在一些编码问题。

const char *MyImage = ((CCString*)filename->objectAtIndex(i))->getCString();
characters *chara = (characters*)CCSprite::create(MyImage);

你正在进行大量的投射,这令人困惑。你的(characters*)投射是错误的。

  1. 字符似乎需要子类CCSprite*,我希望它确实如此。

  2. 然后您可以执行以下操作:

    characters * chara = characters :: create(filename-&gt; objectAtIndex(i) - &gt; getValue());

  3. 如果你的for循环有硬编码9。您可以将其更改为filename->count(),使其始终循环到CCArray的大小。

  4. 以下是CCSprite的文档:http://www.cocos2d-x.org/reference/native-cpp/V2.2.3/d8/de9/group__sprite__nodes.html#ga0e84a5bd213dc1556503a4120243a390