Cocos2d-x 3.x plist+pngアニメーションを作る


出典を明記してください.http://blog.csdn.net/lttree******************************************
前言:
今回のものは、実は2048が終わった後、Flashが使いたいと思っていました.
例えば、毎日シリーズのように、冒頭に「ティミー」という鳴き声+アニメーションがありますが、感じがいいのではないでしょうか.
以前、最初のゲームをしたとき、78フレームのFlashを作っていましたが、
でも当時は使えなくて、今ちょうど持ってきて使って、へへ~
本文:
今回の例では、私がここ数日作りたいFlappyBirdの小鳥を例に挙げましょう.
1.まず、必要なリソースを作成します.
これは3つの階層があります(現在私が知っている)
①各画像をロード
②すべての画像を1枚の画像に圧縮し、分割して取り出す.
③plistファイルを介してpngと共に画像を取り出す.
最初の2つは、比較的簡単で、効率があまり高くないので、私は直接この3つを使うのが一番いいです.plist+png
実はplistはmacで一般的に使われていますが、
Windowsでplistを作るにはTexturePackerが使えますが、
(ここでダウンロードできます:https://www.codeandweb.com/texturepacker/download )
とても便利なツールです
インストールが完了し、開くには、エンジンを選択する必要があります.もちろん、cocos 2 dを選択します.
Cocos2d-x 3.x plist+png 做动画_第1张图片
開くと、次のインタフェースが表示されます.
Cocos2d-x 3.x plist+png 做动画_第2张图片
このツールの使い方の詳細は、私にはよくわかりません==です.
詳しくは度娘に聞いてみてください.
私はただ知っていて、上のボタンをクリックして、追加して、あなたはPNGの中のピクチャーを圧縮する必要があります:
Cocos2d-x 3.x plist+png 做动画_第3张图片
このテクニックは私が言う必要はありません.
Ctrlを押すと単一で複数選択できます.
Shiftを押すと連続して複数選択できます.
画像を選んで、彼らを加えます.
画像がなければ、下のものを持ってきてください.

次に、左上隅のFileボタンをクリックします.
Cocos2d-x 3.x plist+png 做动画_第4张图片
次に、ドロップダウン・メニューからPublic sprite sheetを選択し、PNGとPLISTを格納するディレクトリを選択します.
Cocos2d-x 3.x plist+png 做动画_第5张图片
まずplistディレクトリ、それからPNGディレクトリで、2つのファイル名が同じであることが望ましい.
すると、出力されます.
Cocos2d-x 3.x plist+png 做动画_第6张图片
OK、あなたが生成した2つのファイルを保存する場所に見ることができます.
2.次はCocos 2 d-xの呼び出し部分です.
2つのファイル(plistとpng)をResourceにコピーし、
VS 2012でResourceフォルダを右クリックし、->既存アイテムを追加し、両方を追加します.
Cocos2d-x 3.x plist+png 做动画_第7张图片
ここで、私は直接HelloWorldインタフェースで、小鳥の飛行アニメーションを放送しました.
ハローワールドでcppのInit関数には、次のコードが含まれています.
// ①    ,       
	CCSpriteFrameCache * cache = CCSpriteFrameCache::sharedSpriteFrameCache();  
	cache -> addSpriteFramesWithFile("hero_bird.plist");

	// ②     ,    ,       
	CCSprite *sp = CCSprite::createWithSpriteFrameName("bird_hero_01.png");
	sp -> setPosition(Point(visibleSize.width/3,visibleSize.height/2));
	this -> addChild( sp );

	// ③    ,      
	Vector< SpriteFrame* > sfme = Vector< SpriteFrame* >::Vector();
	char str[20] = {0};
	for( int i = 1 ; i < 4 ; ++i )
	{
		// ④       ,      
		sprintf(str,"bird_hero_%02d.png",i);
		SpriteFrame *fname = cache -> spriteFrameByName( str );
		sfme.pushBack( fname );
	}
    // ⑤     ,      
	CCAnimation *animation = CCAnimation::createWithSpriteFrames( sfme , 0.1f );
	sp -> runAction ( CCRepeatForever::create(CCAnimate::create(animation )));

説明します.
前①、②は言うまでもなく、
③、これは以前CCArrayかArrayで、
今はだめです.どうせ私は3.0と3.2でArrayを使うことができません.⑤
createWithSpriteFramesで問題が発生し、
この関数定義に追いつくと、次のことがわかります.
Animation* Animation::createWithSpriteFrames(const Vector& frames, float delay/* = 0.0f*/, unsigned int loops/* = 1*/)
{
    Animation *animation = new Animation();
    animation->initWithSpriteFrames(frames, delay, loops);
    animation->autorelease();

    return animation;
}

最初のパラメータは次のとおりです.
const Vector& frames

この点は以前のバージョンとは違うので、注意してください.
そして④
これは画像の名前を取得します.なぜですか.
sprintf(str,"bird_hero_%02d.png",i); どうですか.
%02 dは、iを取った後、足りないのは0で補うことができるので、
例えば、%dであれば、
iが1に等しい場合、取得された名前はbird_です.hero_1
%02 d、名前を取得:bird_hero_01
Ok、動いてみると、小鳥が飛んでいます~
PS:オープニングアニメーションとしてはどうすればいいですか?
私の方法は上記のコードの後に計画タスクを追加することです.
どのくらいの時間後のジャンプ:
this->scheduleOnce(schedule_selector(InkmooFlash::jumpToMain), 4);

これで、1フレームどのくらい再生して、全部で何フレームになるかを計算して、オープニングアニメーションにすることができます~.
出典を明記してください.http://blog.csdn.net/lttree******************************************