選択画面から次の処理への移行が出来ない

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

選択画面から次の処理への移行が出来ない

#1

投稿記事 by ui » 12年前

http://dixq.net/g/03_04.html
上記のプログラムを参考に以下のようなプログラムを作ったのですが、Enterを押しても何も反応せず次の処理に移行しません。
また上記のプログラムにはwhileの条件にDXライブラリ3大処理が含まれているので他の条件にしたのですが、画面が真っ暗のまま動作しませんでした。
DXライブラリ3大処理を含んだ状態では動作しました。

コード:

		if( Key[ KEY_INPUT_DOWN ] == 1 || Key[ KEY_INPUT_UP ] == 1 ){ // 下キーか、上キーが押された瞬間
				if( 0 == SelectNum ){          // 今処理しているのが、選択番号と同じ要素なら
					x=10;
					y=150;
					if (Key[ KEY_INPUT_RETURN ] == 1){
						func_state=100;	//ゲーム開始
					}
				}

アバター
Dixq (管理人)
管理人
記事: 1661
登録日時: 13年前
住所: 北海道札幌市
連絡を取る:

Re: 選択画面から次の処理への移行が出来ない

#2

投稿記事 by Dixq (管理人) » 12年前

まず上キー下キーとエンターが1/60秒の間に同時押ししないとゲームが開始しなさそうな気がしますが、
描画が出来るかどうかはもっと全体的なプログラムを見る必要がありそうです。
毎フレームごとに描画メソッドは通っているのでしょうか?

nil
記事: 428
登録日時: 12年前

Re: 選択画面から次の処理への移行が出来ない

#3

投稿記事 by nil » 12年前

func_stateが書き換えられるのは
左、もしくは右が押された瞬間かつ、エンターキーが押された瞬間、です。

人間に1フレーム単位の操作を求めるのは酷でしょう

ui

Re: 選択画面から次の処理への移行が出来ない

#4

投稿記事 by ui » 12年前

選択画面の全体はこうなってます。
ここから他の処理に移行するようにプログラムを書きたいのですがどうすればいいでしょうか?

コード:

#include "../include/GV.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 Handle[2];

void menu2(){

	Handle[0] = LoadGraph( "../dat/img/menu/menu.png" ); // 画像のロード
	Handle[1] = LoadGraph( "../dat/img/menu/arrow.png" ); // 画像のロード

	int x=10;
	int y=150;
	int SelectNum = 0; // 現在の選択番号

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

                if( Key[ KEY_INPUT_DOWN ] == 1 ){ // 下キーが押された瞬間だけ処理

                        SelectNum = ( SelectNum + 1 ) % 4; // 現在の選択項目を一つ下にずらす(ループする)
                }

		if( Key[ KEY_INPUT_UP ] == 1 ){ // 上キーが押された瞬間だけ処理

			SelectNum = ( SelectNum + 3 ) % 4; // 現在の選択項目を一つ上にずらす(逆ループする)
		}

		if( Key[ KEY_INPUT_DOWN ] == 1 || Key[ KEY_INPUT_UP ] == 1 ){ // 下キーか、上キーが押された瞬間
				if( 0 == SelectNum ){          // 今処理しているのが、選択番号と同じ要素なら
					x=10;
					y=150;
				}
				
				if( 1 == SelectNum ){
					x=0;
					y=225;
				}

				if( 2 == SelectNum ){
					x=125;
					y=300;
				}

				if( 3 == SelectNum ){
					x=150;
					y=375;
				}
			}
		}

			DrawGraph( 0, 0, Handle[0], TRUE );
			DrawGraph( x, y, Handle[1], TRUE );
	}

}

nil
記事: 428
登録日時: 12年前

Re: 選択画面から次の処理への移行が出来ない

#5

投稿記事 by nil » 12年前

if( 0 == SelectNum )~~~~~~
は少し冗長でしょう。switchを使ったほうがいいです
ui さんが書きました:http://dixq.net/g/03_04.html

コード:

		if( Key[ KEY_INPUT_DOWN ] == 1 || Key[ KEY_INPUT_UP ] == 1 ){ // 下キーか、上キーが押された瞬間
				if( 0 == SelectNum ){          // 今処理しているのが、選択番号と同じ要素なら
					x=10;
					y=150;
					if (Key[ KEY_INPUT_RETURN ] == 1){
						func_state=100;	//ゲーム開始
					}
				}
あとこのプログラムが何故思ったとおりに動かないかは理解してらっしゃいますか?
わからなければ、プログラムの流れを紙に書いて整理してみるといいでしょう。

エンターキーが押される

SelectNumにより分岐

func_stateを書き換え

このような感じで。

さて、上の流れとコードを見比べてみて、おかしいところをピックアップすればいいのです

ui

Re: 選択画面から次の処理への移行が出来ない

#6

投稿記事 by ui » 12年前

なんとか次の処理に移行させることが出来ました。
ありがとうございました。

閉鎖

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