0.はじめに
そうだ、C++でゲームを作ろう。どうせなら勉強になりそうだし、3Dゲームを作ろう。
そう思い立ち、アウトプットをしながら進めるとモチベーションにもなるかと考え、記事を執筆する。
1.動作環境
- Windows11
- Visual Studio Community 2022 17.12.4
- DXライブラリ Windows版 VisualStudio( C++ )用(最新暫定版)
2.VisualStudioのインストール
- Visual Studio インストーラーをダウンロード
- 上記インストーラーに従い、インストール
3.DXライブラリのインストール
- DXライブラリのダウンロードページにて「DXライブラリ Windows版 VisualStudio( C++ )用」をダウンロード。
- ダウンロードしたzipを展開し、展開して作成された「DxLib_VC」を任意の場所に移動(私はCドライブ直下に配置)
※注意※
Visual Studio Community 2022 17.12.3Ver以上だと、DXライブラリをインクルードするとIntelliSenceが動作しないという不具合があるらしい。その場合は暫定最新版を使用する。以下のリンクから取得可能。
https://dxlib.xsrv.jp/cgi/patiobbs/patio.cgi?mode=view&no=5726
4.プロジェクトの作成
- Visual Studioを起動
- 「新しいプロジェクトの作成」押下
- 「空のプロジェクト」押下後、「次へ」を押下
- 任意の「プロジェクト名」、「場所」、「ソリューション名」を記入し、「作成」を押下
5.プロジェクトの設定
- 「ソリューションエクスプローラー」の「ソースファイル」を右クリックし、[追加][新しい項目]を選択し開く
Main.cppを作成する
- [構成プロパティ][C/C++][全般]の「追加のインクルードディレクトリ」に、DXライブラリのインクルードディレクトリパスを追加
※Cドライブ直下に展開した場合、C:\DxLib_VC\プロジェクトに追加すべきファイル_VC用
- [構成プロパティ][リンカー][全般]の「追加のライブラリディレクトリ」に、先ほどと同じDXライブラリのライブラリディレクトリパスを追加
- [構成プロパティ][リンカー][システム]の「サブシステム」を、Windows(/SUBSYSTEM:WINDOWS)に変更
6.動作確認
まずは設定用モジュールとして、ProjConf.hを作成する。
「ソリューションエクスプローラー」の「ヘッダーファイル」を右クリックし、[追加][新しい項目]を選択し、追加する。
ProjConf.hではウィンドウ設定の定数を定義。
#pragma once
/*** ウィンドウ設定 ***/
#define WIN_MAX_X 660 // ウィンドウの横幅
#define WIN_MAX_Y 450 // ウィンドウの縦幅
#define WIN_POS_X 0 // ウィンドウの初期位置X
#define WIN_POS_Y 0 // ウィンドウの初期位置Y
Main.cppは、
- メイン関数(wWinMain)
- ウィンドウの初期化
- メインループ処理(今は何もしない)
を実装する。
/*** Header File ***/
#include "DxLib.h"
#include "ProjConf.h"
int APIENTRY wWinMain(
_In_ HINSTANCE hInstance,
_In_opt_ HINSTANCE hPrevInstance,
_In_ LPWSTR ipCmdLine,
_In_ int nCmdShow)
{
ChangeWindowMode(TRUE); // ウィンドウモードで起動
if (DxLib_Init() == -1) // DXライブラリ初期化処理
{
return -1; // エラーが起きたら直ちに終了
}
/*** Window Init ***/
SetWindowText(L"TEST GAME"); // ウィンドウのタイトル
SetWindowInitPosition(WIN_POS_X, WIN_POS_Y); // ウィンドウの位置
SetGraphMode(WIN_MAX_X, WIN_MAX_Y, 32); // ウィンドウのサイズ
SetBackgroundColor(255, 255, 255); // ウィンドウの背景色
SetDrawScreen(DX_SCREEN_BACK); // 描画先画面を裏画面にする
SetAlwaysRunFlag(TRUE); // ウインドウ非アクティブ状態でも処理を続行する
/*** ループ処理 ***/
while (ScreenFlip() == 0 && // 裏画面の内容を表画面に反映
ClearDrawScreen() == 0 && // 画面を初期化
ProcessMessage() == 0) // ウインドウのメッセージを処理
{
/* 本処理 */
}
WaitKey();
DxLib_End(); // DXライブラリ使用の終了処理
return 0; // ソフトの終了
}
F5キーでビルドをして、ウィンドウが無事起動すればDXライブラリの導入に成功している。
7.さいごに
今回の記事では、とりあえずDXライブラリを導入してみた。次回から、本格的にゲーム制作に入っていきたい。
余談
WinAPIのエントリーポイントとしてWinMainとwWinMainが使用できるが、この二つの違いは文字列の扱いにある。前者はANSI文字列が、後者はUnicode文字列が引数として渡されるらしい。
Windowsが標準でUnicodeを使用するようになった現在ではwWinMainが推奨されているため、この記事ではwWinMainを使用した。
でもぶっちゃけどちらを使ってもあまり変わらないと思う(WinMainを使っている記事の方が多く見受けられるし)
8.参考にさせていただいた記事