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
すみませんでした。過去ログを見とくべきでした。でぃあぶろ さん、ありがとうございました。
基礎からやり直してきます。
|
|