DxライブラリでRPGを作る① -ウィンドウ表示-

C++

 こんにちは。今回から、複数回にわけてDxライブラリでRPGを作っていきます。

 Unityではなく、DxLibを使う理由は、Unityではアセットや基本機能に頼ってしまい、肝心のコードを書きプログラミングを学ぶところから、外れてしまうと思ったからです。

※DxLibとはDXライブラリのことです。

次回記事はこちら

ウィンドウ表示

 まず、最初はウィンドウを出すところからやっていきましょう。

#define WIN_X (256)
#define WIN_Y (224)

#include <DxLib.h>

int WINAPI WinMain(
    _In_ HINSTANCE hInstance,
    _In_opt_ HINSTANCE hPrevInstance,
    _In_ LPSTR IpCmdLine,
    _In_ int nShowCmd)
{
    ChangeWindowMode(TRUE);
    DxLib_Init();

    /*Window初期化*/
    SetWindowText("DRAGON QUEST"); //ウィンドウのタイトル
    SetGraphMode(WIN_X, WIN_Y, 32); //ウィンドウの解像度
    SetBackgroundColor(255, 255, 255); //ウィンドウの背景色
    SetDrawScreen(DX_SCREEN_BACK); //裏画面描画

    while (ScreenFlip() == 0 &&
        ClearDrawScreen &&
        ProcessMessage() == 0
        )
    {
        
    }

    WaitKey();
    DxLib_End();
    return 0;
}

 これで、DxLibでウィンドウを表示することができます。

 

 Window初期化の部分は、コピーでいいです。

 #defineで定義したWIN_XとWIN_Yはウィンドウ解像度なので自由に変えてもらって大丈夫です。

画像の読み込み

 次にゲームで使う画像を読み込んでいきます。読み込む画像は敵キャラとプレイキャラとマップチップです。

↑スライム

↑スライムベス

↑主人公

↑マップチップ

↑角の隙間を埋める草

↑川に面した草

↑川に面した草2

 これらを読み込み、画像をDxLibで分割して、画面に表示します。では、画像を読み込むコードを書いていきましょう。

 新しくPicture.hというファイルを生成します。

#pragma once
/* Picture.h */
class PICTURE
{
public:
	int Map[16];
	int Grace_River[4];
	int Grace_River2[4];
	int Fill_Grace[4];
	int Player[12];
	int Slime[2];
	int SlimeBeth[2];

	void Load()
	{
		LoadDivGraph("Picture/Maps/MapChip.png", 16, 4, 4, 16, 16, Map); //マップ読み込み
		LoadDivGraph("Picture/Maps/grass_near_river.png", 4, 2, 2, 16, 16, Grace_River);
		LoadDivGraph("Picture/Maps/grass_near_river2.png", 4, 2, 2, 16, 16, Grace_River2);
		LoadDivGraph("Picture/Maps/Fill_grass.png", 4, 2, 2, 16, 16, Fill_Grace);
		LoadDivGraph("Picture/Players/Player.png", 12, 1, 12, 16, 16, Player);
		LoadDivGraph("Picture/Enemys/Slime.png", 2, 2, 1, 16, 16, Slime);
		LoadDivGraph("Picture/Enemys/SlimeBeth.png", 2, 2, 1, 16, 16, SlimeBeth);
	};

private:

};

PICTURE Picture;

 Picture.hにPICTUREクラスを追加し、画像を読み込むLoadメンバ関数を作ります。

 LoadDivGraph関数は画像を分割して、保存する関数です。

 LoadDivGraph(パス, 分割数, 横分割数, 縦分割数, 横サイズ, 縦サイズ, 保存するint型配列);

https://dxlib.xsrv.jp/function/dxfunc_graph1.html#R3N3

 よく使うのでリファレンスを確認しておくとよいです。

 上のコードをMain.cppにインクルードし、Load関数を実行すれば画像の読み込み完成です。

画像の表示

 では、読み込んだ画像を表示してみましょう。表示するには、Main関数に少し付け足します。

#define WIN_X (256)
#define WIN_Y (224)

#include <DxLib.h>
#include "Picture.h"

int WINAPI WinMain(
    _In_ HINSTANCE hInstance,
    _In_opt_ HINSTANCE hPrevInstance,
    _In_ LPSTR IpCmdLine,
    _In_ int nShowCmd)
{
    ChangeWindowMode(TRUE);
    DxLib_Init();

    /*Window初期化*/
    SetWindowText("DRAGON QUEST"); //ウィンドウのタイトル
    SetGraphMode(WIN_X, WIN_Y, 32); //ウィンドウの解像度
    SetBackgroundColor(255, 255, 255); //ウィンドウの背景色
    SetDrawScreen(DX_SCREEN_BACK); //裏画面描画

    Picture.Load();

    while (ScreenFlip() == 0 &&
        ClearDrawScreen &&
        ProcessMessage() == 0
        )
    {
        DrawGraph(0, 0, Picture.Player[0], TRUE);
    }

    WaitKey();
    DxLib_End();
    return 0;
}

 DrawGraph関数は画像を表示する関数です。使用は以下の通りです。

 DrawGraph(表示するx座標, 表示するy座標, “表示する画像のパス”,TRUE);

https://dxlib.xsrv.jp/function/dxfunc_graph1.html#R3N7

 こちらもよく使う関数なのでより詳しく知りたい方は、リファレンスを確認するとよいと思います。

 実行すると無事表示されました

 これで、画像を表示することができます。

まとめ

 第一回では、ウィンドウの表示と画像の読み込み・表示をしてみました。次回は、マップを表示していきます。

 最後まで読んで頂き、ありがとうございました。ツイッターもやっているので確認して見て下さい。

 次回はこちら

コメント

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