http://dixq.net/g/3d_05.html
↑を参考に特定のキーを押した瞬間にキックのモーションを再生するプログラムを作ろうとしたのですが
押した瞬間にアタッチしたモーションの一部を描画するものになってしまいます。
自分では再生時間をどうにか変えなければ改善しないと考えているのですが「どうにか」がわからなくて・・・
どうすればいいでしょうか、教えてください。
#include "DxLib.h"
int Key[256]; // キーが押されているフレーム数を格納する
// キーの入力状態を更新する
int gpUpdateKey(){
char tmpKey[256]; // 現在のキーの入力状態を格納する
GetHitKeyStateAll( tmpKey ); // 全てのキーの入力状態を得る
for( int i=0; i<256; i++ ){
if( tmpKey[i] != 0 ){ // i番のキーコードに対応するキーが押されていたら
Key[i]++; // 加算
} else { // 押されていなければ
Key[i] = 0; // 0にする
}
}
return 0;
}
int WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int){
ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen( DX_SCREEN_BACK ); //ウィンドウモード変更と初期化と裏画面設定
int ModelHandle, AttachIndex ;
float TotalTime, PlayTime ;
// 3Dモデルの読み込み
ModelHandle = MV1LoadModel( "dat/Lat式ミク/Lat式ミクVer2.3_Normal.pmd" ) ;
//奥行0.1~1000までをカメラの描画範囲とする
SetCameraNearFar( 0.1f, 1000.0f ) ;
//(0,10,-20)の視点から(0,10,0)のターゲットを見る角度にカメラを設置
SetCameraPositionAndTarget_UpVecY( VGet( 0, 20, -20 ), VGet( 0.0f, 10.0f, 0.0f ) ) ;
// 3Dモデルの1番目のアニメーションをアタッチする
AttachIndex = MV1AttachAnim( ModelHandle, 0, -1, FALSE ) ;
// アタッチしたアニメーションの総再生時間を取得する
TotalTime = MV1GetAttachAnimTotalTime( ModelHandle, AttachIndex ) ;
// 再生時間の初期化
PlayTime = 0.0f ;
while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 && gpUpdateKey()==0 ){
if( Key[KEY_INPUT_SPACE] == 1 ){ // スペースキーが押された瞬間なら
// 再生時間を進める
PlayTime += 0.2f ;
// 再生時間をセットする
MV1SetAttachAnimTime( ModelHandle, AttachIndex, PlayTime ) ;
}
// 3Dモデルの描画
MV1DrawModel( ModelHandle ) ;
}
DxLib_End(); // DXライブラリ終了処理
return 0;
}