画像を常時表示させて処理を行わせたい

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
fory

画像を常時表示させて処理を行わせたい

#1

投稿記事 by fory » 14年前

1のキーを入力したら画像を描画し、そこからさらにEnterキーを入力すると指定された処理に移行するプログラムを作ったのですが、思うように動作しません。
↓のプログラムだと1のキーを押してる間だけ画像を描画し、離すと画像が消えてしまい、この処理がループしてしまいます。
意図した動作をさせるにはどうすればいいでしょうか?
WindowsでVC++ 2008EEを使用しています。

コード:

#include "../include/GV.h"
#include "../../../include/DxLib.h"


int func_menu;
int Handle0, Handle1;
	
void menu(){
	
	Handle0 = LoadGraph( "../dat/img/menu/menu.png" ); // 画像のロード
	Handle1 = LoadGraph( "../dat/img/menu/st.png" ); // 画像のロード

	func_menu = 0;
	
	while( ScreenFlip()==0 && ProcessMessage()==0 && ClearDrawScreen()==0 ){

		DrawGraph( 0, 0, Handle0, TRUE );
		
				if (CheckHitKey( KEY_INPUT_1 ) == 1){
				DrawGraph( 0, 150, Handle1, TRUE ); 
				func_menu=1;
		}

		switch(func_menu){

			case 1:
					if (CheckHitKey( KEY_INPUT_RETURN ) == 1){
					func_state=100;		//ゲーム開始
				}
		}

	}
}

アバター
softya(ソフト屋)
副管理人
記事: 11677
登録日時: 15年前
住所: 東海地方
連絡を取る:

Re: 画像を常時表示させて処理を行わせたい

#2

投稿記事 by softya(ソフト屋) » 14年前

まず、インデント揃えて下さね。すごく読み辛くなります。

コード:

#include "../include/GV.h"
#include "../../../include/DxLib.h"


int func_menu;
int Handle0, Handle1;

void menu()
{

	Handle0 = LoadGraph( "../dat/img/menu/menu.png" ); // 画像のロード
	Handle1 = LoadGraph( "../dat/img/menu/st.png" ); // 画像のロード

	func_menu = 0;

	while( ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 ) {

		DrawGraph( 0, 0, Handle0, TRUE );

		if ( CheckHitKey( KEY_INPUT_1 ) == 1 ) {
			DrawGraph( 0, 150, Handle1, TRUE );
			func_menu = 1;
		}

		switch( func_menu ) {

		case 1:
			if ( CheckHitKey( KEY_INPUT_RETURN ) == 1 ) {
				func_state = 100;   //ゲーム開始
			}
		}

	}
}
ご質問の件ですが、表示する画像をグローバルかstaticな変数に覚えておいて、その情報を毎回表示すれば良いわけです。
今回の場合は画像が有効なら、func_menuが1の様なのでfunc_menuが1の時常に表示すれば良いと思います。

で、問題点としてmenu関数にwhile( ScreenFlip() == 0 && ProcessMessage() == 0 && ClearDrawScreen() == 0 ) {があるのはすごく良くない書き方です。
「新・C言語 ~ゲームプログラミングの館~ [DXライブラリ] 補足資料.11章 書いてはいけない4つの処理」
http://dixq.net/g/h_11.html
あとmenu関数にロードがあるのも良くない書き方ですので、menu_Init()とmenu_Update()とmenu_Draw()に分けることをおすすめします。
by softya(ソフト屋) 方針:私は仕組み・考え方を理解して欲しいので直接的なコードを回答することはまれですので、すぐコードがほしい方はその旨をご明記下さい。私以外の方と交代したいと思います(代わりの方がいる保証は出来かねます)。

閉鎖

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