前提
DXライブラリを参考にして、射的ゲームを作成しています。
実現したいこと
的(画像)にマウスの左クリックが押された瞬間に画像を完全に消して得点と的の破壊数を加算させたい
発生している問題・エラーメッセージ
・的に左クリック長押しすると得点と的の破壊数が加算し続けてしまう
・的に左クリックが押されたとき、表面上では画像は消えているが、まだ残ってしまっている。
該当のソースコード
C++
1#include "Game.h" 2#include "Scene.h" 3#include "DxLib.h" 4 5 6//更新 7void Game_Update() { 8 if (CheckHitKey(KEY_INPUT_B) != 0) { //Bキーが押されていたら 9 Scene_ChangeScene(eScene_Menu);//シーンをメニューに変更 10 } 11} 12 13//描画 14void Game_Draw() { 15 16 ChangeWindowMode(TRUE); 17 SetAlwaysRunFlag(TRUE); 18 19 SetDrawScreen(DX_SCREEN_BACK); 20 int MI, XPos, YPos; 21 int X = 250, Y = 250; //画像の座標 22 int SIZE = 45; // 当たり判定修正用 23 int targetGraph; 24 int score = 0; // 得点 25 int breakNum = 0; // 破壊数 26 int W, H; 27 28 29 // 的 30 targetGraph = LoadGraph("image\\tg.png"); 31 32 // 的のグラフィックのサイズを得る 33 GetGraphSize(targetGraph, &W, &H); 34 35 36 37 38 while (ProcessMessage() == 0) 39 { 40 ClearDrawScreen(); // 裏画面を初期化 41 SetFontSize(10); 42 DrawString(0, 0, "得点:", GetColor(255, 255, 255)); 43 DrawFormatString(50, 0, GetColor(255, 255, 255), "%d", score); 44 DrawString(120, 0, "破壊数:", GetColor(255, 255, 255)); 45 DrawFormatString(200, 0, GetColor(255, 255, 255), "%d", breakNum); 46 DrawString(0, 450, "Bキーを押すとメニュー画面に戻ります。", GetColor(255, 255, 255)); 47 48 MI = GetMouseInput(); // マウスのボタンの押下状態を取得する 49 int CLK = (int)(MI & MOUSE_INPUT_LEFT); // マウスクリックの取得 50 GetMousePoint(&XPos, &YPos); // マウス座標の取得 51 52 int HIT = (int)(CLK && (XPos<X + W && XPos>X - W + SIZE) && (YPos<Y + H && YPos>Y - H + SIZE)); // 当たり判定 53 54 55 // 的表示 56 DrawGraph(X, Y, targetGraph, FALSE); 57 58 X++; if (X > 500)X = 0; // 的の移動 59 60 // マウスボタンが押されていて,且つ,マウスカーソル位置が特定の範囲内にあるかどうか 61 if (HIT) { 62 DeleteGraph(targetGraph, FALSE); 63 score += 100; 64 breakNum += 1; 65 } 66 67 68 69 70 ScreenFlip(); // 裏画面の内容を表画面に反映 71 } 72 73 74} 75
回答2件
あなたの回答
tips
プレビュー