自律的に動作するキャラクタを作成してみたいと思います. 以下の作業はすべて,前に設定したゲーム開発用フォルダの 中で行なうことになります.
キャラクタのクラス名は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
各自適当なコマンドを追加してみて下さい.