LoginSignup
3
3

More than 5 years have passed since last update.

cocos2d-x 3.0beta スプライトサイズの取得方法が分からない

Last updated at Posted at 2014-03-22

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`)

Main.cpp
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);
}
3
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
3