大学祭ということで、締切もあったので、ゲームオーバー時の判定は2日しか時間をかけることが出来なかったので、動作チェックが甘かったです。
難易度ですが、普通と難しいの2種類がありますが、本当は「簡単」と「普通」のつもりで作ってました。難易度難しいという意見があったので、表示難易度の方を1段階上げました。
現在背景の3D化を行っており、このような関数を作りました
・仕様(まだ、無駄部分がありますが^^;)
ポリゴンの頂点情報を格納するための配列を用意する。ポリゴンで表示する3Dはポリゴンの数を2枚とした、四角形を毎回使うこととする。なので、用意する配列はポリゴンが2枚なので、頂点の数は6つ、x、y、z軸それぞれに対して、情報を入れる(表示する画像数×6×頂点情報数)。頂点座標情報はCSVファイルで読み込むこととする。
//変数(Img_t構造体内)
//3D背景用頂点座標
float vertexx[POLYGON_NUM][6],vertexy[POLYGON_NUM][6],vertexz[POLYGON_NUM][6];
float vertexu[POLYGON_NUM][6],vertexv[POLYGON_NUM][6];
int vertexb[POLYGON_NUM][6],vertexg[POLYGON_NUM][6],vertexr[POLYGON_NUM][6],vertexa[POLYGON_NUM][6];
int vertexflag[POLYGON_NUM],vertexvariety[POLYGON_NUM];
※POLYGON_NUM:define、ポリゴンで表示する画像数
void BackGroundDisplay(Img_t *img,VERTEX_3D *Vertex){
int i,j;
int val;
for( i=0 ; i < POLYGON_NUM ; i++ ){
if(img->vertexflag == TRUE){
val=img->vertexvariety;
for(j=0;j<6;j++){
Vertex[j].pos.x = img->vertexx[j]; //構造体にポリゴンのxの値を代入
Vertex[j].pos.y = img->vertexy[j]; //構造体にポリゴンのyの値を代入
Vertex[j].pos.z = img->vertexz[j]; //構造体にポリゴンのzの値を代入
Vertex[j].u = img->vertexu[j]; //構造体に画像表示値uを代入
Vertex[j].v = img->vertexv[j]; //構造体に画像表示値vを代入
Vertex[j].r = img->vertexr[j]; //構造体にR値を代入
Vertex[j].g = img->vertexg[j]; //構造体にG値を代入
Vertex[j].b = img->vertexb[j]; //構造体にB値を代入
Vertex[j].a = img->vertexa[i][j]; //構造体にα値を代入
}
//読み込んだ情報を元に、3D画像を表示
DrawPolygon3D( Vertex, 2, img->gamebackground[va[/url], FALSE ) ;
}
}
}
この方法ならVERTEX_3D構造体の宣言、この関数内で行ってもいいですね^^;;;;
これで、上から見下ろしたような視点にしたい時は、関数内でそれぞれの頂点座標を格納する変数を別に宣言し、頂点座標を引数にし、表示したい角度だけ数値を変化させる関数を作れば、視点変更も出来ます。また、スクロールさせる時は、頂点情報のz座標を減算(手前にスクロールする場合)し、一定位置まで座標が来たら一番後ろのポリゴン座標の位置に戻してやればスクロールする背景が実現出来ると考えてます。(只今作成中)完成のイメージ的には東方花映塚が近いと思われます。
今回アップロードしたゲームはスローの時の処理が上手くいってないです。ボスを倒したときにスローにするのを、毎秒60フレーム処理を毎秒20フレーム処理に変える、という方法でおこなったので、動きがカクカクになってしまってます。これを滑らかにするには、スロー処理フラグを作り、オブジェクトの動作する関数全てにスロー時の処理(距離5動くのをスロー時5分の1にする、弾の時間変数の加算を数フレームに1回にする)にしないといけないと考えました。