【cocos2d-x 3.x】Actionを組み合わせて、ペラペラなSpriteを表現する
cocos2d-xのActionを組み合わせのみで、Spriteをペラペラ風に見せます。
回転の表現
[ポイントA]
1. 左右から潰す(X軸のアンカーポイントを中央にした状態で、Scallを0まで小さくする)
2. 絵を逆にする
3. 左右に膨らませる(1と逆の事をする)
1~3を順番に行う事で、クルっと回転した様に見えます。
#define ANIM_TIME_TURN 0.4f
#define ANIM_TIME_JUMP 0.6f
//左右指定された方に方向転換する CHARA_DIRE_LEFT or CHARA_DIRE_RIGHT
void Character::turn(bool dir)
{
//既にその方向を向いていたら何もしない
if(dir == mDir)return;
//ターン中やジャンプ中だったら何もしない
if(kCharacterStateTurn == mCharaState || kCharacterStateJump == mCharaState)return;
//回転中状態にする
mCharaState = kCharacterStateTurn;
//左向きになっていたら右向き(デフォルト)にする
if(this->isFlippedX()){
mDir = CHARA_DIRE_RIGHT;
//右向きになっていたら左向き
}else{
mDir = CHARA_DIRE_LEFT;
}
//元々のスケールXを保存
float defaultScaleX = this->getScaleX();
//潰す
auto scaleSmallAct = ScaleTo::create(ANIM_TIME_TURN/2, 0, this->getScaleY());
//絵を逆にする
auto callfuncTurnPng = CallFuncN::create([=](Node* sender) {
this->setFlippedX(mDir);
});
//膨らませる(元のスケールに戻す)
auto scaleBigAct = ScaleTo::create(ANIM_TIME_TURN/2,defaultScaleX,this->getScaleY());
//状態を戻す
auto callfuncSetState = CallFuncN::create([=](Node* sender) {
mCharaState = kCharacterStateNone;
});
//[ポイントA]:
auto seq = Sequence::create(scaleSmallAct, callfuncTurnPng, scaleBigAct,callfuncSetState, NULL);
this->runAction(seq);
}
ジャンプの表現
[ポイントB]
1. 上から潰す(Y軸のアンカーポイントを下にした状態で、Scallを数%小さくする)
2. 1の状態で数秒待ち、溜めを表現
3. ジャンプ&Scaleを戻す
1~3を順番に行う事で、紙がぐにゃっと上から曲がって、そのまま飛び上がった感じになります。
void Character::jump(int distance)
{
//ターン中やジャンプ中だったら何もしない
if(kCharacterStateTurn == mCharaState || kCharacterStateJump == mCharaState)return;
//ジャンプ状態にする
mCharaState = kCharacterStateJump;
//左向きの場合は左にジャンプする様に距離をマイナスに
int l_dis = distance;
if(mDir == CHARA_DIRE_LEFT)l_dis = -distance;
//デフォルトのスケールYを保存
float defaultScaleY = this->getScaleY();
//上部をぐにゅっと少し潰す
auto scaleSmallAct = ScaleTo::create(ANIM_TIME_JUMP * 0.2f, this->getScaleX(),defaultScaleY * 0.5f );
//溜めを作る
auto delayAct = DelayTime::create(ANIM_TIME_JUMP * 0.2f);
//潰していたのを戻す
auto scaleBigAct = ScaleTo::create(ANIM_TIME_JUMP * 0.1f, this->getScaleX(), defaultScaleY);
//ジャンプ
auto jumpAct = JumpBy::create(ANIM_TIME_JUMP * 0.5f, Vec2(l_dis, 0), distance * 1.2f, 1);
//大きさ戻すのとジャンプは同時
auto spawn = Spawn::create(scaleBigAct, jumpAct, NULL);
//状態を戻す
auto callfuncSetState = CallFuncN::create([=](Node* sender) {
mCharaState = kCharacterStateNone;
});
//[ポイントB]:
auto seq = Sequence::create(scaleSmallAct, delayAct, spawn, callfuncSetState, NULL);
this->runAction(seq);
}
その他
キャラクターの周りに白い枠を付けてやると、紙っぽさが増して、ペラペラ感がより出る気がします。
Author And Source
この問題について(【cocos2d-x 3.x】Actionを組み合わせて、ペラペラなSpriteを表現する), 我々は、より多くの情報をここで見つけました https://qiita.com/twt_paul/items/0463e100075d154b3444著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .