ログ・ページ/y04/後期PS2班?

2006年中に行ったこと (編集者:045719B 小野裕作)

とりあえず、思い出した順にメモ

複数キャラクターの表示、操作

Character構造体をノードとした線形リストを作成し、 while文でループさせる。ループ内でコントローラからの キー入力の受付とキャラクターの表示を行う (N体のキャラクターの表示、操作に対応できる)

リストの作成(gundam_smash/schedule.c)

               // 最初のキャラを初期化
               character_top = character_init(1);
               character_current = character_top;

               // 他のキャラの初期化
               for(id=2; id<=player_num; id++) {
                       character_current->next = character_init(id);
                       character_current = character_current->next;
               }

リストを用いたループ(gundam_smash/schedule.c)

               character_current = character_top;
               while (character_current != NULL) {
                       int loop = 0;

                       get_enemy_obj(character_top, character_top->next);
                                
                              省略

                       draw_obj(character_current->model->body);
                       character_current = character_current->next;
               }

キャラクターごとの関数の違いを吸収

キャラクターごとに処理が異なる関数は、基本的に

(キャラクター名)_(処理内容)

という関数名にしてある(例:gaplant_create()、rickdias_walk_front())

これに対して、

character_(処理内容)

という名前の関数を作成し、引数に応じてキャラクターごとの関数を呼び出すようにした

まず、character構造体にキャラクターを示す character_id という変数を持たせる

また、キャラクターごとに番号を割り振る

(gundam_smash/character.h)

#define GAPLANT 0
#define RICKDIAS 1
#define SLAUGHTER_DAGGER 2
#define ZAKU 3

関数内で character_id を参照し、値によって呼び出す関数を変える

Character構造体を生成する関数の場合(gundam_smash/character_action.c)

/* 生成 */
PartPtr
create_character(float x, float y, float z, int character_id)
{
       PartPtr top;

       switch (character_id) {
       case GAPLANT:
               top = create_gaplant(x, y, z);
               break;
       case RICKDIAS:
               top = create_rickdias(x, y, z);
               break;
       case SLAUGHTER_DAGGER:
              top = create_slaughter_dagger(x, y, z);
              break;
       case ZAKU:
              top = create_zaku(x, y, z);
              break;
       default:
               break;
       }
       return top;
}

トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2012-03-10 (土) 18:37:42 (2827d)