画面を徐々に暗くする(DxLib)

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
cupa
記事: 117
登録日時: 2年前

画面を徐々に暗くする(DxLib)

#1

投稿記事 by cupa » 2年前

https://dixq.net/g/38.html
こちらのサイトを見たりしたのですが・・・意味がよくわかりませんでした。
そのため、自分で考えてやろうとしたのですが、すぐに黒くなってしまいました。
コードは下記です。
sceneは名の通り場面。countはFPSカウンター?です。
ここでは試しに5フレームたったら1暗くする、というのをやっていました。
(丁度いい感覚があれば教えて下さい)

コード:

if (scene == INTRODUCTION) {
            DrawBox(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, Write, true);   
            if (CheckHitKey(KEY_INPUT_Z) == 1) {
                count--;
                count /= 5;
                SetDrawBright(count, count, count);
                if (count == 0) {
                    scene = TITLE;
                }
            }
        }

cupa
記事: 117
登録日時: 2年前

Re: 画面を徐々に暗くする(DxLib)

#2

投稿記事 by cupa » 2年前

補足:書いたのは一部です
   countは255で初期化してあります
   count / 5 のところが怪しいのでご指摘お願いします

cupa
記事: 117
登録日時: 2年前

Re: 画面を徐々に暗くする(DxLib)

#3

投稿記事 by cupa » 2年前

試行錯誤していたらZキーを押したら暗くはなりました!
ですが、シーンがTITLEに移りません。何が原因と考えられますか?

コード:

if (scene == INTRODUCTION) {
            if (CheckHitKey(KEY_INPUT_Z) == 1) zFlag = true;   
            if (zFlag) {
                if (count <= 0) count = 0;
                count--;
                if (count % 1 == 0) SetDrawBright(count, count, count);
            }

            DrawBox(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, Write, true);   
            if (count == 0) scene;
        }
またこのコードにも良くない書き方、もっと良い書き方があれば教えていただけると幸いです

cupa
記事: 117
登録日時: 2年前

Re: 画面を徐々に暗くする(DxLib)

#4

投稿記事 by cupa » 2年前

if (count % 1 == 0)はいらなかったですね。

参照魚
記事: 109
登録日時: 6年前

Re: 画面を徐々に暗くする(DxLib)

#5

投稿記事 by 参照魚 » 2年前

最初のソースではcount /= 5 がすぐ暗くなる原因です。

コード:

if (scene == INTRODUCTION) {
            DrawBox(0, 0, SCREEN_WIDTH, SCREEN_HEIGHT, Write, true);   
            if (CheckHitKey(KEY_INPUT_Z) == 1) {
                count--;
 #if 0           
                count /= 5; // 毎ループで5で割るので、countはものすごい速さで0に収束する
                SetDrawBright(count, count, count);
 #else
                int bright = count / 5; // count から別途明るさを計算する
                SetDrawBright(bright, bright, bright);
 #endif
                if (count == 0) {
                    scene = TITLE;
                }
            }
        }
シーンがTITLEに移らないのは単純な記述ミスですね。

コード:

#if 0
           if (count == 0) scene; // 文法上エラーではないが、とくに何もしないコード
#else
           if (count == 0) scene = TITLE;
#endif
コンパイラの警告オプションのレベルを上げれば、上記のようなコードを検出してくれますので、そうするのをおススメします。

返信

“C言語何でも質問掲示板” へ戻る