このサンプルでは以下の処理を行っています。
- タイトルアニメーション中、タイトルスタート待ち、ゲーム開始アニメーション中かをステートで管理
- タイトルが開始されたらタイトルアニメーションを開始する
- タイトルアニメーションが終わるとデモンストレーションタイマーを開始させ、スタートボタン待ちとする
- タイトルスタート待ちでスタートが押されたら、デモンストレーションタイマーを停止させ、ゲーム開始アニメーションを開始する
- ゲーム開始アニメーションが終了したらタイトル処理を終了する
TITLEST_INIT = 0;
TITLEST_WAIT = 1;
TITLEST_START = 2;
g_dwTitleState = TITLEST_INIT;
function OnStartTitle()
g_dwTitleState = TITLEST_INIT;
hdxMatrixRotationX( 0,hdxToRadian(90) );
hdxLoadModel( 0,"title.x",0 );
hdxLoadAnime( 0,"title.hda",0 );
hdxCtrlAnime( 0,CTRLMODE_AUTO_END,0,0,-1 );
hdxLoadAnime( 1,"lighting.hda",0 );
hdxCtrlAnime( 1,CTRLMODE_AUTO_LOOP,0,0,-1 );
hdxLoadAnime( 2,"title_btn.hda",0 );
hdxCtrlAnime( 2,CTRLMODE_MANUAL,-1,0,-1 );
hdxLoadAnime( 3,"title_gc.hda",0 );
hdxCtrlAnime( 3,CTRLMODE_MANUAL,-1,0,-1 );
hdxLoadAnime( 4,"title_start.hda",10 );
hdxCtrlAnime( 4,CTRLMODE_MANUAL,-1,0,-1 );
end
function OnRunTitle( upd_frm )
if( g_dwTitleState==TITLEST_INIT ) then
if( hdxIsEndAnime(0)==TRUE ) then
trace( "メイン待機へ" );
hdxCtrlAnime( 2,CTRLMODE_AUTO_LOOP,0,0,-1 );
hdxCtrlAnime( 3,CTRLMODE_AUTO_END,0,0,15 );
hdxStartDemoTimer();
g_dwTitleState = TITLEST_WAIT;
end
elseif( g_dwTitleState==TITLEST_WAIT ) then
elseif( g_dwTitleState==TITLEST_START ) then
if( hdxIsEndAnime(4)==TRUE ) then
trace( "タイトル画面終了" );
hdxNextScene();
end
end
hdxSetZBuffer( TRUE );
hdxMatrixRotationY( 0, hdxToRadian( ((hdxGetTime()%(360*60))/60) ) );
hdxSetLookAt( 0,0,40, 0,0,0, 0,1,0 );
hdxSetViewport( 0,0,RENDER_WIDTH,RENDER_HEIGHT );
hdxDrawModel( 0,0 );
hdxSetZBuffer( FALSE );
hdxDrawAnime( 1, 0, 0, 1.0, 1.0 );
hdxDrawAnime( 0, 0, 0, 1.0, 1.0 );
hdxDrawAnime( 2, 640, 520, 1.0, 1.0 );
hdxDrawAnime( 3, 0, 0, 1.0, 1.0 );
hdxDrawAnime( 4, 0, 0, 1.0, 1.0 );
end
function OnEndTitle()
if( g_dwTitleState==TITLEST_WAIT ) then
hdxCtrlAnime( 3,CTRLMODE_AUTO_END,15,15,-1 );
hdxCtrlAnime( 4,CTRLMODE_AUTO_END,0,0,-1 );
hdxStopDemoTimer();
g_dwTitleState = TITLEST_START;
end
end