フリーゲーム・フリーソフトの開発過程を記録していく、TDtechnic公式ブログです。製品はカテゴリの「ダウンロード場」からダウンロードして頂けます。
上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

こんばんはー!今回は色々と変更がありました。やっと本格的にやれそうです。昨日今日書いた分だけでも軽く千行は超えるでしょう(ただし、実際には自動入力やコピペが多く含まれる)。主となる報告もバラバラな分野なので、箇条書きにしましょう。

①タスクシステムを刷新
②文字が大幅進化
③知っているようで知らなかったstaticの話

①タスクシステムを刷新
旧システムの「タスクのなかのタスクリスト(親子関係)」は受け継ぎながら、新たに「メッセージ」という概念を導入しました。これは各タスク(及びその子タスク)が受け取れる単なる文字列ですが、なぜこれが大事なのか?鍵はその自由度です。これなら、いちいち定数などを定義しなくても自由な連絡ができます。今までは親タスクが、必要なオブジェクトのポインタを全てメンバに保持し、メソッドを呼び出して操作していました。しかしこれはクラスを作るたびに大量のポインタを宣言せねばならず、大変面倒でした。今回のシステムでは、親タスクが子に用があれば適当な文字列を送りさえすればよく、子タスクはそれを見て勝手に処理するだけです。親は子の存在を知る必要すらありませんから、親子ともども自分のための宣言以外しないで済むようになりました。さらにメッセージを工夫すれば同期処理が簡単に記述できますので、前に書いたように同期・非同期をソースコードレベルで制御する必要もなくなりました。
と同時にクラスの使い方そのものも変えました。今までは余程の改造が必要ない限り普通にnewして使っていましたが、今回は使うたびほぼ毎回継承して使うようにしました。例えば画像クラスだったら、大抵の場合位置や大きさを指定します。すると複数の画像を使おうなどと思ったら、親クラスの初期化部分はたちまち子クラスのnew及び位置調整コードでいっぱいになり、非常に読みにくくなります。どうせ毎回位置調整などが入るなら、継承したクラスが自力で初期化すればいいじゃないか、というのが今回のやり方です。それに伴い引数で初期化するコンストラクタを削除したので、もはや画像クラスや文字列クラスは実質的に抽象クラスになりました(笑)

②文字が大幅進化
前回Windows APIの力を借りようとして見事失敗したフォントテクスチャですが、遂にいい折衷案ができました。結局テクスチャ自体は前に書いた通りDrawTextで作り、ジャギーがちょっと目立つので自前で2倍アンチエイリアス(縦横2倍で作った画像を縮小する)をかけました。で、文字位置の取得はどうしたかですよね。DrawTextのDT_CALCRECTを使って、位置を取得する度に計算することにしました。前のように予め取得しておいて読むよりは遅いかも知れないが、変換などのイベントがあった時しか実行しないからさほど影響はないであろう、という結論からです。それに以前の方式だってどっちみち文字列が更新されたら一から取得し直していたので、全体としてはやはり大差ないでしょう。
そして、これまた以前問題になった「va_listの壁」に進展が見られました。タスクシステムがメッセージ制御になったのに伴い、文字列入力と文字列表示のタスクを同時に生成しなくて済むようになりましたので、ちょっと悲しいですがこの間の発明は全く必要なくなり、軽量化のため全削除です。まあ、この経験もいつか役立つときが来るでしょう…(泣)

③知っているようで知らなかったstaticの話
これは報告というかおまけです。とある関数で、メンバにするほどのこともなさそうな、でも状態は保持してほしい変数がありまして、それをメソッド内でstatic宣言しました。しかしある時、ここでちょくちょく問題が発生したのです。どうやら初期値がおかしいようなのですが、初期化時はちゃんと初期値を設定しており、タスクが破棄されればもう関係ない、はずでした。

…staticなローカル変数は全てのインスタンスで共有されてました。

スコープが違うだけで、staticメンバと同じ挙動だったのですね。結局、タスク破棄の前に初期値を設定し直すことで解決しましたけれども、見つかりそうで見つからないバグですよね、これ。
関連記事

[2014/08/22 18:36] | 不死女 -Immortal girl-
|


skall-o
完成までにはWindowsPC買わねば。


Shiro
そうですね。DirectX使う時点でほぼWindows限定なんですよ…

コメント:を閉じる▲
コメント:
この記事へのコメント:
完成までにはWindowsPC買わねば。
2014/08/23(Sat) 03:35 | URL  | skall-o #-[ 編集]
そうですね。DirectX使う時点でほぼWindows限定なんですよ…
2014/08/24(Sun) 21:06 | URL  | Shiro #-[ 編集]
コメント:を投稿
URL:

パスワード:
非公開コメント: 管理者にだけ表示を許可
 
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。