http://dixq.net/g/03_04.html
上記のプログラムを参考に以下のようなプログラムを作ったのですが、Enterを押しても何も反応せず次の処理に移行しません。
また上記のプログラムにはwhileの条件にDXライブラリ3大処理が含まれているので他の条件にしたのですが、画面が真っ暗のまま動作しませんでした。
DXライブラリ3大処理を含んだ状態では動作しました。
選択画面から次の処理への移行が出来ない
- Dixq (管理人)
- 管理人
- 記事: 1661
- 登録日時: 13年前
- 住所: 北海道札幌市
- 連絡を取る:
Re: 選択画面から次の処理への移行が出来ない
まず上キー下キーとエンターが1/60秒の間に同時押ししないとゲームが開始しなさそうな気がしますが、
描画が出来るかどうかはもっと全体的なプログラムを見る必要がありそうです。
毎フレームごとに描画メソッドは通っているのでしょうか?
描画が出来るかどうかはもっと全体的なプログラムを見る必要がありそうです。
毎フレームごとに描画メソッドは通っているのでしょうか?
Re: 選択画面から次の処理への移行が出来ない
func_stateが書き換えられるのは
左、もしくは右が押された瞬間かつ、エンターキーが押された瞬間、です。
人間に1フレーム単位の操作を求めるのは酷でしょう
左、もしくは右が押された瞬間かつ、エンターキーが押された瞬間、です。
人間に1フレーム単位の操作を求めるのは酷でしょう
Re: 選択画面から次の処理への移行が出来ない
選択画面の全体はこうなってます。
ここから他の処理に移行するようにプログラムを書きたいのですがどうすればいいでしょうか?
ここから他の処理に移行するようにプログラムを書きたいのですがどうすればいいでしょうか?
#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: 選択画面から次の処理への移行が出来ない
if( 0 == SelectNum )~~~~~~
は少し冗長でしょう。switchを使ったほうがいいです
わからなければ、プログラムの流れを紙に書いて整理してみるといいでしょう。
エンターキーが押される
↓
SelectNumにより分岐
↓
func_stateを書き換え
このような感じで。
さて、上の流れとコードを見比べてみて、おかしいところをピックアップすればいいのです
は少し冗長でしょう。switchを使ったほうがいいです
あとこのプログラムが何故思ったとおりに動かないかは理解してらっしゃいますか?ui さんが書きました:http://dixq.net/g/03_04.html
わからなければ、プログラムの流れを紙に書いて整理してみるといいでしょう。
エンターキーが押される
↓
SelectNumにより分岐
↓
func_stateを書き換え
このような感じで。
さて、上の流れとコードを見比べてみて、おかしいところをピックアップすればいいのです