質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

Q&A

1回答

1301閲覧

DXLIBでマウスを使ってドラッグして線を引きたい

blatabla

総合スコア4

Visual C++

Microsoft Visual C++はWindowsのCとC++の統合開発環境(IDE)であり、コンパイラやデバッガを含んでいます。

DXライブラリ

DXライブラリとは、DirectXを使ったWindowsソフトの開発に必ず付いて回るDirectXやWindows関連のプログラムを使い易くまとめた形で利用できるようにしたC++言語用のゲームライブラリです。

0グッド

0クリップ

投稿2020/01/27 02:53

前提・実現したいこと

DXLIBを使い、マウスで線を引きたいのですがうまくいかない。
■■な機能を実装中に以下のエラーメッセージが発生しました。

発生している問題・エラーメッセージ

エラーメッセージ

該当のソースコード

#include <DxLib.h>
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
int ClickX, ClickY, Button, LogType;
int DrawFlag, DrawX, DrawY, DrawColor;
ChangeWindowMode(TRUE);
// DXライブラリの初期化
if (DxLib_Init() < 0) return -1;

// 描画先を裏画面にする SetDrawScreen(DX_SCREEN_BACK); // 描画情報の初期化 DrawFlag = FALSE; DrawX = 0; DrawY = 0; DrawColor = 0; // メインループ(何かキーが押されたらループを抜ける) while (ProcessMessage() == 0) { // 画面のクリア ClearDrawScreen(); // マウスのボタンが押されたり離されたりしたかどうかの情報を取得する if (GetMouseInputLog2(&Button, &ClickX, &ClickY, &LogType, TRUE) == 0) { // 左ボタンが押されたり離されたりしていたら描画するかどうかのフラグを立てて、座標も保存する if ((Button & MOUSE_INPUT_LEFT) != 0) { DrawFlag = TRUE; DrawX = ClickX; DrawY = ClickY; // 四角形の色を押された場合は白に、離された場合は紫にする DrawColor = LogType == MOUSE_INPUT_LOG_DOWN ? GetColor(255, 255, 255) : GetColor(255, 0, 255); } } // 描画するかどうかのフラグが立っていたら、マウスの左ボタンが押されたり離されたりした座標に小さい四角形を描画する if (DrawFlag == TRUE) { DrawBox(DrawX - 8, DrawY - 8, DrawX + 8, DrawY + 8, DrawColor, TRUE); } // 裏画面の内容を表画面に反映 ScreenFlip(); // 0.5秒待つ WaitTimer(500); } // DXライブラリの後始末 DxLib_End(); // ソフトの終了 return 0;

}

試したこと

座標の変数にマウスの座標の変数を入れてみたりしたが駄目だった。

補足情報(FW/ツールのバージョンなど)

visual studio 2017

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

nskydiving

2020/03/11 02:57

コードのレイアウトが崩れてしまっていますので、コード部分を<code>タグで囲んでください。 また、「うまくいかない。」だけでは回答者に伝わらないので、何がどのようにうまくいかないのか具体的に書いてください。
guest

回答1

0

ClearDrawScreen()をすると、毎フレーム画面がクリアされるので、
今までにクリックした座標を記録しておく必要があります。
座標の構造体をVector2、クリックした座標のリストをpointsとすると、
線を引く一番シンプルなコードは以下のようになります。

c++

1#include"DxLib.h" 2#include<vector> 3 4using namespace std; 5 6struct Vector2 {//座標を示す構造体 7 int x; 8 int y; 9}; 10 11int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow) 12{ 13 ChangeWindowMode(TRUE); 14 if (DxLib_Init() == -1) return 0; 15 16 vector<Vector2> points;//座標のリスト 17 18 while (!((ScreenFlip() || CheckHitKey(KEY_INPUT_ESCAPE) || ProcessMessage() || ClearDrawScreen()))) {//Escキーで終了 19 if (GetMouseInput() & MOUSE_INPUT_LEFT) { 20 Vector2 point; 21 GetMousePoint(&point.x, &point.y); 22 points.push_back(point);//リストに座標を登録 23 } 24 25 for (Vector2 p : points)//リスト内のすべての座標に点を打つ 26 { 27 DrawPixel(p.x, p.y, GetColor(255, 255, 255)); 28 } 29 } 30 31 DxLib_End(); 32 return 0; 33}

投稿2020/03/21 13:55

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問