画像の更新が入らない

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

画像の更新が入らない

#1

投稿記事 by burotenn » 1年前

Dxlibを学び始めて一か月ほどです。
館のソースコードを用いてキー入力で切り替えができるメニュー画面を独自に作ってみようとしたのですが、最初に張り付けられた画像から変化せず、詰まってしまっています。

コード:

#include "DxLib.h"

int Key[256]; // キーが押されているフレーム数を格納する

// キーの入力状態を更新する
int gpUpdateKey() {
    char tmpKey[256]; // 現在のキーの入力状態を格納する
    GetHitKeyStateAll(tmpKey); // 全てのキーの入力状態を得る
    for (int i = 0; i < 256; i++) {
        if (tmpKey[i] != 0) { // i番のキーコードに対応するキーが押されていたら
            Key[i]++;     // 加算
        }
        else {              // 押されていなければ
            Key[i] = 0;   // 0にする
        }
    }
    return 0;
}


int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
    ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); //ウィンドウモード変更と初期化と裏画面設定


    int Handle00, Handle01, Handle02, Handle_d00, Handle_s00, Handle_s01, Handle_s02, Handle_s03, Handle_s04, Handle_s05;  // 読み込み(s=song)
    Handle00 = LoadGraph("画像/menu1.png"); // 上メニュー
    Handle01 = LoadGraph("画像/menu2.png"); // 下メニュー
    Handle02 = LoadGraph("画像/settings.png"); // 設定ボタン

    Handle_d00 = LoadGraph("画像/song-d/difficult.png"); // 難易度表

    Handle_s00 = LoadGraph("画像/song/1.png"); //ここからジャケット
    Handle_s01 = LoadGraph("画像/song/2.png");
    Handle_s02 = LoadGraph("画像/song/3.png");
    Handle_s03 = LoadGraph("画像/song/4.png");
    Handle_s04 = LoadGraph("画像/song/5.png");
    Handle_s05 = LoadGraph("画像/song/6.png");

    int x = 300;

    // while(裏画面を表画面に反映, メッセージ処理, 画面クリア)
    while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {

        DrawRotaGraph(0, 0, 2.85, 0.0, Handle00, TRUE); //画像の描画
        DrawGraph(0, 140, Handle01, TRUE); //画像の描画
        DrawGraph(555, 435, Handle02, TRUE);//画像の描画

        if (Key[KEY_INPUT_RIGHT] >= 1) { // 右キーが押されていたら
            x++;                       // 右へ移動
        }
        if (Key[KEY_INPUT_LEFT] >= 1) { // 左キーが押されていたら
            x--;                       // 左へ移動
        }
        if (x == 0 || x == 600) {
            x = 300;
        }

        if (x == 300) {
            DrawRotaGraph(520, 80, 0.3, 0.0, Handle_d00, TRUE); //難易度
            DrawRotaGraph(320, 310, 0.60, 0.0, Handle_s00, TRUE); //中
            DrawRotaGraph(0, 310, 0.45, 0.0, Handle_s05, TRUE); //右 加算
            DrawRotaGraph(640, 310, 0.45, 0.0, Handle_s01, TRUE); //左 減算
        }
        else if (x == 350 || x == 50) {
            DrawRotaGraph(520, 80, 0.3, 0.0, Handle_d00, TRUE); //難易度
            DrawRotaGraph(320, 310, 0.60, 0.0, Handle_s01, TRUE); //中
            DrawRotaGraph(0, 310, 0.45, 0.0, Handle_s00, TRUE); //右 加算
            DrawRotaGraph(640, 310, 0.45, 0.0, Handle_s02, TRUE); //左 減算
        }
        else if (x == 400 || x == 100) {
            DrawRotaGraph(520, 80, 0.3, 0.0, Handle_d00, TRUE); //難易度
            DrawRotaGraph(320, 310, 0.60, 0.0, Handle_s02, TRUE); //中
            DrawRotaGraph(0, 310, 0.45, 0.0, Handle_s01, TRUE); //右 加算
            DrawRotaGraph(640, 310, 0.45, 0.0, Handle_s03, TRUE); //左 減算
        }
        else if (x == 450 || x == 150) {
            DrawRotaGraph(520, 80, 0.3, 0.0, Handle_d00, TRUE); //難易度
            DrawRotaGraph(320, 310, 0.60, 0.0, Handle_s03, TRUE); //中
            DrawRotaGraph(0, 310, 0.45, 0.0, Handle_s02, TRUE); //右 加算
            DrawRotaGraph(640, 310, 0.45, 0.0, Handle_s04, TRUE); //左 減算
        }
        else if (x == 500 || x == 200) {
            DrawRotaGraph(520, 80, 0.3, 0.0, Handle_d00, TRUE); //難易度
            DrawRotaGraph(320, 310, 0.60, 0.0, Handle_s04, TRUE); //中
            DrawRotaGraph(0, 310, 0.45, 0.0, Handle_s03, TRUE); //右 加算
            DrawRotaGraph(640, 310, 0.45, 0.0, Handle_s05, TRUE); //左 減算
        }
        else if (x == 550 || x == 250) {
            DrawRotaGraph(520, 80, 0.3, 0.0, Handle_d00, TRUE); //難易度
            DrawRotaGraph(320, 310, 0.60, 0.0, Handle_s05, TRUE); //中
            DrawRotaGraph(0, 310, 0.45, 0.0, Handle_s04, TRUE); //右 加算
            DrawRotaGraph(640, 310, 0.45, 0.0, Handle_s00, TRUE); //左 減算
        }
    }

    DxLib_End(); // DXライブラリ終了処理
    return 0;
}
自分でもどこがおかしいのか探してみたところ、39行目の定義の画像から動かないため、if文はしっかり動いていることが分かったのですが、キー入力の読み込みがされていないのか繰り返し処理がされていないのかわかりませんでした。
(39行目の値を変えると画像が変わったため)

画像を更新するためにはどのようにすればよろしいのでしょうか。

アバター
あたっしゅ
記事: 664
登録日時: 13年前
住所: 東京23区
連絡を取る:

Re: 画像の更新が入らない

#2

投稿記事 by あたっしゅ » 1年前

[香車]東上☆海美☆「
.png がないので、

コード:

//
// https://dixq.net/forum/viewtopic.php?f=3&t=21516&sid=625860ae6cf66b0bebeecf612ba58d5f
// 画像の更新が入らない - ミクプラ(ja)
//
// for Visual Studio 2022
//
#include "DxLib.h"

int Key[256]; // キーが押されているフレーム数を格納する

// キーの入力状態を更新する
int gpUpdateKey() {
    char tmpKey[256]; // 現在のキーの入力状態を格納する

    GetHitKeyStateAll(tmpKey); // 全てのキーの入力状態を得る

    for (int i = 0; i < 256; i++) {
        if (tmpKey[i] != 0) { // i番のキーコードに対応するキーが押されていたら
            Key[i]++;     // 加算
        }
        else {              // 押されていなければ
            Key[i] = 0;   // 0にする
        }
    }

    return 0;
}


int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {
    ChangeWindowMode(TRUE), DxLib_Init(), SetDrawScreen(DX_SCREEN_BACK); //ウィンドウモード変更と初期化と裏画面設定

    //int Handle00, Handle01, Handle02, Handle_d00, Handle_s00, Handle_s01, Handle_s02, Handle_s03, Handle_s04, Handle_s05;  // 読み込み(s=song)
    //Handle00 = LoadGraph("画像/menu1.png"); // 上メニュー
    //Handle01 = LoadGraph("画像/menu2.png"); // 下メニュー
    //Handle02 = LoadGraph("画像/settings.png"); // 設定ボタン

    //Handle_d00 = LoadGraph("画像/song-d/difficult.png"); // 難易度表

    //Handle_s00 = LoadGraph("画像/song/1.png"); //ここからジャケット
    //Handle_s01 = LoadGraph("画像/song/2.png");
    //Handle_s02 = LoadGraph("画像/song/3.png");
    //Handle_s03 = LoadGraph("画像/song/4.png");
    //Handle_s04 = LoadGraph("画像/song/5.png");
    //Handle_s05 = LoadGraph("画像/song/6.png");

    int x = 300;

    // while(裏画面を表画面に反映, メッセージ処理, 画面クリア)
    while (ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0) {
        gpUpdateKey(); // 東上☆海美☆が追加

        //DrawRotaGraph(0, 0, 2.85, 0.0, Handle00, TRUE); //画像の描画
        //DrawGraph(0, 140, Handle01, TRUE); //画像の描画
        //DrawGraph(555, 435, Handle02, TRUE);//画像の描画

        if (Key[KEY_INPUT_RIGHT] >= 1) { // 右キーが押されていたら
            x++;                       // 右へ移動
        }
        if (Key[KEY_INPUT_LEFT] >= 1) { // 左キーが押されていたら
            x--;                       // 左へ移動
        }
        if (x == 0 || x == 600) {
            x = 300;
        }

        DrawFormatString( x, 0, GetColor(255,255,255), "%d", x ); // 東上☆海美☆が追加


        if (x == 300) {
            //DrawRotaGraph(520, 80, 0.3, 0.0, Handle_d00, TRUE); //難易度
            //DrawRotaGraph(320, 310, 0.60, 0.0, Handle_s00, TRUE); //中
            //DrawRotaGraph(0, 310, 0.45, 0.0, Handle_s05, TRUE); //右 加算
            //DrawRotaGraph(640, 310, 0.45, 0.0, Handle_s01, TRUE); //左 減算
            DrawFormatString(520, 80, GetColor(255, 255, 255), "Handle_d00"); // 東上☆海美☆が追加
            DrawFormatString(320, 310, GetColor(255, 255, 255), "Handle_s00"); // 東上☆海美☆が追加
            DrawFormatString(0, 80, GetColor(255, 255, 255), "Handle_s05"); // 東上☆海美☆が追加
            DrawFormatString(640, 310, GetColor(255, 255, 255), "Handle_s01"); // 東上☆海美☆が追加
        }
        else if (x == 350 || x == 50) {
            //DrawRotaGraph(520, 80, 0.3, 0.0, Handle_d00, TRUE); //難易度
            //DrawRotaGraph(320, 310, 0.60, 0.0, Handle_s01, TRUE); //中
            //DrawRotaGraph(0, 310, 0.45, 0.0, Handle_s00, TRUE); //右 加算
            //DrawRotaGraph(640, 310, 0.45, 0.0, Handle_s02, TRUE); //左 減算
            DrawFormatString(520, 80, GetColor(255, 255, 255), "Handle_d00" ); // 東上☆海美☆が追加
            DrawFormatString(320, 310, GetColor(255, 255, 255), "Handle_s01" ); // 東上☆海美☆が追加
            DrawFormatString(0, 310, GetColor(255, 255, 255), "Handle_s00" ); // 東上☆海美☆が追加
            DrawFormatString(640, 310, GetColor(255, 255, 255), "Handle_s02" ); // 東上☆海美☆が追加
        }
        else if (x == 400 || x == 100) {
            //DrawRotaGraph(520, 80, 0.3, 0.0, Handle_d00, TRUE); //難易度
            //DrawRotaGraph(320, 310, 0.60, 0.0, Handle_s02, TRUE); //中
            //DrawRotaGraph(0, 310, 0.45, 0.0, Handle_s01, TRUE); //右 加算
            //DrawRotaGraph(640, 310, 0.45, 0.0, Handle_s03, TRUE); //左 減算
            DrawFormatString(520, 80, GetColor(255, 255, 255), "Handle_d00" ); // 東上☆海美☆が追加
            DrawFormatString(320, 310, GetColor(255, 255, 255), "Handle_s02" ); // 東上☆海美☆が追加
            DrawFormatString(0, 310, GetColor(255, 255, 255), "Handle_s01" ); // 東上☆海美☆が追加
            DrawFormatString(640, 310, GetColor(255, 255, 255), "Handle_s03" ); // 東上☆海美☆が追加
        }
        else if (x == 450 || x == 150) {
            //DrawRotaGraph(520, 80, 0.3, 0.0, Handle_d00, TRUE); //難易度
            //DrawRotaGraph(320, 310, 0.60, 0.0, Handle_s03, TRUE); //中
            //DrawRotaGraph(0, 310, 0.45, 0.0, Handle_s02, TRUE); //右 加算
            //DrawRotaGraph(640, 310, 0.45, 0.0, Handle_s04, TRUE); //左 減算
            DrawFormatString(520, 80, GetColor(255, 255, 255), "Handle_d00"); // 東上☆海美☆が追加
            DrawFormatString(320, 310, GetColor(255, 255, 255), "Handle_s03" ); // 東上☆海美☆が追加
            DrawFormatString(0, 310, GetColor(255, 255, 255), "Handle_s02" ); // 東上☆海美☆が追加
            DrawFormatString(640, 310, GetColor(255, 255, 255), "Handle_s04" ); // 東上☆海美☆が追加
        }
        else if (x == 500 || x == 200) {
            //DrawRotaGraph(520, 80, 0.3, 0.0, Handle_d00, TRUE); //難易度
            //DrawRotaGraph(320, 310, 0.60, 0.0, Handle_s04, TRUE); //中
            //DrawRotaGraph(0, 310, 0.45, 0.0, Handle_s03, TRUE); //右 加算
            //DrawRotaGraph(640, 310, 0.45, 0.0, Handle_s05, TRUE); //左 減算
            DrawFormatString(520, 80, GetColor(255, 255, 255), "Handle_d00" ); // 東上☆海美☆が追加
            DrawFormatString(320, 310, GetColor(255, 255, 255), "Handle_s04" ); // 東上☆海美☆が追加
            DrawFormatString(0, 310, GetColor(255, 255, 255), "Handle_s03" ); // 東上☆海美☆が追加
            DrawFormatString(640, 310, GetColor(255, 255, 255), "Handle_s05" ); // 東上☆海美☆が追加
        }
        else if (x == 550 || x == 250) {
            //DrawRotaGraph(520, 80, 0.3, 0.0, Handle_d00, TRUE); //難易度
            //DrawRotaGraph(320, 310, 0.60, 0.0, Handle_s05, TRUE); //中
            //DrawRotaGraph(0, 310, 0.45, 0.0, Handle_s04, TRUE); //右 加算
            //DrawRotaGraph(640, 310, 0.45, 0.0, Handle_s00, TRUE); //左 減算
            DrawFormatString(520, 80, GetColor(255, 255, 255), "Handle_d00" ); // 東上☆海美☆が追加
            DrawFormatString(320, 310, GetColor(255, 255, 255), "Handle_s05" ); // 東上☆海美☆が追加
            DrawFormatString(0, 310, GetColor(255, 255, 255), "Handle_s04" ); // 東上☆海美☆が追加
            DrawFormatString(640, 310, GetColor(255, 255, 255), "Handle_s00" ); // 東上☆海美☆が追加
        }
    }

    DxLib_End(); // DXライブラリ終了処理
    return 0;
}


// end.
キー入力で、なんか香ばしいことをしているが、

コード:

        else if (x == 350 || x == 50) {
こことか、
(X が、ちょうど 350 の時)または(x が、ちょうと 50 の時)
というプログラミングがなされているが、それは、プログラマが意図したことなのだろうか ?
VTuber:
東上☆海美☆(とうじょう・うみみ)
http://atassyu.php.xdomain.jp/vtuber/index.html
レスがついていないものを優先して、レスするみみ。時々、見当外れなレスしみみ。

中の人:
手提鞄あたッしュ、[MrAtassyu] 手提鞄屋魚有店
http://ameblo.jp/mratassyu/
Pixiv: 666303
Windows, Mac, Linux, Haiku, Raspbery Pi, Jetson Nano, 電子ブロック 持ち。

アバター
みけCAT
記事: 6734
登録日時: 13年前
住所: 千葉県
連絡を取る:

Re: 画像の更新が入らない

#3

投稿記事 by みけCAT » 1年前

関数 gpUpdateKey が呼ばれず、他に配列 Key の要素の値を変えている場所も無いので、
配列 Key の各要素の値は明示的に初期値が設定されていないグローバル変数の初期値の0であり、
x++; や x--; の前のif文の条件は真にならないですね。
オフトピック
各画像を表示させるためには、1フレーム単位の正確な操作でxの値を求められる値にピッタリ合わせないといけない、
しかもこの判定以外にxに関する情報は(画面・音声・ファイル・ネットワークなどどこにも)出力しない…
ていう仕様でいいのかな?
複雑な問題?マシンの性能を上げてOpenMPで殴ればいい!(死亡フラグ)

返信

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