cocos2d-xを勉強し始めて最初につまずいたのはonDrawFrameがない!
ひじょーに初歩的ですね。ハイ。
cocos2dではscheduleという機能を使って毎フレームごとの処理を実装していきます。scheduleで検索すると色々他の方が実装の仕方は教えてくれています!
話は変わって、今スプライトアニメーションを実装しているのですが曲者ですねコイツは・・
とりあえず試行錯誤しながら以下のソースでアニメーションをさせることができました。
スプライトアニメーションのやり方は色々あるみたいですが、自分はこれでとりあえず動かすことができました。
ただ一枚のスプライト画像の大きさを取得する部分ですが、実際のスプライト画像のサイズは96px×96pxですが画面に描画すると222px×222pxになっていました。
これはきっと解像度をcocosが自動で読み取ってくれているのでしょうか。
知っている人いたら教えてください。
Sprite* sp = Sprite::create("run_1.png");
CCLog("sprite_width:%f", sp->getContentSize().width);
CCLog("sprite_height:%f", sp->getContentSize().height);
こんな風にしていちいち一枚の画像から大きさを割り出すなんてことはきっと間違っているはず・・・
rcに移行しないとっ('A`)
void Main::setRunChara()
{
//アニメーションオブジェクト生成
m_chara_run_anim = Animation::create();
//どのぐらいの間隔でアニメーションを回すかを設定
m_chara_run_anim->setDelayPerUnit(0.1f);
//アニメーションへのスプライトの登録
for (int x = 0; x < 6; x++) {
char fileName[128] = {0};
//走る画像を5枚用意しているため
sprintf(fileName, "run_%d.png", x+1);
//sprintfで整形したfilename変数をもとにアニメーションへ登録
m_chara_run_anim->addSpriteFrameWithFileName(fileName);
}
//一枚の画像の大きさを取得
Sprite* sp = Sprite::create("run_1.png");
CCLog("sprite_width:%f", sp->getContentSize().width);
CCLog("sprite_height:%f", sp->getContentSize().height);
//取得した画像サイズでサイズ変数を作っておく
Size chara_size = Size(float(sp->getContentSize().width), float(sp->getContentSize().height));
//アニメーションを登録してあとで使いやすいようにするため::AnimationCacheはなくても動作する
m_chara_run_cache = AnimationCache::getInstance();
m_chara_run_cache->addAnimation(m_chara_run_anim, "RUN");
//アニメーションをのっけるスプライトを造る
m_chara = Sprite::create();
//物理演算のためにPhysicsBodyをset(なくても動きます)
m_chara->setPhysicsBody( PhysicsBody::createBox(chara_size) );
//どこに表示するかを設定
m_chara->setPosition(200, 50);
//Directorへの登録
addChild(m_chara, 0);
//Animationをリピートさせるため
RepeatForever* chara_action = RepeatForever::create( Animate::create(m_chara_run_anim) );
//スプライトにアクションを登録
m_chara->runAction(chara_action);
}