pointbonecntにボーンの数を入れ、pointbonenumには今いる地点のボーン番号、tg_num に次の目的地ボーン番号を入れて、pointbonenumがボーン数と同じになったら1に戻す(ループさせる)としたかったのですが、なぜかループした瞬間(pointbonenumが1に戻った瞬間)キャラクタが消えてしまいました。(x座標を表示してみたところ、ありえない数になっていました)
コードはこちらです。
void c_enemy::Check(){
cnt++;
//------------
// 移動関係
//------------
move_v = VGet( 0.0f,0.0f,0.0f );
int tg_num = pointbonenum+1;
if(tg_num >= pointbonecnt) tg_num=1;
VECTOR tg_v = MV1GetFramePosition( PointBoneHandle, tg_num );
a=tg_num;
float a = tg_v.x - enemy_v.x;
float b = tg_v.z - enemy_v.z;
v = VNorm(VGet( a, 0.0f, b )); //姿勢ベクトル登録(現在地から目標地へのベクトル)
if(sqrt(a*a+b*b)<2.0f){ //キャラが目標地にたどりついたら
move_v = VScale( v, sqrt(a*a+b*b) );
//enemy_v = MV1GetFramePosition( PointBoneHandle, tg_num );
pointbonenum = tg_num;
}else{ ////キャラが目標地にたどりつかなかったら
move_v = VScale( v, 2.0f );
}
//向き設定
float TargetAngle ; // 目標角度
float SaAngle ; // 目標角度と現在の角度との差
// 目標の方向ベクトルから角度値を算出する
TargetAngle = (float)(atan2( v.x, v.z ) + PI);
// 目標の角度と現在の角度との差を割り出す
// 最初は単純に引き算
SaAngle = TargetAngle - yaw;
// ある方向からある方向の差が180度以上になることは無いので
// 差の値が180度以上になっていたら修正する
if( SaAngle < -PI ){
SaAngle += (float)PI*2;
}else if( SaAngle > PI ){
SaAngle -= (float)PI*2;
}
// 角度の差が0に近づける
if( SaAngle > 0.0f ){
// 差がプラスの場合は引く
SaAngle -= 0.5f;
if( SaAngle < 0.0f ){
SaAngle = 0.0f;
}
}else{
// 差がマイナスの場合は足す
SaAngle += 0.5f;
if( SaAngle > 0.0f ){
SaAngle = 0.0f;
}
}
yaw = TargetAngle - SaAngle; // モデルの角度を更新
/*
if(Key[KEY_INPUT_LEFT]==1){
pointbonenum--;
if(pointbonenum == 0) pointbonenum=pointbonecnt-1;
}
if(Key[KEY_INPUT_RIGHT]==1){
pointbonenum++;
if(pointbonenum == pointbonecnt) pointbonenum=1;
}
int tg_num = pointbonenum+1;
if(tg_num >= pointbonecnt) tg_num=1;
a=tg_num;
VECTOR tg_v = MV1GetFramePosition( PointBoneHandle, tg_num );
float a = tg_v.x - enemy_v.x;
float b = tg_v.z - enemy_v.z;
v = VNorm(VGet( a, 0.0f, b )); //姿勢ベクトル登録(現在地から目標地へのベクトル)
//move_v = VScale( v, sqrt(a*a+b*b) );
//move_v = VScale( v, 2.0f );
//enemy_v = VAdd( enemy_v, move_v );
enemy_v = MV1GetFramePosition( PointBoneHandle, tg_num );
*/
hit=Make_Sph(30.0f,enemy_v,1);//当たり判定作成
}
void c_enemy::Move(){
mat = MGetScale(VGet(0.2f,0.2f,0.2f));//スケール
//ロール
zAxis = VGet(mat.m[2][0], mat.m[2][1], mat.m[2][2]);
//Quaternion = Quaternion * CreateRotationQuaternion(roll, zAxis);
//ピッチ
xAxis = VGet(mat.m[0][0], mat.m[0][1], mat.m[0][2]);
Quaternion = Quaternion * CreateRotationQuaternion(pitch, xAxis);
//ヨー
yAxis = VGet(mat.m[1][0], mat.m[1][1], mat.m[1][2]);
//Quaternion = Quaternion * CreateRotationQuaternion(yaw, yAxis);
matRot = QuaternionToMatrix(Quaternion);
MATRIX m;
m = MGetRotY( yaw ) ;
matRot = MMult( matRot , m );
mat = MMult( mat, matRot );//回転×スケール
//v = VTransform( norm_v , matRot );//姿勢ベクトル回転
//v = VNorm( v );//姿勢ベクトル正規化
enemy_v = VAdd( enemy_v, move_v );
matTrans = MGetTranslate( enemy_v );
mat = MMult( mat, matTrans );//移動×回転×スケール
MV1SetMatrix( EnemyHandle, mat );//行列セット
}ちなみにコード55行目以降のように、座標を直接指定するとキャラが消えることはありませんでした。
どなたか原因が分かる方はいますでしょうか?