Myタスクシステムレポート2

前回の続きです。


昨日のレポートで知ったことを元に考えてみると、
今回のソースはちょっと恥ずかしいなぁ...と思いながらも、負けずに続けます。

「TaskList.as」について1

ずいぶん無駄なことをしている代表のファイルですが、
無駄なことを指摘しながら進めていきます。


タスクリストを操作するクラスなのですが、
タスクリストを表す配列である_taskListはstaticなので、
このタスクシステムを使ったゲームで使えるタスクリストは1つだけです。


・無駄1
_noUseIdListの配列は、前回説明したTaskクラスの_idに、
タスクリスト上で一意性を持たせるために使っていますが、
これは実際必要ありませんし、_idも必要ありません。
これに関するメソッドも必要ないのでご注意ください。
(いまさらソースを差し替えるのもなんなので、そのままです...。)


次に、このクラスのメインとなるメソッドである、

  • addTask()
  • removeTask()

についてです。
名前のとおり、タスクの追加と除去をするメソッドです。


タスク追加メソッドは、

TaskList.addTask(new TestTask1());

というようにして使います。
このタスクで指定されている優先度をすでに登録済みのタスクの優先度と比べて
優先度が高い(数値的には小さい)順にタスクリストに登録します。
(要は配列に作ったタスクへの参照を代入するということでしょうか。)
アルゴリズムはシンプルなのでソースをご覧ください。
(”識別名”という単語がコメントしてある箇所は無視してかまいません。)
・・・とここでも無駄があります。


・無駄2
タスク追加メソッドの最後にある、

_taskList = taskList;

という項目は必要ありません。
理由は昨日のレポートをご覧ください。


続いてタスク除去メソッドについてです。
使い方は、タスクを自滅させる場合、

TaskList.removeTask(_id);

と各タスクに書けばいいです。
タスクリストを探して、指定した識別名を持つタスクを見つけた場合、
タスクリストの配列から除去するという操作を行っています。
このアルゴリズムもシンプルなので、ソースをご覧ください。
(実のところ、除去に使うこの識別名はタスクの参照を代入した変数を引数とすれば、
削除したいタスクを探すことができるので、実際識別名は必要無いということです。)
さて、ここでも無駄があります。


・無駄3
タスク除去メソッドの、”タスクリストが空でないなら”とコメントされているif文ですが、
これも僕の誤解で、必要ないです。
for文って、実行する際まず条件が真であるかを判定するんですね...。
僕はこの条件判定がされないものだと勘違いしていました。
非常に恥ずかしい。




長くなりましたので、TaskListクラスの解説の続きは次回。