初めまして、大変申し訳ないのですが
アニメーションの移動の座標無効ができなく困っています。
助けていただけませんか?
DXライブラリ置き場でのサンプルコードでの無効をしてもできなく
モデルはMMDを使用しています
コードは以下の通りです
// 初期化
Player::Player()
{
// 画像格納
modelHandle = MV1LoadModel("character/seiver/seiv.pmd");
// 走りアニメーションをアタッチ
animAttachIndex = MV1AttachAnim(modelHandle, 0);
// 走りアニメーションの総時間を取得しておく
totalTime = MV1GetAttachAnimTotalTime(modelHandle, animAttachIndex);
// アニメーション再生時間を初期化
playTime = 0.0f;
MV1SetAttachAnimTime(modelHandle, animAttachIndex, playTime);
// アニメーションで移動をしているフレームの番号を検索する
moveAnimFrameIndex = MV1SearchFrame(modelHandle, "BasePoint");
// アニメーションで移動をしているフレームを無効にする
MV1SetFrameUserLocalMatrix(modelHandle, moveAnimFrameIndex, MGetIdent());
//modelHandle = MV1LoadModel("object/tintin.mqo");
//
rota = VGet(0, 0, 0);
// 初期位置
pos = VGet(0.0f, 0.0f, 0.0f);
}
// 削除
Player::~Player()
{
// モデル削除
MV1DeleteModel(modelHandle);
}
// 関数一つで呼べるように
void Player::All()
{
// 処理
Update();
Draw();
}
// 更新
void Player::Update()
{
// プレイヤー制御.
key = GetJoypadInputState(DX_INPUT_KEY_PAD1);
// 現在の位置
prevPosition = MV1GetAttachAnimFrameLocalPosition(modelHandle, animAttachIndex, moveAnimFrameIndex);
// 上を押していたら上に進む
if (key & PAD_INPUT_UP)
{
rota.y = 3.0f;
pos.z += 1.0f;
playTime += 1.0f;
}
// 下を押していたら下に進む
if (key & PAD_INPUT_DOWN)
{
rota.y = 0;
pos.z -= 1.0f;
playTime += 1.0f;
}
// 右を押していたら右に進む
if (key & PAD_INPUT_RIGHT)
{
rota.y = 4.5;
pos.x += 1.0f;
playTime += 1.0f;
}
// 左を押していたら左に進む
if (key & PAD_INPUT_LEFT)
{
rota.y = 1.5f;
pos.x -= 1.0f;
playTime += 1.0f;
}
if (key & PAD_INPUT_A)
{
pos.y += 2.0f;
}
// アニメーション再生時間
if (playTime >= totalTime)
{
// 超えている場合は、まず『アニメーション再生時間を進める前の「アニメーションで移動しているフレームの座標」』と、
// 『アニメーションの終端での「アニメーションで移動しているフレームの座標」』との差分をモデルの座標に加算する
MV1SetAttachAnimTime(modelHandle, animAttachIndex, totalTime);
nowPosition = MV1GetAttachAnimFrameLocalPosition(modelHandle, animAttachIndex, moveAnimFrameIndex);
pos = VAdd(pos, VSub(nowPosition, prevPosition));
// 新しいアニメーション再生時間は、アニメーション再生時間からアニメーション総時間を引いたもの
playTime -= totalTime;
// 次に『新しいアニメーション再生時間での「アニメーションで移動をしているフレームの座標」と
// 『アニメーション再生時間0での「アニメーションで移動しているフレームの座標」』との差分をモデルの座標に加算する
MV1SetAttachAnimTime(modelHandle, animAttachIndex, 0.0f);
prevPosition = MV1GetAttachAnimFrameLocalPosition(modelHandle, animAttachIndex, moveAnimFrameIndex);
MV1SetAttachAnimTime(modelHandle, animAttachIndex, playTime);
nowPosition = MV1GetAttachAnimFrameLocalPosition(modelHandle, animAttachIndex, moveAnimFrameIndex);
pos = VAdd(pos, VSub(nowPosition, prevPosition));
}
else
{
// 新しいアニメーション再生時間をセット
MV1SetAttachAnimTime(modelHandle, animAttachIndex, playTime);
// 『新しいアニメーション再生時間での「アニメーションで移動をしているフレームの座標」』と、
// 『アニメーション再生時間を進める前の「アニメーションで移動をしているフレームの座標」』との差分をモデルの座標に加算する
nowPosition = MV1GetAttachAnimFrameLocalPosition(modelHandle, animAttachIndex, moveAnimFrameIndex);
pos = VAdd(pos, VSub(nowPosition, prevPosition));
}
// 3Dモデルのポジション設定
MV1SetPosition(modelHandle, pos);
// 3Dモデルの角度設定
MV1SetRotationXYZ(modelHandle, rota);
}
// 描画
void Player::Draw()
{
MV1SetAttachAnimTime(modelHandle, animAttachIndex, playTime);
// モデルを描画
MV1DrawModel(modelHandle);
}
です。
どうかご教授お願い致します。