ページ 1 / 1
選択画面から次の処理への移行が出来ない
Posted: 2012年6月30日(土) 12:17
by ui
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; //ゲーム開始
}
}
Re: 選択画面から次の処理への移行が出来ない
Posted: 2012年6月30日(土) 12:25
by Dixq (管理人)
まず上キー下キーとエンターが1/60秒の間に同時押ししないとゲームが開始しなさそうな気がしますが、
描画が出来るかどうかはもっと全体的なプログラムを見る必要がありそうです。
毎フレームごとに描画メソッドは通っているのでしょうか?
Re: 選択画面から次の処理への移行が出来ない
Posted: 2012年6月30日(土) 12:28
by nil
func_stateが書き換えられるのは
左、もしくは右が押された瞬間かつ、エンターキーが押された瞬間、です。
人間に1フレーム単位の操作を求めるのは酷でしょう
Re: 選択画面から次の処理への移行が出来ない
Posted: 2012年6月30日(土) 17:55
by ui
選択画面の全体はこうなってます。
ここから他の処理に移行するようにプログラムを書きたいのですがどうすればいいでしょうか?
コード:
#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 );
}
}
Re: 選択画面から次の処理への移行が出来ない
Posted: 2012年6月30日(土) 18:11
by nil
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を書き換え
このような感じで。
さて、上の流れとコードを見比べてみて、おかしいところをピックアップすればいいのです
Re: 選択画面から次の処理への移行が出来ない
Posted: 2012年7月01日(日) 02:23
by ui
なんとか次の処理に移行させることが出来ました。
ありがとうございました。