面クリア表示、開始メニュー画面、ステージ選択、画面切り替えの仕組み、保存・再開の仕組みまで、いくつかのサイトの情報を参考にがっつり11時間かけて進捗できました。

クリア表示
デバッグプリントだけじゃアレなので、新規ウィジェットでStageClearの表示を作成。


ついでに、レベルBPにおいてると、判定処理とかを今後改良できないのでゲームモードBPに移動。コピペでいけるかと思いきや、変数定義とかはついてこないので参照エラーでまくり。設計大事w
開始メニュー


タイトル画面用の新規レベルを作成し、プロジェクトのマップでデフォルトのレベルに設定。
ステージ選択
ここの作り方がいろいろあるようで苦戦。TileViewがかっこいいんでこれでやろうと思ったが、日本語に限らずなんか情報が少ない。
ここであきらめればよかったんだろうけど、何とかイメージに近いものができた。
- ステージ選択するボタンのウィジェットとそれを並べる親のTileViewのウィジェットつくる
- ステージ情報(ステージ番号と難易度とサムネ画像)の構造体と、それのデータテーブルつくる
- ボタンのOnClickにステージ(レベル)をロードして画面遷移する
- ゲーム開始時にステージ情報を読み込む
- タイトル画面上のステージ選択ボタンOnClickでTileViewにウィジェット切り替える

白く塗っている文字がなぜかグレーで、とりあえず黒文字でいいやと放置した。
けど、色薄い問題・透明度などで色々調べてみたところ、海外サイトで透明度とかじゃなくて、Enableのチェック外れてるとグレーになるっていうオチの可能性を教えてくれてた。まさにそれ。
画面遷移(レベル間の移動)
ステージクリア時のウィジェットに「次へ」ボタン追加
次のステージの情報をどうやってとってくるのがいいのかネット調査。
ステージ増やしたときに参照情報埋め込んでるとメンテ面倒だなと、テーブルみたいなものを想定していたけど、
現在のレベル名は簡単にわかるとのことで、GetCurrentLevelNameの文字分解作戦で連番で管理し自動計算することにしました。
Stage01としていたレベル名をStage-1にして「-」ハイフンで分割し、末尾の数字部分をIntに変換して1足すと。ふむふむ(ΦωΦ)正しくうごかん(Stage-1が再度読み込まれちゃう)。。。
Parse Into Arrayのデリミタ(区切り文字)指定欄に直接「-」と書いてたのがダメぽ(char型になる?)。MakeLiteralString経由でString型にしたら解決した。文字書いちゃダメって罠はコンパイル時に警告してほしいなぁ。

保存・再開
- 保存用にクリアした情報(ステージ番号とクリアフラグのマップ)
- セーブ(新規作成+読みだして上書き)
- ロード(ステージ選択ウィジェット開くとき)
- クリア済のマップ選択ボタンにクリア表記をつける(非表示→表示にきりかえる)

ファイルがあったらロード、なかったらつくる分岐後、カレントレベル名からステージ番号取り出す折り畳みノード(コピペじゃだめだよなぁ)

ステージ番号にクリアフラグつけたペアをマップに追加
このつくりだとクリアしてない面は管理してないけどまぁよし。。。

マップへのAddは重複あってもエラーにはならずに上書きしてくれるぽいのと、クリア表記のデフォルトは非表示でマップにあったら表示に切り替えるって作りなのでたぶんエラーはないはず。
テストプレイ
たまたま遊びに来てた姪っ子にテストプレイしていただきました。
操作がムズい。いまどこかわからない
反対向きなのはイイの?(間違いじゃないのか)
終わっちゃった次はないの?
初めてにしては好感触(ΦωΦ)フフフ…
つづく
明日はステージをいくつか追加して、まちがい指摘してもらう仕組みを完成させたいです。
コメント