Hatena::ブログ(Diary)

senzogawaのNな日々 このページをアンテナに追加 RSSフィード

2004 | 11 | 12 |
2005 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2006 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2007 | 01 | 02 | 03 | 04 | 05 | 06 | 11 | 12 |
2008 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2009 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 11 | 12 |
2010 | 01 | 02 | 03 | 04 | 05 | 06 | 07 | 08 | 09 | 10 | 12 |
2011 | 01 | 03 | 04 | 05 | 06 |
2012 | 01 | 08 | 09 |
2013 | 02 |

2005-02-21 カスタムウェイト

カスタムウェイト

| カスタムウェイトを含むブックマーク カスタムウェイトのブックマークコメント

はじめに

 今回は前回(id:senzogawa:20050214)からの続きで、それぞれのポイントについて詳細を説明していく。

入力待ちカーソル対応

 まず、入力待ちカーソル対応だが、以下を決める必要がある。

 カーソル画像をシーンによって切り替える、なんてこともできるが、機能には関係ないので、慣れないうちは、やらない方がいい。

  1. スプライト番号
    これはテキストウィンドウによる。humanz,windowbackを使用し、humanzに指定した番号よりも小さい番号を使用する必要がある。
  2. カーソル画像ファイル
    デフォルトで良いならパッケージに同梱されている「cursor0.bmp」と「cursor1.bmp」を用いる。それぞれ、クリック待ち、改ページ待ちの画像だ。
  3. 表示位置
    表示位置を固定するか、文章の終わりとするか。固定した方が座標を取得したり、はみだしを考慮しなくて済むので簡単。
  4. 非表示のタイミング
    システムウィンドウやダイアログを表示したときは非表示とするかどうか。当然何もしない方が簡単だが、最前面に表示されるとさすがに邪魔なので、対処する方がいいだろう。

 画像を読み込むのはゲーム開始時で、カスタムウェイト内では表示非表示のみを行うことになる。

 実装の際にはルーチンを用意しておき、適時呼び出すといいだろう。

 必要なのは、以下のルーチンだ。カーソル画像を適時変更する場合には、そのためのルーチンを別途用意するといい。

  1. カーソル画像の読み込み(クリック待ち、改ページ待ち両方の画像を非表示状態で読み込む)
  2. カーソル画像の表示(クリック待ち、改ページ待ち表示の切り替え)
  3. カーソル画像の非表示(両方とも非表示にする)

システムボタン対応

 次に、システムボタンを使う際に決めておくのは、以下の点だ。

  1. スプライト番号
    これは表示位置にもよるが、テキストウィンドウの上に表示するなら、入力待ちカーソルと同様に、humanzに注意をする必要がある。
  2. システムボタン画像ファイル
    システムボタンはデフォルトが無いので、まずは文字列スプライトで試してみるといい。
  3. 表示位置
    固定座標で考えた方がいいだろう。動かせるようにするには結構面倒な作業があるので。
  4. ボタン番号
    普通、カスタムウェイト時にはシステムボタンくらいしかボタン定義しないので、適当に付けても問題ない。

 これも画像を読み込むのはゲーム開始時で、カスタムウェイト内ではボタン定義、表示非表示を行う。

 やはりルーチンを用意して処理する方がいいだろう。

 必要なのは以下のルーチンになる。

  1. システムボタン画像の読み込み(必要な画像を非表示で読み込む)
  2. システムボタンのボタン定義(spbtn,またはexbtnでボタン定義する)
  3. システムボタン画像の表示(ボタン画像を全て表示する)
  4. システムボタン画像の非表示(ボタン画像を全て非表示とする)

マウス、キーの対応

 最後にマウスとキーの対応だが、これはサンプルにある程度示されている。要は、textbtnwaitで返ってくる値に対して処理を行えばいい。

 よくある処理としては、ホイール上でのバックログ表示と、Escapeキーでの終了確認、Spaceキーでのウィンドウ消去だ。

 これらは基本的にはsystemcallで済むので、特に用意する必要のあるルーチンは書かないが、実際には、ルーチンを使った方がいいとは思う。

 例えば、ゲーム終了の場合は、1.終了確認ダイアログを表示し、2.「はい」なら終了させる、といった流れになるが、この流れを「*gameend」などという一つのルーチンとして、それを呼び出すだけにする。

 こうしておいて、システムボタンを作った時に同じように「*gameend」を呼び出せば、動作に違いが出なくていい。


 今回は以上。説明したルーチンなどを実装したサンプルを以下に置いておく。

http://senzogawa.s90.xrea.com/dl/customwait.zip

 非表示処理をしていないため、バックログなどでカーソル画像が表示されっぱなしになっているが、これについては、いずれ対応を説明する。

トラックバック - http://d.hatena.ne.jp/senzogawa/20050221
Connection: close