ボタンのクリックについて
ボタンのクリックについて
管理人さんこんにちは.
**************************
//10回クリックしたら下の処理へ
int i = 0;
while(i <= 10){
if( ( GetMouseInput() & MOUSE_INPUT_LEFT ) != 0 )
i++;
}
DxLib_End() ; // DXライブラリ使用の終了処理
return 0 ; // ソフトの終了
**************************
こんな感じで10回クリックしたら下の処理に行きたいんですけど,
1回押しただけでプログラムが終了してしまいます.
これは1回押しただけで(押している間に)whileを10回高速で繰り返してしまっているからでしょうか?
**************************
//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:ボタンのクリックについて
ナガタさんこんにちは。
GetMouseInput() & MOUSE_INPUT_LEFT
が1ならマウスがクリックされているという状態を示すんですね。
これは「押さえているなら」だけしか書いてないためこうなってしまいます。
ゲームプログラムでも最初この罠にはまったことあります。
これは今の状態と過去の状態を保存して比較する必要があります。
int OldMouseOshita;
オールド マウス オシタというint型変数を用意します。
OldMouseOshita=(GetMouseInput() & MOUSE_INPUT_LEFT);
この行を最後に書く事で、次に回ってくるとき、前回の入力状態がわかります。
前回の入力状態が0で今回の入力状態が1なら「今の瞬間」おしたことがわかります。
この時にだけ条件マッチさせてやれば、一瞬でループをぬけてしまうことはありません。
GetMouseInput() & MOUSE_INPUT_LEFT
が1ならマウスがクリックされているという状態を示すんですね。
これは「押さえているなら」だけしか書いてないためこうなってしまいます。
ゲームプログラムでも最初この罠にはまったことあります。
これは今の状態と過去の状態を保存して比較する必要があります。
int OldMouseOshita;
オールド マウス オシタというint型変数を用意します。
OldMouseOshita=(GetMouseInput() & MOUSE_INPUT_LEFT);
この行を最後に書く事で、次に回ってくるとき、前回の入力状態がわかります。
前回の入力状態が0で今回の入力状態が1なら「今の瞬間」おしたことがわかります。
この時にだけ条件マッチさせてやれば、一瞬でループをぬけてしまうことはありません。
Re:ボタンのクリックについて
これでどうでしょう?
#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 ;
}
#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:ボタンのクリックについて
これは私独自のやり方なんで、ほかにいい方法があるかもしれません^^;
もし離した時に処理をさせたければ
OldMouseOshita == 1 && NewMouseOshita == 0
とすればいいわけですね。
もし離した時に処理をさせたければ
OldMouseOshita == 1 && NewMouseOshita == 0
とすればいいわけですね。
Re:ボタンのクリックについて
実行状況を確認したいときはこのサンプル使ってください^^
今家にいないんで、サーバーにアップロードできません。
字下げしてないんで、読みにくいかもしれませんけど一度これコンパイルしてみてください。
内容
#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 ;
}
今家にいないんで、サーバーにアップロードできません。
字下げしてないんで、読みにくいかもしれませんけど一度これコンパイルしてみてください。
内容
#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:ボタンのクリックについて
あははw
実は私もですよw
DXライブラリの面白さわかれば、ずっとパソコンにかじりついていたくなりますよね^^
パソコン中毒にならないように気をつけよw
実は私もですよw
DXライブラリの面白さわかれば、ずっとパソコンにかじりついていたくなりますよね^^
パソコン中毒にならないように気をつけよw
Re:ボタンのクリックについて
ですよねー.
初めて見たときから「デラックス」って読んでて,DirectXってことを考えるとその読み方はおかしいーなーって最近気づいたんですよねw
初めて見たときから「デラックス」って読んでて,DirectXってことを考えるとその読み方はおかしいーなーって最近気づいたんですよねw
Re:ボタンのクリックについて
確かに読みかたありますもんね。
私もゲームの名前「●●X」っていうゲーム「エックス」って読むのに「テン」って呼んでて笑われたことあります(_ _|||)
DXライブラリがデラックスライブラリだったら笑えますねwなんか弁当デラックスで注文!みたいな(笑)
私もゲームの名前「●●X」っていうゲーム「エックス」って読むのに「テン」って呼んでて笑われたことあります(_ _|||)
DXライブラリがデラックスライブラリだったら笑えますねwなんか弁当デラックスで注文!みたいな(笑)