ボタンのクリックについて

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ナガタ

ボタンのクリックについて

#1

投稿記事 by ナガタ » 17年前

管理人さんこんにちは.

**************************
//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:ボタンのクリックについて

#2

投稿記事 by 管理人 » 17年前

ナガタさんこんにちは。

GetMouseInput() & MOUSE_INPUT_LEFT
が1ならマウスがクリックされているという状態を示すんですね。

これは「押さえているなら」だけしか書いてないためこうなってしまいます。
ゲームプログラムでも最初この罠にはまったことあります。
これは今の状態と過去の状態を保存して比較する必要があります。

int OldMouseOshita;

オールド マウス オシタというint型変数を用意します。

OldMouseOshita=(GetMouseInput() & MOUSE_INPUT_LEFT);

この行を最後に書く事で、次に回ってくるとき、前回の入力状態がわかります。
前回の入力状態が0で今回の入力状態が1なら「今の瞬間」おしたことがわかります。
この時にだけ条件マッチさせてやれば、一瞬でループをぬけてしまうことはありません。

管理人

Re:ボタンのクリックについて

#3

投稿記事 by 管理人 » 17年前

これでどうでしょう?

#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:ボタンのクリックについて

#4

投稿記事 by 管理人 » 17年前

これは私独自のやり方なんで、ほかにいい方法があるかもしれません^^;

もし離した時に処理をさせたければ

OldMouseOshita == 1 && NewMouseOshita == 0

とすればいいわけですね。

管理人

Re:ボタンのクリックについて

#5

投稿記事 by 管理人 » 17年前

実行状況を確認したいときはこのサンプル使ってください^^

今家にいないんで、サーバーにアップロードできません。

字下げしてないんで、読みにくいかもしれませんけど一度これコンパイルしてみてください。

内容

#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:ボタンのクリックについて

#6

投稿記事 by ナガタ » 17年前

ちょっと動かしてみます.

ナガタ

Re:ボタンのクリックについて

#7

投稿記事 by ナガタ » 17年前

動きましたー!!!!!!!!
管理人さん,ありがとうございますm(_ _)m

管理人

Re:ボタンのクリックについて

#8

投稿記事 by 管理人 » 17年前

はい、よかったです^^

頑張ってくださいね~^^

ナガタ

Re:ボタンのクリックについて

#9

投稿記事 by ナガタ » 17年前

研究室に来てるのに,研究のプログラムは作らず違うプログラムを作ることに熱中してしまいますw

管理人

Re:ボタンのクリックについて

#10

投稿記事 by 管理人 » 17年前

あははw
実は私もですよw
DXライブラリの面白さわかれば、ずっとパソコンにかじりついていたくなりますよね^^
パソコン中毒にならないように気をつけよw

ナガタ

Re:ボタンのクリックについて

#11

投稿記事 by ナガタ » 17年前

DXって「デラックス」ですか「ディーエックス」ですか?

解決押すの忘れてたので押しておきます.

管理人

Re:ボタンのクリックについて

#12

投稿記事 by 管理人 » 17年前

DXは「DirectX」をもじってるんでしょうから
ディーエックスじゃないでしょうか?

ナガタ

Re:ボタンのクリックについて

#13

投稿記事 by ナガタ » 17年前

ですよねー.
初めて見たときから「デラックス」って読んでて,DirectXってことを考えるとその読み方はおかしいーなーって最近気づいたんですよねw

管理人

Re:ボタンのクリックについて

#14

投稿記事 by 管理人 » 17年前

確かに読みかたありますもんね。
私もゲームの名前「●●X」っていうゲーム「エックス」って読むのに「テン」って呼んでて笑われたことあります(_ _|||)
DXライブラリがデラックスライブラリだったら笑えますねwなんか弁当デラックスで注文!みたいな(笑)

ナガタ

Re:ボタンのクリックについて

#15

投稿記事 by ナガタ » 17年前

すごいライブラリって意味でデラックスだと思ったんですよねーw

管理人

Re:ボタンのクリックについて

#16

投稿記事 by 管理人 » 17年前

なるほどね~w
DirectX ver.7の機能を使いやすくしたライブラリのようですよ~^^

閉鎖

“C言語何でも質問掲示板” へ戻る