トップページ > 記事閲覧
何で動かないのかわからない
名前:クリスマスももうじきだね... 日時: 2020/12/21 19:30

手伝ってください。もう、自分では分かりません。
メンテ

Page: 1 |

Re: 何で動かないのかわからない ( No.1 )
名前:クリスマスももうじきだね... 日時:2020/12/21 19:36

普段から、このサイトを使わせていただいております。ありがとうございます。 早速、本題に入らせていただきます。 この下のソースなのですが、ansで現在時刻-プログラムを起こした時の時間を計算し、それを元に時間差で各プログラムのif文で動かそうと思っているのですが、 なぜかansで決めた時間が来ても動きません。なぜでしょう。ご教授お願いいたします。 #include "DxLib.h" int Key[256]; int gpUpdateKey() { char tmpkey[256]; GetHitKeyStateAll(tmpkey); for(int i=0;i<256;i++){ if (tmpkey[i] != 0) { Key[i]++; } else { Key[i] = 0; } } return 0; } int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { ChangeWindowMode(FALSE); DxLib_Init(); SetDrawScreen(DX_SCREEN_BACK); SetWindowSizeChangeEnableFlag(FALSE); //ウインドウサイズの変更不可 int pic; int bgm; int firstimg; int count = 0; int x = 120; int y = 240; int secondimg; int starttime=0; int movie1; int movie2; int ans; bgm = LoadSoundMem("サウンド/p01.mp3"); firstimg = LoadSoundMem("サウンド/Windows Foreground.wav"); starttime = GetNowCount(); //現在経過時間を計測 pic = LoadGraph("画像/通知.png"); secondimg = LoadGraph("画像/"); movie1 = LoadGraph("画像/ホワイトノイズ.mp3"); movie2 = LoadGraph("画像/お化け.mp3"); ans = GetNowCount() - starttime; while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdateKey() == 0) { if (Key[KEY_INPUT_A] && Key[KEY_INPUT_B]) { DxLib_End(); return 0; } if (Key[KEY_INPUT_ESCAPE]) { //ESCキーで逃げようとするのを防ぐ DrawFormatString(10, 0, GetColor(0, 255, 0), "IF YOU ENTER THE ESCAPE KEY. IT DOESN'T MEAN ANYTHING HAHA."); DrawFormatString(10, 15, GetColor(0, 255, 0), "按逃生鍵也无済于事。"); DrawFormatString(10, 30, GetColor(0, 255, 0), "Das Drucken der Escape-Taste hilft nicht."); } if (count==1) { PlaySoundMem(firstimg, DX_PLAYTYPE_BACK); } count++; DrawFormatString(10, 40, GetColor(0, 255, 0), "%d-%d=%d",GetNowCount(), starttime,GetNowCount()-starttime); //テスト用 if (ans==4000) { for (int i = 0; i < 9; i++) { DrawGraph(x, y, pic, FALSE); x = x + 5; y = y + 5; PlaySoundMem(bgm, DX_PLAYTYPE_BACK); } } if (ans == 8000) { PlayMovieToGraph(movie1); while (GetMovieStateToGraph(movie1) == 1) { DrawExtendGraph(0, 0, 640, 480, movie1, FALSE); WaitTimer(17); } } if (ans == 12000) { PlayMovieToGraph(movie2); while (GetMovieStateToGraph(movie2) == 1) { DrawExtendGraph(0, 0, 640, 480, movie2, FALSE); WaitTimer(17); } DrawRotaGraph(320, 280, 1.0, 0.0, pic, TRUE); } } DxLib_End(); return 0; }
メンテ
Re: 何で動かないのかわからない ( No.2 )
名前:あいおい? 日時:2020/12/21 19:50

if (ans==4000) { というのは ans、つまり経過時間がぴったり4000、つまり4.000秒丁度じゃないとif文の中身が実行されないです。 その時間ジャストになると言うことはめずらしいので、ある程度同じ時間とみなす工夫が必要になります。 条件分岐について > < といった演算子を使う必要があります。
メンテ
Re: 何で動かないのかわからない ( No.3 )
名前:クリスマスももうじきだね... 日時:2020/12/22 09:35

了解です!あいおい?さん、ありがとうございました。
メンテ
Re: 何で動かないのかわからない ( No.4 )
名前:クリスマスももうじきだね... 日時:2020/12/24 10:24

たびたび、すみません。ご指摘の通り、条件分岐の演算子を使って書いてみたのですが全く動きません。 どなたかご教授お願いします。 #include "DxLib.h" int Key[256]; int gpUpdateKey() { char tmpkey[256]; GetHitKeyStateAll(tmpkey); for(int i=0;i<256;i++){ if (tmpkey[i] != 0) { Key[i]++; } else { Key[i] = 0; } } return 0; } int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) { ChangeWindowMode(FALSE); DxLib_Init(); SetDrawScreen(DX_SCREEN_BACK); SetWindowSizeChangeEnableFlag(FALSE); //ウインドウサイズの変更不可 int pic; int bgm; int firstimg; int count = 0; int x = 120; int y = 240; int secondimg; int starttime=0; int movie1; int movie2; int ans; bgm = LoadSoundMem("サウンド/p01.mp3"); firstimg = LoadSoundMem("サウンド/Windows Foreground.wav"); starttime = GetNowCount(); //現在経過時間を計測 pic = LoadGraph("画像/通知.png"); secondimg = LoadGraph("画像/"); movie1 = LoadGraph("画像/ホワイトノイズ.mp3"); movie2 = LoadGraph("画像/怖い動画.mp3"); ans = GetNowCount() - starttime; while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 && gpUpdateKey() == 0) { if (Key[KEY_INPUT_A] && Key[KEY_INPUT_B]) { DxLib_End(); return 0; } if (Key[KEY_INPUT_ESCAPE]) { //ESCキーで逃げようとするのを防ぐ DrawFormatString(10, 0, GetColor(0, 255, 0), "IF YOU ENTER THE ESCAPE KEY. IT DOESN'T MEAN ANYTHING HAHA."); DrawFormatString(10, 15, GetColor(0, 255, 0), "按逃生鍵也无済于事。"); DrawFormatString(10, 30, GetColor(0, 255, 0), "Das Drucken der Escape-Taste hilft nicht."); } if (1000<=ans &&ans<=3800) { PlaySoundMem(firstimg, DX_PLAYTYPE_BACK); DrawRotaGraph(320, 280, 1.0, 0.0, pic, TRUE); } count++; DrawFormatString(10, 40, GetColor(0, 255, 0), "%d-%d=%d",GetNowCount(), starttime,GetNowCount()-starttime); //テスト用 if (4000<=ans && ans<=7000) { for (int i = 0; i < 9; i++) { DrawGraph(x, y, pic, FALSE); x = x + 5; y = y + 5; PlaySoundMem(bgm, DX_PLAYTYPE_BACK); } } if (7100<=ans && ans<=20000) { PlayMovieToGraph(movie1); while (GetMovieStateToGraph(movie1) == 1) { DrawExtendGraph(0, 0, 640, 480, movie1, FALSE); WaitTimer(17); } } if (21000<=ans && ans<=25000) { PlayMovieToGraph(movie2); while (GetMovieStateToGraph(movie2) == 1) { DrawExtendGraph(0, 0, 640, 480, movie2, FALSE); WaitTimer(17); } } } DxLib_End(); return 0; }
メンテ
Re: 何で動かないのかわからない ( No.5 )
名前:P 日時:2020/12/23 20:20

私の見落としがなければなのですが、 タイマーとしてカウントしている変数『ans』が0のままになっていると思われます。 あとこれは別の指摘なのですが、 LoadGraphで読み込んでいるものは画像または映像でしょうか? 見るところ、mp3とい音楽データを読み込んでいるように見えます。
メンテ
Re: 何で動かないのかわからない ( No.6 )
名前:クリスマスももうじきだね... 日時:2020/12/24 10:29

返信遅れてしまいすみません。 movie1,2の変数に入れているのは、動画です。 LoadGraphでメモリに動画を読み込んでPlayMovieToGraphで再生させようとしています。 ansは、もう少し検討しようと思います。
メンテ
Re: 何で動かないのかわからない ( No.7 )
名前:クリスマスももうじきだね... 日時:2020/12/24 11:04

ansなのですが、動いていないことが判明しました。ありがとうございます。 しかし、コード内の DrawFormatString(10, 40, GetColor(0, 255, 0), "%d-%d=%d",GetNowCount(), starttime,GetNowCount()-starttime); //テスト用 は、正常に動いています。 ansもGetNowCount()-starttimeを代入しているのに、なぜ同じ振る舞いをしないのでしょうか。
メンテ
Re: 何で動かないのかわからない ( No.8 )
名前:でぃあぶろ 日時:2020/12/24 11:36

>movie1,2の変数に入れているのは、動画です。 通常mp3は音声ファイルなのでPさんは「画像/映像なの?」とおっしゃっているのだと思います. >ansもGetNowCount()-starttimeを代入しているのに、なぜ同じ振る舞いをしないのでしょうか。 ansの値がwhileループ内で更新されていないからです. まずは基本的なプログラミングの部分を勉強しましょう.あとデバッグのやり方も. // どっかで言ったことあるようなコメントだなあ.
メンテ
Re: 何で動かないのかわからない ( No.9 )
名前:クリスマスももうじきだね... 日時:2020/12/24 14:36

すみませんでした。過去ログを見とくべきでした。でぃあぶろ さん、ありがとうございました。 基礎からやり直してきます。
メンテ

Page: 1 |

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

   クッキー保存