2

cocos2dアニメーションを からに変換しようとしてcocos2d-xいますが、役に立ちません。明らかなエラー メッセージは表示されませんが、最後から 2 行目で発生するだけです。

CCSpriteFrameCache::sharedSpriteFrameCache()->addSpriteFramesWithFile("swim_male.plist");
CCSpriteBatchNode *sceneSpriteBatchNode = CCSpriteBatchNode::batchNodeWithFile("swim_male.png");

this->addChild(sceneSpriteBatchNode);

CCAnimation* animation = CCAnimation::animation();
animation->setDelayPerUnit(.05f);    
char* fn = new char;

for (int i = 1; i <= 10; i++) {
    sprintf(fn, "character_Male00%02d.png", i);
    CCSpriteFrame* pFrame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(fn);
    animation->addSpriteFrame(pFrame);
}

CCSprite *spriteAnim = CCSprite::spriteWithSpriteFrameName("character_Male0001.png");
spriteAnim->setPosition( ccp(100, 200) );
CCAnimate *animate = CCAnimate::actionWithAnimation(animation);
CCAction *act = CCRepeatForever::actionWithAction(animate);
spriteAnim->runAction(act);

sceneSpriteBatchNode->addChild(spriteAnim, 2);
4

4 に答える 4

4

C ++を使用して、

char* fn = new char --> bad;
char* fn = new char[128];

...

delete []fn;
于 2012-10-29T12:07:10.007 に答える
4

sprintf に単一の文字を割り当てています。sprintf は、文字列が 1 文字より長いため、fn が指すメモリの外に文字列を書き込んでいます。

それ以外の

char* fn = new char;

for (int i = 1; i <= 10; i++) {
    sprintf(fn, "character_Male00%02d.png", i);
    CCSpriteFrame* pFrame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(fn);
    animation->addSpriteFrame(pFrame);
}

これを行う

char fn[128];

for (int i = 1; i <= 10; i++) {
    sprintf(fn, "character_Male00%02d.png", i);
    CCSpriteFrame* pFrame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(fn);
    animation->addSpriteFrame(pFrame);
}
于 2012-06-14T15:01:27.133 に答える
1

このようにできます

CCSpriteBatchNode* spritebatch = CCSpriteBatchNode::create("horse.png");
CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();
cache->addSpriteFramesWithFile("horse.plist");

hero = CCSprite::createWithSpriteFrameName("horse_1.png");
addChild(spritebatch);
spritebatch->addChild(hero);

CCArray* animFrames = CCArray::createWithCapacity(16);
char str[100] = {0};
for(int i = 1; i < 16; i++)
{
    sprintf(str, "horse_%i.png", i);
    CCSpriteFrame* frame = cache->spriteFrameByName( str );
    animFrames->addObject(frame);
}
CCAnimation* animation = CCAnimation::createWithSpriteFrames(animFrames, .1f);
animation->setRestoreOriginalFrame(true);
hero->runAction( CCRepeatForever::create( CCAnimate::create(animation) ) );
于 2013-11-23T11:49:38.793 に答える
0

char* fn = 新しい文字; fn に割り当てるサイズを指定しません。

あなたは次のように書くべきです

  for (int i = 1; i <= 10; i++)
  {
     char* fn = new char[strlen("character_Male0002d.png")+sizeof(i)+1];
     sprintf(fn, "character_Male00%02d.png", i);
     CCSpriteFrame* pFrame = CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName(fn);
        animation->addSpriteFrame(pFrame);
  delete fn;
  fn = NULL ;
  }
于 2012-11-09T06:56:14.300 に答える