トップページ > 記事閲覧
動画と当たり安定がぶつかる
名前:リス 日時: 2019/12/31 22:38

プログラム初心者の学生です。 dxライブラリで音ゲーをいろいろなサイトを見ながら作っているのですが、動画とノーツの当たり判定がぶつかっているようでうまくなったので質問させていただきました。 #include"DxLib.h" #define WIN_W 800 //横幅 #define WIN_H 600 //縦幅 #define LANE_SIZE 1 //レーン #define BAR_SIZE 40// int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) { int MovieGraphHandle; char buf[256]; int key[LANE_SIZE] = { KEY_INPUT_Z, }; bool bar_f[LANE_SIZE][BAR_SIZE]; float bar_y[LANE_SIZE][BAR_SIZE]; int bar_c[BAR_SIZE]; for (int j = 0; j < BAR_SIZE; j++) { for (int i = 0; i < LANE_SIZE; i++) { bar_f[i][j] = false; } } LONGLONG start_time; LONGLONG now_time; int curentTime; int counter = 0; const int bpm = 120; const float speed = 3.0f; const int offset = 0; if (DxLib_Init() == -1) // DXライブラリ初期化処理 { return -1;// エラーが起きたら直ちに終了 } MovieGraphHandle = LoadGraph("桜島.avi"); // ムービーを再生状態にします PlayMovieToGraph(MovieGraphHandle); // 描画先の画面を裏画面に SetDrawScreen(DX_SCREEN_BACK); //ChangeWindowMode(TRUE); // SetGraphMode(WIN_W, WIN_H, 32); // 動画とぶつかっている //SetWindowSizeChangeEnableFlag(FALSE); if (DxLib_Init() == -1) { return -1; } // SetDrawScreen(DX_SCREEN_BACK); int bgmHandle = LoadSoundMem("e1usi-0ujep.wav"); SetMainWindowText("OtogeNoYounaNanika"); while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) { if (buf[KEY_INPUT_ESCAPE] == 1) { break; } // ムービー映像を画面いっぱいに描画します DrawExtendGraph(0, 0, 640, 360, MovieGraphHandle, FALSE); // 画面左上に再生時間を描画します DrawFormatString(0, 0, GetColor(255, 255, 255), "Time:%d", TellMovieToGraph(MovieGraphHandle)); //------------------------------ if (ProcessMessage() == -1) break; //------------------------------- // 裏画面の内容を表画面に反映します ScreenFlip(); if (counter == 0) { PlaySoundMem(bgmHandle, DX_PLAYTYPE_BACK); start_time = GetNowHiPerformanceCount(); } now_time = GetNowHiPerformanceCount(); curentTime = (int)((now_time - start_time) / 1000) - offset; while(curentTime >=( 60000 / bpm * counter) - 3000){ for (int i = 0; i < LANE_SIZE; i++) { bar_f[i][counter % BAR_SIZE] = true; bar_c[counter % BAR_SIZE] = 60000 / bpm * counter; } counter++; } for (int i = 0; i < LANE_SIZE; i++) { for (int j = 0; j < BAR_SIZE; j++) { if (bar_f[i][j]) { bar_y[i][j] = (curentTime - bar_c[j]) / 5 * speed + WIN_H / 5 * 4; if (bar_y[i][j] > WIN_H + 10) { bar_f[i][j] = false; } } } } GetHitKeyStateAll(buf); for (int i = 0; i < LANE_SIZE; i++) { for (int j = 0; j < BAR_SIZE; j++) { if (bar_f[i][j]) { if (WIN_H / 5 * 4 - 30 < bar_y[i][j] && bar_y[i][j] < WIN_H / 5 * 4 + 30) { if (buf[key[i]] == 1) { bar_f[i][j] = false; } } } } } DrawLine(0, WIN_H / 5 * 4, WIN_W, WIN_H / 5 * 4, GetColor(225, 225, 225)); for (int i = 0; i < LANE_SIZE; i++) { for (int j = 0; j < BAR_SIZE; j++) { if (bar_f[i][j]) { DrawBoxAA(100.f + i * 150.f, bar_y[i][j] - 10.f, 100.0f + 72.0f + i * 150.0f, bar_y[i][j] + 10.0f, GetColor(0, 255, 0), TRUE); } } } } DxLib_End(); return 0; } このまま動かすとノーツと動画は動いてくれるのですが、ノーツの判定を取ることが出来ない。 動画とぶつかっているのコメント化を外すと動画は流れないがノーツとその判定は取ることは出来ました。
メンテ

Page: 1 |

Re: 動画と当たり安定がぶつかる ( No.1 )
名前:管理人 日時:2020/01/01 06:22

// SetGraphMode(WIN_W, WIN_H, 32); // 動画とぶつかっている こちらのコメント化を外すと動画が流れないとのことですが、それは仕様となります ( SetGraphMode を呼び出すと LoadGraph などで作成したグラフィックハンドルが全て削除されるため ) SetGraphMode の呼び出しを MovieGraphHandle = LoadGraph("桜島.avi"); より前の行の位置に移動してみてください
メンテ
Re: 動画と当たり安定がぶつかる ( No.2 )
名前:リス 日時:2020/01/01 18:00

前の行に移動したら思ったとおりの動きをしてくれました。 ありがとうございます。
メンテ

Page: 1 |

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

   クッキー保存