赤宿 = Red Inn

素人の試行錯誤と2Dゲームプログラミング

Late April

Planning

 今年一年は下積みだと捉える。来年から数を打つべし。ゲームを売り続けて虚無を感じるのが目的(?)。

  • 4月 -> Nezの使用開始
  • 5月 -> ターン制ゲームの完成
  • 6月 -> アイテム付きゲームの完成
  • 7月 -> HUD/オプション/イベント機能付きのゲームの完成
  • 8月 -> 短編ローグライクの制作・公開(PC)
  • 9月 -> 短編のブラッシュアップ
  • 10月 -> パズルの短編(iPhone)の制作
  • 11月 -> iPhone向けの調整、オンラインアップデートなど
  • 12月 -> プラットフォーマの短編(PC)の制作・公開
  • 1月 -> 新ローグライクの骨組み
  • 2月 -> 新ローグライクの完成
  • 3月 -> 神に出会う KotlinでSeven Day Roguelikeの制作
  • 4月 -> ゲームの開発記録の公開(できれば本に)

 妄想だらけだ。自分に期待したい。

Progress

 ターン制のゲームループを走らせる前に、タイルマップとキャラの表示をした。

とんでもないミスを平気でする自分がいる

 計算順の問題で、間違った答えを返すことが多かった。デバッグは始めるために15秒ほど待たなくてはならない。ユニットテストについて学ぶべきらしい。
 発行するイベントが不適切なもののため観察できないこともあった。

Debug Console/Inspecter

 リフレクションを利用したNezの機能。たとえばinspect playerと打てば、playerという名前のエンティティのコンポーネント、そのフィールドを確認できる。非常に有効。
 リフレクションを利用すると、ある種のクラスや関数、オブジェクトを集めたり、名前から関数を呼び出すことなどができる。何でもありだ。やはりC#ならまず間違いないだろう。この言語はそろそろ嫌になってきたけれど…

Drawing TiledMap in ECS Framework

 TiledMapComponentがTiledMapへの参照を保持して描画する(アダプタパタンに近い?)。IUpdatableなコンポーネントはNez.Coreにより更新される。Nez.ComponentとしてTiledMapをラップすることで、フレームワークのゲームループに「参加」するような形になる。

キャラチップのアニメーション

 Sprite<AnimationEnum>のplay( AnimationEnum.Pattern )関数で描画する。たとえば『東方向のアニメーションを開始』とすれば、それだけでその通りになる。あらかじめ関数でセットしたデータ(アニメーションのコマのリスト)の通りに動いてくれるから非常に楽だった。
 規格の異なる画像ファイルを扱えるようにしたい。ファイルごとに情報を付ける必要があるが、どうやるか。

ActorView & Observer Pattern

 キャラチップの表示のため、(Grid)Bodyを観察する。観測可能にするため、仮にNez.Systems.Emitterを使ってみた。今後はBodyではなくAction(出来事)の方を観測するように変更する予定。Viewは、歩いた、ワープした、吹き飛ばされた、などの場所移動の文脈を知る必要がある。

Emitter<TArgs, THandler>
+ add( EventHandler )
+ emit( EventType )

body.cs

public class Body {
  public class EventType { ... }
  public class EventArgs { ... }
  public Emitter<EventType, EventArgs> emitter;
  void moveTo( Vec2 pos ) {
    var args = new EventArgs() { body = this, dirBefore = this.dir, posBefore = this.pos }
    (mutate the body itself...)
    emitter.emit( EventType.Move, args );
    ...

Next: Controling

 プレイヤやゲームのコントロール、タイトル画面の作成。その次はゲームエンジンの完成を目指す。