[ログ・ページ/y04/後期PS2班]
#
2006年中に行ったこと (編集者:045719B 小野裕作)
とりあえず、思い出した順にメモ
#
複数キャラクターの表示、操作
Character構造体をノードとした線形リストを作成し、
while文でループさせる。ループ内でコントローラからの
キー入力の受付とキャラクターの表示を行う
(N体のキャラクターの表示、操作に対応できる)
リストの作成(gundam_smash/schedule.c)
1
2
3
4
5
6
7
8
9
|
// 最初のキャラを初期化
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)
1
2
3
4
5
6
7
8
9
10
11
|
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_id という変数を持たせる
また、キャラクターごとに番号を割り振る
(gundam_smash/character.h)
1
2
3
4
|
#define GAPLANT 0
#define RICKDIAS 1
#define SLAUGHTER_DAGGER 2
#define ZAKU 3
|
関数内で character_id を参照し、値によって呼び出す関数を変える
Character構造体を生成する関数の場合(gundam_smash/character_action.c)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
|
/* 生成 */
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;
}
|