DirectX スコア機能実装
あいさつ
どうも、はかせです。
今回は今まで作ってきたタスクシステムという名の
オブザーバーパターンを使ってスコア機能を作りました。
実装方法
まずは久しぶりの動画です。
画面左上に注目です。
youtu.be
SCOREという文字の下の数字が敵を倒すたびに
増加しているのがわかると思います。
実装は至って単純で
スコアを管理するReactivePropertyを作って操作することで実装しています。
ReactiveProperty
// Score表示に使うReactiveProperty mScoreRP = std::unique_ptr<Property, Deleter> (new Property(), Deleter()); //変数に変化があった時に表示する処理を登録 mScoreRP->Subscribe ( [&](double value)->void { std::wstringstream score; score.precision(6); score << value; auto scoret = score.str(); auto scoreptr = scoret.c_str(); mScoreText->UpdateText(scoreptr); score.clear(); } );
スコア追加メソッド
今はシーンそのものに持たせてます。
void AddScore(double score){ *mScoreRP + score; }
スコア追加
敵のOnDisableで実行
void EnemyBase::OnDisable() { auto scene = mGameObject->GetScene(); auto playScene = dynamic_cast<PlayScene*>(scene); playScene->AddScore(mScore); }
あとがき
今回はスコア機能実装でした。
正直今までやってきたことの組み合わせだけで実装できたので
珍しく詰まってないです( ・`ω・´)キリッ
(今までの私がんばってた!えらい!)
スコアの減算もReactivePropertyの値を減算するだけで自動的に反映されます。
ただシーン情報をdynamic_castで取得していたり、
スコア管理をシーンが持っているのは
設計的にどうなのかと思ってはいます( ´・ω・`)
ただここ数週間ずっとあーでもないこーでもないと悩んだ結果
どうせ後で作り直すんだしまずは実装しようぜ!
という考えに至り、設計が甘いままですが実装しました。
(悩み続けてもいい設計なんてできないし
未熟者の自分は考えながら手を動かさないとね)
それでは今回はこの辺でノシ
今回作ったものはgithubに上げました。
github.com