KDOC 28: 交通シミュレーションゲームを作る
CLOSE プロジェクトステータス
プロジェクトは終了した。
未完成で放置した。
導入
都市と交通に着目したゲームを作る。
Tasks
TODO 建物をエンティティ化する
建物をエンティティとして描画させる。
まずECSを導入した。
TODO ebiten UIを使う
扱いづらい方法でやっているので変える。UIというか、別の箇所にも及んでいるので大変そうだ。
- ゲームステートによって常時描画するもの(メニュー・アイコンとか)と、動的に変わるもの(デバッグ表示)がある。
- デバッグメニューは頻繁に文字が書き換わるわけだが、それをいい感じにやる方法がわからないな
- 再作成すると更新できるが、メモリリークして急速に重くなっていく
- Update()でテキストを更新するようなフックが必要
- デバッグ表示があったのでそれにした
- 日付を書き換える方法がわからない。ボタンはクリック時のハンドラがあるが、時間経過のハンドラはない
TODO UIまわりをECSっぽくする
UIは全部構造体のフィールドとして持っている項目を描画しているという感じ。ECSっぽくないので変える。
前のローグライクでは、コンポーネントをかなり使っていた。UI描画はスタティックメソッドで、mainから呼び出す感じ。mainにあるグローバルなゲームステートによって変わるから、systemにはなくmainから呼び出す感じか。systemだと常時実行という感じ。
TODO タイルを1次元配列にする
- 3次元は必要ない
- 2次元もループを回す手間がかかるので、1次元に入れる。ヘルパーを用意すれば扱いやすくなる
TODO 連続建設と単体建設を分ける
道路系は範囲建設だが、建物系は単体建設になる。
TODO バス停の詳細情報を見られるようにする
建設物の情報を保存する。
エンティティ化したあとにやる。
TODO 地形に付随したものをチェックできるようにする
デバッグしやすくする。
TODO ebitenUIを使う
オレオレUIだからあまり綺麗じゃない。
TODO オブジェクトを道路上に走らせる
つながっている道路だけ走れる。
TODO 高さについて考える
どうすればいいのか見当もつかない。
TODO つながっているを表現する(平面)
- 経路探索ライブラリがあるので、そんなに難しくない可能性がある
- 毎回道路に走るたびに乗り物に計算させてつながっているかは判定させればよさそう。つながっているかはベースの座標によって変わるので。
TODO つながっているを表現する(立体)
異なる高さの道路は接続できない。スロープでしかつながらない。
TODO 道路の方向を自動決定する
エンティティ化した後にやる。
設置したときに周囲8マスの状態に応じて画像を変化させる。横にあれば曲がるアイコンになるだろう。
Archives
DONE ベースを作る
参考コードを元にする。不要そうなところを削除していく。
- タイルセットを変えた
DONE 道路画像を登録する
- 後から追加する方法がわからない
- 描いたほうがはやそう
- gimpで追加した
DONE ブルドーザーアイコンが消えた
タイルセットの更新を忘れていたっぽい。Tilesで保存し直したら差分が出て直った。
DONE バス停を作る
とりあえず画像は後回しにして、追加してみる。
DONE コード整理
全体ざっくり読んでみる。
DONE 自動リリース
設定する。
DONE CIチェック
ライブラリの依存関係が多いので、イメージを作成する。
DONE バス停の位置がずれている
設置時にカーソルとずれているのを直す。
建物は高さが違う。描画時に高く表示されていた。
DONE バス停を道路と重ねられるようにする
透過して重ねる。
- TilesとTilesImage
DONE セルの大きさを統一する
今はスナップの精度が違うのでずれる。同じように建設してもずれる。
- 道路を4マスから1マスにした。自分で建てる建物は1マスでいいだろう。
DONE タイル画像を直接触っている部分があり扱いにくい
タイル画像が平原なら〜という箇所が大量に存在する。タイル画像ではなくオブジェクトで判定したいよな。
- 地形もオブジェクトとする(エンティティではない)
- 建物もエンティティとする
- Renderコンポートネントを登録して描画する
- diggerではタイルは配列で表現されていた。2次元配列ではない。そうだ、タイルに関しては3次元でなくてよい。各座標に1つしかないのだから
- タイルは配列にする
- 描画エンティティが座標と高さを持つようにする
CLOSE マップと同じにできないのか
属性とマップの画像を別々に持っている。いちいちfor文で取り出している。
DONE バス停を道路上だけに建設できるようにする
tiletype分岐させることで、バス停を道路上へ建設できるようになった。
DONE デプロイする
先例があるので簡単にできそう。