ページ 1 / 1
ボタンのクリックについて
Posted: 2006年10月03日(火) 14:46
by ナガタ
管理人さんこんにちは.
**************************
//10回クリックしたら下の処理へ
int i = 0;
while(i <= 10){
if( ( GetMouseInput() & MOUSE_INPUT_LEFT ) != 0 )
i++;
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
**************************
こんな感じで10回クリックしたら下の処理に行きたいんですけど,
1回押しただけでプログラムが終了してしまいます.
これは1回押しただけで(押している間に)whileを10回高速で繰り返してしまっているからでしょうか?
Re:ボタンのクリックについて
Posted: 2006年10月03日(火) 14:52
by 管理人
ナガタさんこんにちは。
GetMouseInput() & MOUSE_INPUT_LEFT
が1ならマウスがクリックされているという状態を示すんですね。
これは「押さえているなら」だけしか書いてないためこうなってしまいます。
ゲームプログラムでも最初この罠にはまったことあります。
これは今の状態と過去の状態を保存して比較する必要があります。
int OldMouseOshita;
オールド マウス オシタというint型変数を用意します。
OldMouseOshita=(GetMouseInput() & MOUSE_INPUT_LEFT);
この行を最後に書く事で、次に回ってくるとき、前回の入力状態がわかります。
前回の入力状態が0で今回の入力状態が1なら「今の瞬間」おしたことがわかります。
この時にだけ条件マッチさせてやれば、一瞬でループをぬけてしまうことはありません。
Re:ボタンのクリックについて
Posted: 2006年10月03日(火) 14:59
by 管理人
これでどうでしょう?
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int i = 0,OldMouseOshita=0,NewMouseOshita;
if( DxLib_Init() == -1 ) return -1;
while(i <= 10){
NewMouseOshita=( GetMouseInput() & MOUSE_INPUT_LEFT );
if( OldMouseOshita == 0 && NewMouseOshita == 1 )
i++;
OldMouseOshita = NewMouseOshita;
}
return 0 ;
}
Re:ボタンのクリックについて
Posted: 2006年10月03日(火) 15:00
by 管理人
これは私独自のやり方なんで、ほかにいい方法があるかもしれません^^;
もし離した時に処理をさせたければ
OldMouseOshita == 1 && NewMouseOshita == 0
とすればいいわけですね。
Re:ボタンのクリックについて
Posted: 2006年10月03日(火) 15:14
by 管理人
実行状況を確認したいときはこのサンプル使ってください^^
今家にいないんで、サーバーにアップロードできません。
字下げしてないんで、読みにくいかもしれませんけど一度これコンパイルしてみてください。
内容
#include "DxLib.h"
int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
LPSTR lpCmdLine, int nCmdShow )
{
int i = 0,OldMouseOshita=0,NewMouseOshita;
ChangeWindowMode( TRUE ) ;
if( DxLib_Init() == -1 ) return -1;
SetDrawScreen( DX_SCREEN_BACK ) ;
while(i <= 10){
ClearDrawScreen();
NewMouseOshita=( GetMouseInput() & MOUSE_INPUT_LEFT );
DrawFormatString( 640/2-50 , 480/2 , GetColor(255,255,255) , "クリック%d回目" , i );//文字列表示
if( OldMouseOshita == 0 && NewMouseOshita == 1 )
i++;
OldMouseOshita = NewMouseOshita;
ScreenFlip() ;
}
return 0 ;
}
Re:ボタンのクリックについて
Posted: 2006年10月03日(火) 15:26
by ナガタ
ちょっと動かしてみます.
Re:ボタンのクリックについて
Posted: 2006年10月03日(火) 15:44
by ナガタ
動きましたー!!!!!!!!
管理人さん,ありがとうございますm(_ _)m
Re:ボタンのクリックについて
Posted: 2006年10月03日(火) 15:45
by 管理人
はい、よかったです^^
頑張ってくださいね~^^
Re:ボタンのクリックについて
Posted: 2006年10月03日(火) 15:48
by ナガタ
研究室に来てるのに,研究のプログラムは作らず違うプログラムを作ることに熱中してしまいますw
Re:ボタンのクリックについて
Posted: 2006年10月03日(火) 15:49
by 管理人
あははw
実は私もですよw
DXライブラリの面白さわかれば、ずっとパソコンにかじりついていたくなりますよね^^
パソコン中毒にならないように気をつけよw
Re:ボタンのクリックについて
Posted: 2006年10月03日(火) 16:10
by ナガタ
DXって「デラックス」ですか「ディーエックス」ですか?
解決押すの忘れてたので押しておきます.
Re:ボタンのクリックについて
Posted: 2006年10月03日(火) 16:11
by 管理人
DXは「DirectX」をもじってるんでしょうから
ディーエックスじゃないでしょうか?
Re:ボタンのクリックについて
Posted: 2006年10月03日(火) 16:14
by ナガタ
ですよねー.
初めて見たときから「デラックス」って読んでて,DirectXってことを考えるとその読み方はおかしいーなーって最近気づいたんですよねw
Re:ボタンのクリックについて
Posted: 2006年10月03日(火) 16:16
by 管理人
確かに読みかたありますもんね。
私もゲームの名前「●●X」っていうゲーム「エックス」って読むのに「テン」って呼んでて笑われたことあります(_ _|||)
DXライブラリがデラックスライブラリだったら笑えますねwなんか弁当デラックスで注文!みたいな(笑)
Re:ボタンのクリックについて
Posted: 2006年10月03日(火) 16:18
by ナガタ
すごいライブラリって意味でデラックスだと思ったんですよねーw
Re:ボタンのクリックについて
Posted: 2006年10月03日(火) 16:19
by 管理人
なるほどね~w
DirectX ver.7の機能を使いやすくしたライブラリのようですよ~^^