C言語Ⅱ⑤(2025/10/16)

クラス宣言。
(EditScene.h)

#pragma once

#include"StDefine.h"

class EditScene
{

public:
	EditScene(void);
	~EditScene(void);

	bool SystemInit(void);
	void Update(void);
	void Draw(void);
	bool Release(void);

	int GetLandImageHndl(eLandFormKind lnd) { return landImage[lnd]; }
	int GetPrevButtonStat(void) { return prevButtonStat; }
	int GetNowButtonStat(void) { return nowButtonStat; }

private:

	int landImage[E_LAND_MAX];		//マップ地形画像のハンドル番号テーブル

	int prevButtonStat;				//直前のマウスボタンの状態
	int nowButtonStat;				//現在のマウスボタンの状態

};

(EditScene.cpp)

//----------------------------------------------------
// map editor
// name:ゆき
//----------------------------------------------------
//EditScene class
#include<DxLib.h>
#include"Application.h"
#include"EditScene.h"

EditScene::EditScene(void)
{

}
EditScene::~EditScene(void)
{

}

bool EditScene::SystemInit(void)
{
	int err = LoadDivGraph("image/TileMap.png", E_LAND_MAX, 10, 3, MAP_CHIP_WID, MAP_CHIP_HIG, landImage);
	if (err == -1)return false;

	prevButtonStat = nowButtonStat = 0;	//マウスボタンの状態

	return true;
}

void EditScene::Update(void)
{
	prevButtonStat = nowButtonStat;		//直前のフレームのボタン状態を退避
	nowButtonStat = GetMouseInput();	//現フレームのボタン状態を取得
}

void EditScene::Draw(void)
{
	SetDrawScreen(DX_SCREEN_BACK);		//裏画面を描画対象に設定
	ClearDrawScreen();			//描画対象画面をクリア(消去)

	//ウインドウ背景を描画
	DrawBox(0, 0, Application::WINDOW_SIZE_WID, Application::WINDOW_SIZE_HIG, GetColor(0, 0, 255), true);

	//編集エリアのスクリーンを裏画面に貼り付ける


	//情報エリアのスクリーンを裏画面に貼り付ける


	ScreenFlip();						//描画画面を入れ替え
}

bool EditScene::Release(void)
{
	//作成した

	return true;
}

※GetMouseInput()
各定義値とAND演算して、結果が0でない場合にはボタンが押されていると判断可能。

戻り値(例):
MOUSE_INPUT_LEFT  : マウス左ボタン
MOUSE_INPUT_RIGHT  : マウス右ボタン
MOUSE_INPUT_MIDDLE : マウス中央ボタン

(例)左ボタンが押されているか調べる

if( ( GetMouseInput() & MOUSE_INPUT_LEFT ) != 0 )
    {
        // 押されている
    }
    else
    {
        // 押されていない
    }


これまでは、裏画面に直接描画をしてきていた。
今回は「編集スクリーン」「情報スクリーン」を作成する。
それぞれのスクリーンに「描画したいもの」を描画していくが、表示までの手順は下記。

 ①SetDrawScreenで描画対象をそれぞれの画面に切り替える
 ②描画する
 ③描画が終わったら、それぞれのスクリーンを裏画面に貼り付ける
 ④ScreenFlip


EditSceneを組み込む。
(Application.cpp)

//----------------------------------------------------
// map editor
// name:ゆき
//----------------------------------------------------
//Application class

#include<DxLib.h>
#include"Application.h"
#include"EditScene.h"

Application::Application(void)
{
	edScene = nullptr;
}

Application::~Application(void)
{

}

/*
*--------------------------------------------------
* 初期化処理(最初の一回のみ実行)
* Input:
*    なし
* Output:
*    bool true = 正常終了 / false = エラー
* ------------------------------------------------
*/
bool Application::SystemInit(void)
{
	//システム設定処理
	SetWindowText("MapEditor");							//ウインドウのタイトルテキスト ※DxLib内の関数だが、初期化前に使用可能
	SetGraphMode(WINDOW_SIZE_WID, WINDOW_SIZE_HIG, 32);	//ウインドウのサイズと色モード ※DxLib内の関数だが、初期化前に使用可能
	ChangeWindowMode(true);								//ウインドウの表示方法 true=ウインドウ false=フルスクリーン) ※DxLib内の関数だが、初期化前に使用可能

	if (DxLib_Init() == -1)return false;				//DxLibの初期化処理

	edScene = new EditScene();
	if (edScene == nullptr)return false;

	edScene->SystemInit();

	return true;
}

void Application::Run(void)
{
	while (ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) {
		Update();	//更新
		Draw();		//描画
	}
}

void Application::Update(void)void Application::Update(void)
{
	edScene->Update();
}

void Application::Draw(void)
{
	edScene->Draw();
}

bool Application::Release(void)
{
	//動的に作成したクラスのオブジェクトの破棄
	edScene->Release();
	delete edScene;
	edScene = nullptr;

	if (DxLib_End() == -1)return false;
	return true;
}

ここまでで実行可能になり、「青い画面」が表示されるようになる。


InfoArea.cpp、InfoArea.hを新規作成し、InfoArea.hのクラスの外形だけ作る。
(InfoArea.h)

#pragma once

#include "StDefine.h"

class InfoArea
{

public:

private:

};

コメント

タイトルとURLをコピーしました