Hi everyone,
I wrote that code for spritesheet animation. But it gives error about pushBack() function. Where is the problem about this code ?
SpriteBatchNode* spriteBatchNode = SpriteBatchNode::create("Character.png");
SpriteFrameCache* frameCache = SpriteFrameCache::getInstance();
frameCache->addSpriteFramesWithFile("Character.plist");
auto sprite = Sprite::createWithSpriteFrameName("wlk1.png");
spriteBatchNode->addChild(sprite);
spriteBatchNode->setScale(2.0);
//spriteBatchNode->setAnchorPoint(Vec2(0.0, 0.0));
spriteBatchNode->setPosition(Point(visibleSize.width / 2 + origin.x, 100));
this->addChild(spriteBatchNode);
Vector<SpriteFrame*>frames;
for (int i = 1; i <= 8; i++)
{
std::string frameName = cocos2d::StringUtils::format("wlk%d.png", i);
SpriteFrame* frame = frameCache->getSpriteFrameByName(frameName.c_str());
frames.pushBack(frame);
}
Animation* animation = Animation::createWithSpriteFrames(frames, 0.1f);
animation->setLoops(-1);
auto animate = Animate::create(animation);
sprite->runAction(animate);
Can you tell us the error?
You are using the Cocos Vector class?
Just use an std::vector
http://www.cplusplus.com/reference/vector/vector/push_back/
Is your SpriteFrame
that you put in the vector valid? Also, I think an std::vector
is a better choice long term.
1 Like
slackmoehrle:
valid
I tried std::vector, but it gives another error.
Have you looked at our docs on animations or cpp-tests
?
I looked cpp-tests but i couldn’t find anything about spritesheet animations
It looks like the Vector added 6 objects, can you make sure the 7th and on are valid names in your sprite sheet plist?
You should be pulling from SpriteCache?
auto spritecache = SpriteFrameCache::getInstance();
Vector animFrames;
char str[100];
for(int i = 1; i <= count; i++)
{
sprintf(str, format, i);
animFrames.pushBack(spritecache->getSpriteFrameByName(str));
}
Thank you soo much. My 7th sprite name was wrong The animation works fine but now there is another problem. As you can see i put the character half of width and 100px for height. But it doesn’t seen on 100px height, it seen on 0px height. if i write 200px for the height, it seen on 100px
1 Like
How did you create the sprite sheet?
If you don’t see the whole sprite something is wrong, load the plist into cache and pull from that.
No,I see. But it looks 100px below where it should be.
tdebock
August 28, 2019, 10:12pm
#16
The Sprite is likely using the default CENTER anchor point of Vec2(0.5,0.5). Make it Vec2(0.5,0).
sprite->setAnchorPoint(Vec2(0.5f, 0));
1 Like
And all my problems solved. Thank you soo much
tdebock
August 29, 2019, 4:13am
#18
Sure thing, be sure to help others in the cocos community (or world for that matter) when you can …
1 Like