左クリックの入力が一度しかできない

フォーラム(掲示板)ルール
フォーラム(掲示板)ルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
ゆーや
記事: 4
登録日時: 3ヶ月前

左クリックの入力が一度しかできない

#1

投稿記事 by ゆーや » 3ヶ月前

Dxlibを使ってクリックした場所に円形の衝撃波を表示するプログラミングを描いたのですが一度クリックしてしまうと二度目ができなくなってしまうので須賀どう改善すれよろしいでしょうか、理想としては一度目の表示が終わったら二度目の表示ができるというのを何度もできるようにしたいです

数秒たてば画像が消えるようにはなっています。簡単に言えば左クリックの入力が一度しかできないので何度もできるようにしたいです。



コード:

#include "DxLib.h"

// ウィンドウのタイトルに表示する文字列
const char TITLE[] = "学籍番号 名前:タイトル";

// ウィンドウ横幅
const int WIN_WIDTH = 600;

// ウィンドウ縦幅
const int WIN_HEIGHT = 400;	

int WINAPI WinMain(_In_ HINSTANCE hInstance, _In_opt_ HINSTANCE hPrevInstance, _In_ LPSTR lpCmdLine, _In_ int nCmdShow)
{
	// ウィンドウモードに設定
	ChangeWindowMode(TRUE);

	// ウィンドウサイズを手動では変更させず、
	// かつウィンドウサイズに合わせて拡大できないようにする
	SetWindowSizeChangeEnableFlag(FALSE, FALSE);

	// タイトルを変更
	SetMainWindowText(TITLE);

	// 画面サイズの最大サイズ、カラービット数を設定(モニターの解像度に合わせる)
	SetGraphMode(WIN_WIDTH, WIN_HEIGHT, 32);

	// 画面サイズを設定(解像度との比率で設定)
	SetWindowSizeExtendRate(1.0);

	// 画面の背景色を設定する
	SetBackgroundColor(0x00, 0x00, 0xFF);			

	// DXlibの初期化
	if (DxLib_Init() == -1) { return -1; }

	// (ダブルバッファ)描画先グラフィック領域は裏面を指定
	SetDrawScreen(DX_SCREEN_BACK);

	// 画像などのリソースデータの変数宣言と読み込み

	int number = 255;
	float size = 1.0;
	int Cr;
	Cr = GetColor(255, 255, 255);

	int x, y, Mouse,mouseFlag;
	mouseFlag = 0;

	int gh;
	gh = LoadGraph("circle.png");

	int graphFlag = 0;
	
	// ゲームループで使う変数の宣言


	// 最新のキーボード情報用
	char keys[256] = { 0 };

	// 1ループ(フレーム)前のキーボード情報
	char oldkeys[256] = { 0 };

	// ゲームループ
	while (1)
	{
		// 最新のキーボード情報だったものは1フレーム前のキーボード情報として保存
		// 最新のキーボード情報を取得
		GetHitKeyStateAll(keys);

		// 画面クリア
		ClearDrawScreen();
		//---------  ここからプログラムを記述  ----------//

		// 更新処理

		Mouse = GetMouseInput();

		if ((Mouse&MOUSE_INPUT_LEFT)!=0)
		{
			mouseFlag = 1;
		}

		
		GetMousePoint(&x, &y);
		// 描画処理

		SetDrawBlendMode(DX_BLENDMODE_ALPHA, number);
		if (mouseFlag==1)
		{
			number = number - 5;
			size = size + 0.05;
			graphFlag = 1;
		}


		if (graphFlag==1)
		{
			DrawRotaGraph(x - 32, y - 32, size,0, gh, true);
		}
		
		if (number<=0)
		{
			graphFlag = 0;
		}

		//---------  ここまでにプログラムを記述  ---------//
		// (ダブルバッファ)裏面
		ScreenFlip();	

		// 20ミリ秒待機(疑似60FPS)
		WaitTimer(20);

		// Windowsシステムからくる情報を処理する
		if (ProcessMessage() == -1)
		{
			break;
		}

		// ESCキーが押されたらループから抜ける
		if (CheckHitKey(KEY_INPUT_ESCAPE) == 1)
		{
			break;
		}
	}
	// Dxライブラリ終了処理
	DxLib_End();

	// 正常終了
	return 0;
}

Meta3

Re: 左クリックの入力が一度しかできない

#2

投稿記事 by Meta3 » 3ヶ月前

左クリックの入力を一度やるとmouseFlag = 1;になりっぱなしなので 0にリセットすればよい

if ((Mouse&MOUSE_INPUT_LEFT)!=0)
{
mouseFlag = 1;
}
なので たとえば右クリックで mouseFlag = 0;とする
またはelse文でmouseFlag = 0;とする
など・・・

Meta3

Re: 左クリックの入力が一度しかできない

#3

投稿記事 by Meta3 » 3ヶ月前

ここでmouseFlag = 0 すればどうですか それと number = 255;がいるのでは
if (number<=0)
{
graphFlag = 0;
}

littlestream
記事: 37
登録日時: 4年前

Re: 左クリックの入力が一度しかできない

#4

投稿記事 by littlestream » 3ヶ月前

これはプログラミング中にマウスでもキーボードでも起こるうる現象ですが、
チャタリングを防止する処理を行えばOKです。

具体的には、前のフレームのマウス入力やキーボード入力を受け取った変数を今の
受け取った変数と比較すればOKです。これでチャタリングを防止できます。

擬似言語っぽく書くなら
static int マウスの変数;

if(!マウスの変数 && マウスの入力を判定する関数()==1)
{
//ここで判定完了!!
}
マウスの変数=マウスの入力を判定する関数();

返信

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