自律的に動作するキャラクタを作成してみたいと思います. 以下の作業はすべて,前に設定したゲーム開発用フォルダの 中で行なうことになります.
キャラクタのクラス名はCharacterにします.よって,Character.javaとういう ファイルにクラスを作ることになります.内容は以下のようにして下さい.
import ac.hiu.j314.elmve.*; import ac.hiu.j314.vesma.*; public class Character extends VesmaAgent { //この部分に様々な変数やメソッドを入れていく. //とりあえずは空でよい. }
作成したキャラクタを実際に生成するには,前に説明したように VESMAのコンパイラでコンパイルします.「createInstance」ボタン を押した時に,objectNameを指定できるので「kappa」と入力 しておきます.
これで,「kappa」とうい名前のキャラクタが生成されます.ただ,これだけ ではクエスチョンマークが表示されるだけなので,面白くありません. 次にAcerola3Dファイルを用いてキャラクタの表示を変更してみます.
Acerola3Dファイルとは,一つのファイルの中に,キャラクタの3次元の形状の データと,動きのデータをまとめて入れてあるファイルです.ファイルの拡張子 は「.a3」です. (Acerola3Dファイルの詳細はhttp://elm-ve.sf.net/a23/を参照して下さい. Acerola3Dファイルのビューアはhttp://elm-ve.sf.net/a23/A3Viewer/から インストールすることができます.) まずは,以下のkappa.a3ファイルをダウンロードして ワークフォルダの中に保存して下さい
次にCharacterクラスに以下のメソッドを付け加えます.
protected void init() { super.init(); a3UI = "x-res:///kappa.a3"; }
最初のプログラムの「public class Character extends VesmaAgent {」 と最後の「}」の間に上のソースを入力します. 入力したらコンパイルしておいて下さい. プログラムを書換えたのでコンパイラの「refreshClassLoader」ボタンを 押してプログラムの更新内容を反映させます.以前作ったkappaは古い プログラムのオブジェクトなので,一旦削除してもう一度「createInstance」 ボタンでkappaを生成しなおします. カッパが表示されるはずです.
キャラクタを自律的に移動するように,以下の変数とメソッドを追加して下さい.
double theta; public void method1(Order o) { theta += 0.1; double xyz[] = new double[3]; xyz[0] = 5.0*Math.cos(theta); xyz[1] = 5.0*Math.sin(theta); setPlace(xyz); repaint(); send(makeOrder("method1",NULL),1000); }
このメソッドは回転するように 移動するためのメソッドです.プログラムを変更したので,またkappaを削除して 生成しなおします.そしてVESMAのコマンドライン(「メニューの [Command]を押してコマンドラインを表示してから」)以下の コマンドを入力すればキャラクタが移動し はじめます.
##kappa method1 &
アバタを追い掛けるように以下のメソッドを追加します.
public void method2(Order o) { ElmStub e = getElm("@ac.hiu.j314.elmve.ElmAvatar"); Request r = makeRequest(e,"getPlace",NULL); receive(r,"method3",NULL); send(r); } public void method3(ReplySet rs) { Place avatarPlace = (Place)rs.getPlace(0,0); Place myPlace = getPlace(); Place tmp = new Place(); tmp.sub(avatarPlace,myPlace); tmp.scale(0.1); myPlace.add(tmp); setPlace(myPlace); repaint(); send(makeOrder("method2",NULL),200); }
kappaに対してmethod2というメッセージを送れば動き出します. つまり,以下のようなコマンドを入力して下さい.
##kappa method2 &
キャラクタがくちごたえするように.以下のメソッドを追加してみましょう.
public void hello(Request r) { send(makeReply(r,"Hello!")); }
以下のコマンドを入力すると返事をします.
##kappa hello
各自適当なコマンドを追加してみて下さい.