クラス宣言。
(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:
};
コメント