কোকোস 2 ডি-এক্স এনিমেশন কীভাবে খেলবেন?


9

আমি কোকোস 2 ডি-এক্স-এ নতুন এবং কোকোএস 2 ডি-এক্স-এ কীভাবে অ্যানিমেশনগুলি খেলতে পারি তার জন্য একটি ভাল উপায় / টিউটোরিয়াল খুঁজছি।


উত্তর:


9

স্প্রাইট অ্যানিমেশন বেশ সহজ। আপনি কেবল একটি CCAnimationনোড তৈরি করুন, লুপগুলিতে চিত্রগুলি যুক্ত করুন, তারপরে একটি ক্রিয়া তৈরি CCAnimate::actionWithDuration(float, CCAnimation, bool)করে স্প্রিটটিকে চালিত করুন।

উদাহরণ:

CCAnimation * anim = CCAnimation::animation();
// There are other several ways of storing + adding frames, 
// this is the most basic using one image per frame.
anim->addFrameWithFileName("bear1.png");
anim->addFrameWithFileName("bear2.png");
anim->addFrameWithFileName("bear3.png");
anim->addFrameWithFileName("bear4.png");
anim->addFrameWithFileName("bear5.png");
anim->addFrameWithFileName("bear6.png");
anim->addFrameWithFileName("bear7.png");
anim->addFrameWithFileName("bear8.png");

CCAnimate *theAnim = CCAnimate::actionWithDuration(1.8f,anim,true); 
// Duration, animation action and bool to return to frame 1 after finishing.

CCSprite *bear = CCSprite::spriteWithFile("bear1.png");
addChild(bear,0); //Don't forget to add any sprite you use as a child to the CCLayer!
bear->runAction(theAnim);   

ধন্যবাদ তবে হ্যালোওয়ার্ল্ড :: getPlayer () কী? আমি রানঅ্যাকশন যুক্ত করার জন্য আইফোন সিমুলেটরটিতে ক্র্যাশ পাচ্ছি (ল্যানিম); আমার কোড
2600 তম

আপনি চান একটি স্প্রাইট বা অন্য কোনও নোড ব্যবহার করতে পারেন, আমার একটি পদ্ধতি আছে যা আমি ইতিপূর্বে আরম্ভ করে রেখেছি _ প্লেয়ার নামে একটি স্ট্যাটিক স্প্রিটকে ফিরিয়ে দিই।
এমএলপ্রোগ্রামার-সিআইএম

আমি এখন এটি স্বচ্ছতার জন্য সম্পাদনা করেছি :) আপনি স্বাগত জানাই।
এমএলপ্রোগ্রামার-সিআইএম

CCAnimate *theAnim = CCAnimate::actionWithDuration(1.8f,anim,true); কোকোস 2 ডি-এক্স এর বর্তমান সংস্করণে কাজ করে না। কী বদলাতে হবে?
বেন

সম্ভবত, তারা ইদানীং প্রচুর পরিমাণে পুনর্নির্মাণ করেছে। এখন কী, কেবল তাদের ডকুমেন্টেশন চেক করুন এবং সম্ভবত আপনার আরও / কম প্যারামিটার প্রয়োজন।
এমএলপ্রোগ্রামার-সিআইএম

5

CoCos2dx (2.1.1) এর নতুন সংস্করণে আপনি এটি ব্যবহার করতে পারেন (এটি কাজ করছে)

CCSpriteFrameCache* cache = CCSpriteFrameCache::sharedSpriteFrameCache();
cache->addSpriteFramesWithFile("numbers.plist","numbers.png");

CCSprite* sprite = CCSprite::createWithSpriteFrame(CCSpriteFrameCache::sharedSpriteFrameCache()->spriteFrameByName("slice2_0_0.png"));
sprite->setPosition(ccp(GameScene::windowSize.width/2,GameScene::windowSize.height/3));

CCSpriteBatchNode* spriteBatchNode = CCSpriteBatchNode::create("numbers.png");
spriteBatchNode->addChild(sprite);
addChild(spriteBatchNode);

CCArray* animFrames = CCArray::createWithCapacity(10);

char str[100] = {0};
for(int i = 0; i < 10; ++i)
{
    sprintf(str, "slice2_0_%d.png", i);
    CCSpriteFrame* frame = cache->spriteFrameByName( str );
    animFrames->addObject(frame);
}
CCAnimation* animation = CCAnimation::createWithSpriteFrames(animFrames,1.f);
sprite->runAction(CCAnimate::create(animation) );

সম্পাদনা পর্যালোচনা সারিতে এই প্রশ্নের একটি সম্পাদনা রয়েছে যা পুনরায় নামকরণ spriteWithSpriteFrameকরে createWithSpriteFrame। এটির উন্নতি কিনা তা জানাতে আমি পর্যাপ্ত কোকোস 2 ডি জানি না। সম্পাদনা কি এই উত্তরটির উন্নতি করবে?
আনকো

2

আপনি যদি একটি .লিস্ট ফাইলটি ব্যবহার করতে না চান এবং ইফ এস এর উত্তরটি কোকোস 2 ডি-এক্স এর বর্তমান সংস্করণ সহ চালিয়ে যেতে চান , তবে নীচের মতো কিছু লাইন পরিবর্তন করুন:

    CCSprite * sprite  = CCSprite::create("bear1.png"); // NEW - create a sprite here
    CCAnimation * anim = CCAnimation::animation();
    // There are other several ways of storing + adding frames, 
    // this is the most basic using one image per frame.
    anim->addSpriteFrameWithFileName("bear1.png");
    anim->addSpriteFrameWithFileName("bear2.png");
    anim->addSpriteFrameWithFileName("bear3.png");
    anim->addSpriteFrameWithFileName("bear4.png");
    anim->addSpriteFrameWithFileName("bear5.png");
    anim->addSpriteFrameWithFileName("bear6.png");
    anim->addSpriteFrameWithFileName("bear7.png");
    anim->addSpriteFrameWithFileName("bear8.png");

    anim->setLoops(-1); // for infinit loop animation
    anim->setDelayPerUnit(0.1f); //Duration per frame
    //CCAnimate *theAnim = CCAnimate::actionWithDuration(1.8f,anim,true); // this wont work in newer version..

    sprite->runAction(CCAnimate::create(anim) );
    sprite->setPosition(ccp(200,200)); //set position of sprite in some visible area

    this->addChild(sprite, 1); // cross check the Z index = 1 with your code

আমি মনে করি এটিই বেনের প্রশ্নের সমাধান হতে পারে ।


0

Cocos2dx-v3 এর জন্য আপনার এর মতো কিছু দরকার হবে:

auto cache = SpriteFrameCache::getInstance();
Vector<SpriteFrame*> frames = Vector<SpriteFrame*>();

frames.pushBack(cache->getSpriteFrameByName("open.png"));
frames.pushBack(cache->getSpriteFrameByName("closed.png"));
frames.pushBack(cache->getSpriteFrameByName("closed.png"));
cocos2d::Animation* anim = cocos2d::Animation::createWithSpriteFrames(frames, 0.1f, 1);

cocos2d::Animate* anim_action = cocos2d::Animate::create(anim);
//sprite is already added to scene elsewhere and ready to go
this->sprite->runAction(RepeatForever::create(anim_action));

অন্য কোনও পথে যেতে সক্ষম ছিল না। আপনি বিরতি দেওয়ার জন্য বারবার একই ফ্রেমগুলিকে পুনরায় যুক্ত করতে সক্ষম হন তবে আমি নিশ্চিত যে এটি করার আরও একটি উপায় আছে।


আপনি কীভাবে একই অ্যানিমেশনটি চালাবেন তা আমাকে বলতে পারবেন, তবে স্প্রিটগুলি অনুভূমিকভাবে উল্টে গেল? আমি এই নিয়ে কিছুক্ষণ লড়াই করছি, এবং সেটপ্লিটপ্যাক্স (সত্য) মনে হচ্ছে না ...
কায়জার সোজায়
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.