cocos2dxではどう表現するんだろう。
『cocos2dx ライフゲージ』とかでググっても
ベストアンサー的なものが見つからず。
自分なりに考えてみたのでメモ。
ちなみに、以下のやり方は自分で適当に考えただけなので
他にもっと良いやり方があれば教えて下さい。
減っていく、あるいは増えていくゲージを表現するにはどうするか?
今回は時間の経過と共に減っていくタイムバーを製作するとして、
とりあえず、ゲージがマックス状態の画像を用意して、
その矩形を時間経過と共に
変形(トリミング)して行けば良いのではないか。
イメージ的にはこんな感じ。
cocos2dxでは画像をスプライトにして表示する場合は
Rectを使うので、それをマイナス1ずつ縮めていく関数を作ってschedule_selectorで毎秒呼び出し。
例えば、2分でゲージをゼロにするようにしたければ
ゲージの最大値の横幅÷120(秒)で1秒当たりの
ゲージの減り幅が算出できるので、計算敵には
(現在のゲージサイズ) - (ゲージの最大値の横幅/120)ということになる。
コード的にはこんな感じかしら。
(今回は画像もPlistから呼び出す仕様)
initでバー画像を表示させて
auto Stcache = SpriteFrameCache::sharedSpriteFrameCache(); Stcache->addSpriteFramesWithFile("States_all.plist"); auto stTime01 = Sprite::createWithSpriteFrameName("stTime_01"); stTime01->setTag(1);
CountDownでRectを縮めていく関数を作る
void HelloWorld::CountDown_Time(float dt) { Sprite* stTime01 = (Sprite *)this->getChildByTag(1); float nowTime = stTime01->getContentSize().width - (barsize - (barsize / 120));
//上記の変数 barsize はタイムゲージ(stTime01)の最大値を予め定義しておく if (nowTime >= 0) { stTime01->setTextureRect(Rect(★, ★, nowTime, 90)); //Rect(★の部分にはテクスチャアトラスシート上でのライフゲージの開始位置X,Yが入る } }
sucedule_selectorで毎秒呼び出し。
//カウントダウンTimeを呼び出す ->schedule(schedule_selector(HelloWorld::CountDown_Time),1.0f);※本当は毎秒呼び出しより0.1秒ベースで呼び出した方が
ゲージの減り方がなめらかなので、そこら辺は適当に調整。
今回はタイムバーなので時間経過で関数を呼び出しているけれど、
ライフゲージなどの場合は当たり判定でこの関数を呼び出せばOKというわけですな。
ついでにバーだけだとそっけないので上や下にフレームを追加して重ねる。
画像にはTimeじゃなくてLifeって入ってますな。
まぁ、そこらへんが気にせずに。
☆★というわけでcocos2d-xで制作しました★☆
☆★ライフゲージの見本がココにある!★☆
カテゴリ: アクション
Google Playで詳細を見る
今なら(永久に)無料! 今すぐチェック!!
0 件のコメント:
コメントを投稿