Powered by SmartDoc

キャラクタ

自律的に動作するキャラクタを作成してみたいと思います. 以下の作業はすべて,前に設定したゲーム開発用フォルダの 中で行なうことになります.

キャラクタのクラスを作る

キャラクタのクラス名はCharacterにします.よって,Character.javaとういう ファイルにクラスを作ることになります.内容は以下のようにして下さい.

Character.java(1)
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クラスに以下のメソッドを付け加えます.

Character.java(2)
    protected void init() {
        super.init();
        a3UI = "x-res:///kappa.a3";
    }

最初のプログラムの「public class Character extends VesmaAgent {」 と最後の「}」の間に上のソースを入力します. 入力したらコンパイルしておいて下さい. プログラムを書換えたのでコンパイラの「refreshClassLoader」ボタンを 押してプログラムの更新内容を反映させます.以前作ったkappaは古い プログラムのオブジェクトなので,一旦削除してもう一度「createInstance」 ボタンでkappaを生成しなおします. カッパが表示されるはずです.

キャラクタを動かす

キャラクタを自律的に移動するように,以下の変数とメソッドを追加して下さい.

Charater.java(3)
    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   &

アバタを追い掛ける

アバタを追い掛けるように以下のメソッドを追加します.

Charater.java(4)
    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   &

おまけ

キャラクタがくちごたえするように.以下のメソッドを追加してみましょう.

Charater.java(5)
    public void hello(Request r) {
        send(makeReply(r,"Hello!"));
    }

以下のコマンドを入力すると返事をします.

##kappa   hello

各自適当なコマンドを追加してみて下さい.