Cocos2d-xのActionまとめ 基本編

2018年10月7日 engineering

Cocos2d-xでアニメーションを行うのによく用いるActionクラスをまとめました。

ソースコードはこちらから https://github.com/foresta/ActionSample/blob/master/Classes/TestScene.cpp

基本編と応用編とイージング編に分けてまとめていきます。

環境

  • OS X High Sierra
  • Cocos2d-x 3.17

アクションまとめ

Actionの基本

Node::runAction(Action* action)を用いてアクションを実行します。

ActionにはByとToが存在することが多いです。
Moveの例で説明すると、MoveByが今のNodeの位置からどれだけ移動するかで、MoveToはどこに向かって移動するかになります。 相対的な指定と、絶対的な指定ができるイメージです。

状況に応じて使い分けましょう。

Move

void TestScene::move()
{
    // iconを(x: 50, y: 0)分だけ、1秒間かけて移動
    this->icon->runAction(MoveBy::create(1.f, Vec2(50.f, 0)));
}

Rotate

void TestScene::rotate()
{
    // iconを1秒かけて一回転
    this->icon->runAction(RotateBy::create(1.f, 360.f));
}

Scale

void TestScene::scale()
{
    // iconを1秒かけて、2倍の大きさにする
    this->icon->runAction(ScaleBy::create(1.f, 2.f));
}

Skew

void TestScene::skew()
{
    // iconを1秒かけて、x方向に30だけ歪ませる
    this->icon->runAction(SkewBy::create(1.f, 30.f,0.f));
}

Resize

void TestScene::resize()
{
    // iconを1秒かけて、(x: 100, y: 50) だけ多くリサイズする
    this->icon->runAction(ResizeBy::create(1.f, Size(100,50)));
}

Jump

void TestScene::jump()
{
    // その場で5回、30の高さでジャンプさせる
    Vec2 position { Vec2::ZERO };
    float jumpHeight { 30.f };
    int count { 5 };
    this->icon->runAction(JumpBy::create(1.f, position, jumpHeight, count));
}

Bezier

void TestScene::bezier()
{
    // ベジエ曲線に乗っ取ってアニメーションさせる
    ccBezierConfig config {};
    config.endPosition = Vec2(50,0);     // 移動終了ポイント
    config.controlPoint_1 = Vec2::ZERO;  // ベジエ曲線のアンカー1 
    config.controlPoint_2 = Vec2(25,50); // ベジエ曲線のアンカー2
    
    this->icon->runAction(BezierBy::create(1.f, config));
}
void TestScene::blink()
{
    // 2秒間で5回点滅させる
    this->icon->runAction(Blink::create(2.f, 5));
}

Fade

void TestScene::fade() 
{
    // 不透明度を0にしたのちに、2秒かかけて表示する(フェードイン)
    this->icon->setOpacity(0.f);
    this->icon->runAction(FadeTo::create(2.f, 255));

    // 以下のコードも同じ動きをする
    // this->icon->runAction(FadeIn::create(2.f)); 
}

Tint

void TestScene::tint()
{
    // 1秒間かけてiconを赤くする
    this->icon->runAction(TintTo::create(1.f, Color3B::RED));
}

まとめ

今回紹介したメソッドは cocos/2d/ActionInterval.cpp に全て記載されているので、引数などに困ったら参照してみてください。

https://github.com/cocos2d/cocos2d-x/blob/v3/cocos/2d/CCActionInterval.cpp