トップページ > 記事閲覧
垂直同期オフの場合毎フレーム更新しないと物理演算の結果反映がリセットされる?
名前:名無三 日時: 2022/03/19 12:51

軽量化のために物理演算をモデルごとにずらそうとしているのですが、垂直同期を切って自前で待機している場合物理演算の反映がされないようです。 こちらの改善方法はございますでしょうか… #include "DxLib.h" int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int ModelHandle; int PosX, PosZ, PosY; SetWaitVSyncFlag(FALSE); // DXライブラリの初期化 if (DxLib_Init() < 0) { // エラーが発生したら直ちに終了 return -1; } // 次に読み込むモデルの物理演算モードをリアルタイム物理演算にする MV1SetLoadModelUsePhysicsMode(DX_LOADMODEL_PHYSICS_REALTIME); // 3Dモデルの読み込み ModelHandle = MV1LoadModel("teio/model.pmx"); int anim = MV1AttachAnim(ModelHandle, 0); // 描画先を裏画面に変更 SetDrawScreen(DX_SCREEN_BACK); // カメラに映る範囲( カメラからの距離の範囲 )を設定 SetCameraNearFar(10.0f, 1000.0f); // カメラの位置と向きを設定 SetCameraPositionAndTarget_UpVecY(VGet(0.0f, 19.0f, -22.5f), VGet(0.0f, 10.0f, 0.0f)); // 座標をリセット PosX = 0; PosY = 0; PosZ = 0; int cnt = 0; float time = 0; // ウインドウが閉じられるまでループ while (ProcessMessage() == 0) { auto waits = GetNowHiPerformanceCount(); // 画面をクリア ClearDrawScreen(); // キーボードの上下左右でモデルの座標を変更 // ( シフトキーを押しながら上下キーでモデルを上下に移動 ) if (CheckHitKey(KEY_INPUT_LSHIFT)) { if (CheckHitKey(KEY_INPUT_DOWN)) PosY--; if (CheckHitKey(KEY_INPUT_UP)) PosY++; } else { if (CheckHitKey(KEY_INPUT_LEFT)) PosX--; if (CheckHitKey(KEY_INPUT_RIGHT)) PosX++; if (CheckHitKey(KEY_INPUT_DOWN)) PosZ--; if (CheckHitKey(KEY_INPUT_UP)) PosZ++; } // モデルの座標をセット MV1SetPosition(ModelHandle, VGet(PosX * 0.5f, PosY * 0.5f, PosZ * 0.5f)); time += 30.f / GetFPS()*0.2f; if (time >= MV1GetAttachAnimTotalTime(ModelHandle, anim)) { time = 0.f; } MV1SetAttachAnimTime(ModelHandle, anim, time); MV1SetAttachAnimBlendRate(ModelHandle, anim, 1.f); // 物理演算を60分の1秒経過したという想定で実行 if (time == 0.f) { MV1PhysicsResetState(ModelHandle); } else { if (cnt == 0) { MV1PhysicsCalculation(ModelHandle, 1000.0f / 60.0f*2.f); } } ++cnt %= 2; // 3Dモデルの描画 MV1DrawModel(ModelHandle); // 裏画面の内容を表画面に反映 ScreenFlip(); while ((GetNowHiPerformanceCount() - waits) <= (1000 * 1000 / 60)) {} } // モデルハンドルの削除 MV1DeleteModel(ModelHandle); // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0; }
メンテ

Page: 1 |

Re: 垂直同期オフの場合毎フレーム更新しないと物理演算の結果反映がリセットされる? ( No.1 )
名前:名無三(解決) 日時:2022/03/20 22:25

すいません、よく考えたら座標移動処理によってリセットされるのでしたね…垂直同期時には発生しないのが謎でしたがリビルドすると同じ動作となりました。こちらはいったん解決します
メンテ

Page: 1 |

題名
名前
コメント
パスワード (記事メンテ時に使用)

   クッキー保存