第4章 システムの実装
4.2 システム構築上に必要なクラス
キャラクターを表示するビッドマップは、同じキャラクターを4つの方向から見た 画像を、方向ごとに3枚の画像(右足前に出す、左足を前に出す、普通に立ってい る)を持たせることによって、ユーザーの操作に応じて全方向のアニメーションを 実現することができる。
図 4-3キャラクターを表すビットマップ
アニメーションする時はマスをまたがることがあるので、現在位置はマップの位置 ではなく、画面の座標である。後述する画面に表示するメソッドなどはこの値を参 照して、座標に合わせて表示する。
また、スプライトクラスは以下のメソッドを実装してある:
1、現在位置に合わせて画像を表示するメソッド
2、必要に応じて移動アニメーションを登録するメソッド 3、移動のアニメーションがない時、その場で動くメソッド
4、タイマーによって登録されたアニメーションを使用して、表示位置を変更する メソッド
アニメーションクラスは、単に方向と、移動する距離と移動の際に表示されるアニ メーションしか保持していない単純なクラスである。操作に応じて、例えば 右に 移動する という命令を受けた時、あらかじめ目的地までの4枚のアニメーション
(左足だす、両足そろう、右足出す、目的地に立っている)を登録する。そして、
事前にセットしたタイマーのタイマーイベントによってそれが発動していく仕組み である。
は、ピクセルのRGB値を比較して、3つの中に二つが0で、残った一つが最大値 の255の時はコピーや合成を行わない。こうすることによって、自由にビットマ ップを自然に、そして効率よく重ねることができる。メモリー上で編集すると画面 上に表示する動作を同じクラスで実現するため、DIBSECTION形式のビットマップ を使用する。
また、作業の利便を図るため、ビットマップ関連のメソッドを多数実装してある。
1、ビットマップをファイルからロードメソッド 2、ビットマップをファイルにセーブメソッド 3、ビットマップをDCに描画するメソッド
4、ビットマップをビットマップにコピーするメソッド 5、ビットマップ同士を合成するメソッド
などを実装した。これによって、全てのクラスが簡単にビットマップを扱うことが できる。
4.2.2 アイテムダイアログクラス
特殊な使い方なので、既存のクラスでは使えず、ダイアログクラスも自分で実装 する必要があった。ユーザーにより簡単に部屋をカスタマイズできるために、より 直感的な操作ができるインターフェースを実装する必要があった。それが、このダ イアログクラスである。
図 4-4右クリックメニュー
ユーザーは変更したい場所で右クリックして、変更したい項目を左クリックする と、特殊なダイアログクラスがその場で現われる。
図 4-5アイテム選択ダイアログ
表示されたダイアログはシステム標準の、あるいはユーザーが自分で用意したオ ブジェクトを集めたものである。キャラクターの右上の方で見える緑色の四角いカ ーソルで好きなオブジェクトを選ぶことで、その場所にオブジェクトを配置したり、
地形を変更することができる。
図 4-6アイテム選択ダイアログに使用例
このダイアログが特殊なところは、呼び出す際に引数として受け取るビットマップ クラスへのポインタとフラグによって、ビットマップに合わせて大きさを変えて表
示することである。そして、マウスポインタがさしている場所にカーソルを表示し ていまどのオブジェクトを選択しているかを分かりやすく表現する。そして、シン グルクリックでそのオブジェクトを選択した後、呼び出す際のフラグによってアイ テムの登録・削除・変更などを行う。また、操作に間違いがあるときなどダイアロ グをキャンセルしたい時は、他のところをクリックなどの操作でアイテムダイアロ グのフォーカスをはずすことによって消去できる。
4.2.3 メッセージクラス
ユーザーが入力したメッセージや、接続したほかのユーザーが入力したメッセー ジをそのキャラクターの頭上に表示することは前章に述べた通りで、それを実現す るためのクラスである。メッセージクラスはスプライトクラスの中に存在して、登 録や表示もスプライトクラスを経由して行う。これは、一つのキャラクター(スプ ライト)は同時に一つのメッセージしか出せないから、このように管理した方が合 理的である。
このクラスはコンストラクタからメッセージを受け取り、それに合わせて入力さ れた文字を表示するビットマップを作成する。文字に吹きだしのような効果をつけ るため、直接画面に文字を描画するのではなく、メッセージの文字数に合わせて改 行や、長すぎるメッセージを削除して必要なサイズを算出し、それに合ったサイズ の背景を用意された背景ビットマップからコピーする。そしてその上にメッセージ を描画してから画面上に表示する。これによって漫画などでよく見られるような、
自然なメッセージ表示ができる。
図 4-7メッセージ表示