Windowsゲーム「初音ミク冒険記」、ミクが自動的に移動するときの移動速度
イベントシーンなどでミクが自動的に移動する時、
ミクの移動速度がなんかおかしいなぁと思っていたのだが、
ようやく原因が判明した。
これまで公開してた分では、
ボカロタウンの入口でデフォ子と別れた後に
ミクの移動速度が異様に早かった。
しかし、1秒間に移動するベクトルは、120ドットで
プレイヤーベクトルも同じく120。
これは予定通りの数値で問題ない。
だから原因がイマイチ分からなかったのだが
今日、別のイベントでミクが移動するシーンを作っていて
今度は、異様に移動が遅かったため
調べてみることに。
キャラの移動速度に関わるベクトルの値は正しいので
それ以外に移動速度に関係するところというと
addVectorInFrameTime関数だ。
//*******************************************************
// 座標に速度ベクトルを足す関数
// g_frametimeを考慮する
//*******************************************************
VECTOR addVectorInFrameTime(VECTOR pos, VECTOR speed){
VECTOR result;
// 等加速度運動の法則
// 距離=速度×時間
// 1秒分のベクトル(speed)×1ループの経過秒数(g_frametime)
result.x = pos.x + speed.x * g_frametime;
result.y = pos.y + speed.y * g_frametime;
result.z = 0;
return result;
}
1フレームの移動距離を計算している関数である。
ここでポイントとなるのは、g_frametimeだ。
g_frametimeは、
ゲームのメインループ1回(1フレーム)にかかる時間である。
試しに、g_frametimeの値を確認する。
すると、0.050000と表示された。
え?
それっておかしくないか?
通常、1秒間に60FPS(1秒間に60フレーム表示)の場合
g_frametimeの値は0.012~0.017の間である。
1秒÷60フレームが1フレームの表示秒数だから
0.017秒を超えると1秒間に60フレーム表示できない。
つまり0.017秒を超えると描画処理が遅くなるのだ。
0.05ってことは1フレームの表示時間が0.016秒台の時と比べて
移動速度が3倍近く遅くなるってことだ。
g_frametimeの値を設定している箇所は、以下の3箇所だ
- main.cppのメインループのScreenFlip直前
- myGame.cppのplayGame関数の操作禁止の場合の処理中
- ポーズボタンが押された時
3.のポーズは、今回は関係ない。
2.付近はこんなロジックだ。
// イベントでの移動のフラグがある時は、止めちゃダメ!
if(eventMoveFlg == FALSE){
// これが画面を止める鍵
g_frametime = 0;
}
今回の問題はイベントでのミクの移動なので
ここも関係ない。
最後の1は、こんなロジックだ。
//******************************************************
// 操作禁止でない場合、1ループにかかった時間を計測
//******************************************************
if(noOperationFlg == FALSE){
//1ループにかかった時間を計測
curtime = GetNowCount() & MAX_INT;
g_frametime = (float)(curtime - g_lasttime) / 1000.0f;
g_lasttime = curtime;
if (g_frametime > 0.03f) g_frametime = 0.03f;
}
イベントでミクが勝手に移動するのは、操作禁止中である。
つまりnoOperationFlg=TRUEの時だ。
えーと、1にも2にも該当しない時が問題となってるのね。
期待通りに動かすためには1のロジックを以下のようにする必要がある。
- 誤:if(noOperationFlg == FALSE){
- 正:if((noOperationFlg == FALSE) || (eventMoveFlg == TRUE)){
1のロジックのコメントも合わせて変更しないとダメだね。
そして実行してみたところ、作っていたシーンがうまくいった!
しかも適当にこのくらいかなと指定した
止まるべき座標とバルーンの表示タイミングもバッチリである!
デフォ子とのファースト・コンタクトも確認してみる。
・
・
・
おお! コッチもうまく動いた!
うん、ちょっとのことだけど、満足した感じ!![]()
ここまではOKだ
| 【固定リンク】 | 【コメント (0)】 | 【トラックバック (0)】
このエントリーへのリンク
トラックバック
この記事へのトラックバックの一覧です: Windowsゲーム「初音ミク冒険記」、ミクが自動的に移動するときの移動速度:


コメント
このブログの新着コメントをRSSリーダに登録する為のxml