ページ 11

入力について

Posted: 2010年7月20日(火) 21:23
by パコネコ
scanfなどを使って入力を行うときに、入力した後にエンターキーを押してデータに反映されますよね。
入力したい値は、0もしくは1なのですが、ゲーム中に’B’ボタンを押したら入力させたいのですが、
入力を行うときには
「bbbbb」
というふうに入力するときにすでにBボタンの残骸が入力される状態です。
一度「BackSpace」を押して全部消せばいいのですが、せめて入力のときに
「b」
というふうに一つしか入力できなくできないでしょうか?
よろしくお願いします。

Re:入力について

Posted: 2010年7月21日(水) 00:34
by Poco
現状がよくわかりません。

> 入力したい値は、0もしくは1なのですが、ゲーム中に’B’ボタンを押したら入力させたいのですが、
> 入力を行うときには
> 「bbbbb」
> というふうに入力するときにすでにBボタンの残骸が入力される状態です。

Bボタンの入力処理を行う前にBボタンの残骸がある、と言う意味ですか?
それとも、Bボタンの入力処理を行なおうとすると、複数回のBボタン入力処理を行う羽目になる(本当は1回だけ処理したい)、という意味ですか?

Re:入力について

Posted: 2010年7月21日(水) 00:38
by パコネコ
処理に入った時には、すでに残骸が入力されている状態です。

Re:入力について

Posted: 2010年7月21日(水) 00:50
by Poco
サンプルソースを提示できます?
#残骸が出るソースが欲しいです。

Re:入力について

Posted: 2010年7月21日(水) 10:35
by バグ
処理系依存ですし、本来は未定義の動作ではありますが、fflush関数で標準入力ストリームをクリアしてから、scanf関数を実行してみてはいかがでしょうか?

Re:入力について

Posted: 2010年7月21日(水) 11:26
by シエル
>入力したい値は、0もしくは1なのですが、ゲーム中に’B’ボタンを押したら入力させたいのですが、

結局入力したい値は何なのですか?何をしたいのか見えてきません。

Re:入力について

Posted: 2010年7月21日(水) 14:42
by パコネコ
少し違いますがこんな感じです。
<tt>
char a;
if(gl_getkeystate('B')<0){//Bボタンが押されているなら
while(gl_getkeystate('B')<0);//ボタンを離すまで待機
printf("ダンジョンの最初に\n"
"戻る:0 戻らない:1---");
scanf("%c",&a);
if(a=='0')break;//ダンジョンから抜ける。
else printf("キャンセルしました。\n");
}
</tt>
こんな感じでした。
ただscanf文を処理するときには、入力画面に「bbbb」と入ってしまっています。
scanfで なくてもいいので、入力画面のときに「b」でこれ以上入力してもバックスペースを押さない限り
入力できなくしたいのです。
注意:
gl_getkeystateはボタンが押されているかの判定ができる関数?です。

Re:入力について

Posted: 2010年7月21日(水) 14:55
by シエル
if(gl_getkeystate('B')<0){//Bボタンが押されているなら
while(gl_getkeystate('B')<0);//ボタンを離すまで待機

↑この辺が原因かと。


全部gl_getkeystateの関数で処理すればいいんじゃないですか?

Re:入力について

Posted: 2010年7月21日(水) 15:25
by パコネコ
>全部gl_getkeystateの関数で処理すればいいんじゃないですか?
そうですね。
一応ゲームのほうは、右ボタン左ボタンで選んで決定っというふうに作りました。
つまりこういうやつですよね。
a=0;
do{
if(gl_getkeystate('Y')<0)a=1;
if(gl_getkeystate('N')<0)a=2;
}while(a==0);

Re:入力について

Posted: 2010年7月21日(水) 18:46
by パコネコ
できれば入力の方法が知りたかったのですが…
でもゲームを作るときには、直接ボタンを押したかの判定のほうが、
いいかもしれませんね。

質問の文章が?かは、わかりませんがわかりずらい質問に付き合っていただき、
ありがとうございました。
これで、解決にしたいと思います。