我现在正尝试使用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
我该如何解决这个问题?
答案 0 :(得分:0)
这里肯定存在一些编码问题。
const char *MyImage = ((CCString*)filename->objectAtIndex(i))->getCString();
characters *chara = (characters*)CCSprite::create(MyImage);
你正在进行大量的投射,这令人困惑。你的(characters*)
投射是错误的。
字符似乎需要子类CCSprite*
,我希望它确实如此。
然后您可以执行以下操作:
characters * chara = characters :: create(filename-&gt; objectAtIndex(i) - &gt; getValue());
如果你的for
循环有硬编码9
。您可以将其更改为filename->count()
,使其始终循环到CCArray的大小。
以下是CCSprite的文档:http://www.cocos2d-x.org/reference/native-cpp/V2.2.3/d8/de9/group__sprite__nodes.html#ga0e84a5bd213dc1556503a4120243a390