今日の呟き

俺ライブラリ

アバター
V30
記事: 21
登録日時: 9年前
住所: 岡山県

俺ライブラリ

投稿記事 by V30 » 8年前

自作の『俺ライブラリ』があまりにも適当な作りだったので、2Dゲーム用にキレイに書き直す事にした。

自分の作るアプリはDirect2Dの機能で十分だから、今回はちょっとややこしいDirect3Dを使わない事にした。
子ウインドウ生成機能は取っ払うつもりだが、名残り惜しいので一つだけ作れるように一部保留してある。
文字列や画像の描画関数は、1から作り直したり、Dxライブラリに合わせて名前を変更中である。
DirectInputは、キーボードとジョイスティックは必須だが、マウスは本当に必要なのか疑問である。

現在のコードが整理できたら、あとはデバイス入力・サウンド・時間・乱数・FPS・ログ出力等の機能を追加する予定だ。
基本は前作をコピペするだけだから楽チンだが、定数・関数マクロや列挙体・便利な構造体も新たに分かりやすい名前
で作り直そうと考えているので、少し時間が掛かりそうだ。

ゲームを作るのは情熱が足りなくて疲れるが、こういう作業は好きだし楽しい!

CODE:

#pragma once

#include

#ifndef UNICODE
#define UNICODE
#endif

//******************************************************************************************************************
//Inline Functions
//******************************************************************************************************************

//クラスオブジェクト安全開放
template 
inline void		 SafeReleaseClassObject(TypeName *&object)
{
	if (object != NULL)
	{
		delete object;
		object = NULL;
	}
}

//UnKnown継承クラスオブジェクト安全開放
template 
inline void		 SafeReleaseUnknownObject(TypeName *&object)
{
	if (object != NULL)
	{
		object->Release();
		object = NULL;
	}
}

//******************************************************************************************************************
//Functions
//******************************************************************************************************************

//メッセージ表示
int	MessageW(LPCWSTR message, int code);

//******************************************************************************************************************
//Window
//******************************************************************************************************************

#define DXT_WINDOW_CLEAR_COLOR	 0x0U			//既定ウインドウクライアント領域消去カラー
#define DXT_WINDOW_CLEAR_ALPHA	   1.0F			//既定ウインドウクライアント領域消去カラー不透明度
#define DXT_WINDOW_LEFT			CW_USEDEFAULT	//既定ウインドウ描画座標[x]
#define DXT_WINDOW_TOP			CW_USEDEFAULT	//既定ウインドウ描画座標[y]
#define DXT_WINDOW_WIDTH		1280L			//既定ウインドウクライアント領域幅
#define DXT_WINDOW_HEIGHT		 720L			//既定ウインドウクライアント領域高さ

extern	WNDCLASS	t_parent_class;			//親ウインドウクラス構造体
extern	LPCWSTR		s_parent_class_name;	//親ウインドウクラス名
extern	HWND		p_parent_handle;		//親ウインドウハンドル
extern	RECT		t_parent_rect;			//親ウインドウクライアント領域座標
extern	SIZE		t_parent_size;			//親ウインドウクライアント領域サイズ
extern	FLOAT		f_parent_clear_alpha;	//親ウインドウ背景透過度
extern	LPCWSTR		s_parent_caption;		//親ウインドウキャプション
extern	UINT32		U_parent_clear_color;	//親ウインドウ消去カラー
extern	WNDCLASS	t_child_class;			//子ウインドウクラス構造体
extern	LPCWSTR		s_child_class_name;		//子ウインドウクラス名
extern	HWND		p_child_handle;			//子ウインドウハンドル
extern	RECT		t_child_rect;			//子ウインドウクライアント領域座標
extern	SIZE		t_child_size;			//子ウインドウクライアント領域サイズ
extern	FLOAT		f_child_clear_alpha;	//子ウインドウ背景透過度
extern	LPCWSTR		s_child_caption;		//子ウインドウキャプション
extern	UINT32		U_child_clear_color;	//子ウインドウ消去カラー
extern	HINSTANCE	p_instance_handle;		//アプリケーションインスタンス
extern	POINT		t_mouse_point;			//マウスカーソル座標
extern	MSG			t_window_message;		//ウインドウメッセージ
extern	BOOL		B_exit;					//アプリ終了フラグ
extern	LONG		L_loop_count;			//ループ数

//ウィンドウメッセージ処理
LRESULT CALLBACK WindowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam);

//親ウインドウ生成
HRESULT	CreateParentWindow(HINSTANCE hInst);

//子ウインドウ生成
HRESULT	CreateChildWindow(HINSTANCE hInst, WNDCLASS *windowclass, HWND *windowhandle);

//ウィンドウメッセージループ処理
BOOL	MessageProcess();

//******************************************************************************************************************
//COM
//******************************************************************************************************************

//COM初期化
HRESULT	InitializeCOM();

//COM終了処理
void	UninitializeCOM();

//******************************************************************************************************************
//WIC
//******************************************************************************************************************

#include 
#pragma comment(lib, "Windowscodecs.lib")

extern	IWICImagingFactory	*p_wic_factory;	//WICルートインターフェースポインタ

//WICルートインターフェース作成
HRESULT CreateWICImagingFactory();

//WICルートインターフェース開放
void	ReleaseWICImagingFactory();

//******************************************************************************************************************
//DirectWrite
//******************************************************************************************************************

#include 
#pragma comment(lib, "dwrite.lib")

#define DXT_FONT_DEFAULT							//既定フォント登録
#define DXT_FONT_ENTRY_MAX		20					//最大フォント登録数
#define DXT_FONT_NAME			L"MS ゴシック"		//既定フォント名
#define DXT_FONT_SIZE			20.0F				//既定フォントサイズ

//フォントデータ構造体
struct FontData
{
	int		handle;	//フォントハンドル
	LPCWSTR	name;	//フォント名
	int		size;	//フォントサイズ
};

extern	IDWriteFactory		*p_dwrite_factory;							//DWriteルートインターフェースポインタ
extern	IDWriteTextFormat	*p_dwrite_text_format[DXT_FONT_ENTRY_MAX];	//DWriteテキスト形式オブジェクトポインタ
extern	int					 i_dwrite_font_entry;						//フォント登録数

//DWriteルートインターフェース作成
HRESULT CreateDWriteFactory();

//テキスト形式登録
HRESULT	EntryDWriteTextFormat(int *handle = NULL, LPCWSTR fontname = DXT_FONT_NAME, FLOAT fontsize = DXT_FONT_SIZE);

//テキスト形式破棄
BOOL	DiscardDWriteTextFormat(int *fonthandle);

//テキスト形式破棄
BOOL	DiscardDWriteTextFormat(FontData *fd);

//テキスト形式登録
HRESULT	LoadTextFormatHandle(int *fonthandle, LPCWSTR fontname = DXT_FONT_NAME, int fontsize = (int)DXT_FONT_SIZE);

//テキスト形式登録
HRESULT	LoadTextFormatHandle(FontData *fd);

//DWriteインターフェース開放
void	ReleaseDWriteFactory();

//******************************************************************************************************************
//Direct2D
//******************************************************************************************************************

#include 
#pragma comment(lib, "d2d1.lib")

#define DXT_TEXT_ALIGN_LEFT			DWRITE_TEXT_ALIGNMENT_LEADING					//文字列左寄せ
#define DXT_TEXT_ALIGN_CENTER		DWRITE_TEXT_ALIGNMENT_CENTER					//文字列中央寄せ
#define DXT_TEXT_ALIGN_RIGHT		DWRITE_TEXT_ALIGNMENT_TRAILING					//文字列右寄せ
#define DXT_BITMAP_ENTRY_MAX		 100											//最大画像登録数
#define DXT_BITMAP_RESIZE_NEAREST	D2D1_BITMAP_INTERPOLATION_MODE_NEAREST_NEIGHBOR	//Nearest Neighbor
#define DXT_BITMAP_RESIZE_BYLINEAR	D2D1_BITMAP_INTERPOLATION_MODE_LINEAR			//Linear
#define DXT_RENDER_DPI				  96.F											//DPI

//画像データ構造体

extern	ID2D1Factory					*p_d2d1_factory;						//D2D1ルートインターフェースポインタ
extern	ID2D1HwndRenderTarget			*p_d2d1_render_target;					//D2D1ウインドウレンダーターゲットポインタ
extern	ID2D1Bitmap						*p_d2d1_bitmap[DXT_BITMAP_ENTRY_MAX];	//D2D1画像オブジェクトポインタ
extern	D2D1_BITMAP_INTERPOLATION_MODE	 e_d2d1_interpolation;					//画像リサイズ補間方法
extern	int								 i_d2d1_bitmap_entry;					//画像登録数

//D2D1ルートインターフェース作成
HRESULT CreateD2D1Factory();

//D2D1ウインドウレンダーターゲット作成
HRESULT CreateD2D1HwndRenderTarget(HWND *windowhandle);

//D2D1ルートインターフェース開放
void	ReleaseD2D1Factory();

//D2D1ウインドウレンダーターゲット開放
void	ReleaseD2D1HwndRenderTarget();

//D2D1画像オブジェクト開放
void	ReleaseD2D1BitmapObject();

//画像オブジェクト描画
HRESULT DrawBitmapObject(ID2D1Bitmap *bitmap, const D2D1_RECT_F* dst_rect = (const D2D1_RECT_F*)0, FLOAT alpha = 1.F, const D2D1_RECT_F* src_rect = (const D2D1_RECT_F*)0);

//画像オブジェクト描画
HRESULT DrawGraphF(FLOAT left, FLOAT top, int imagehandle, FLOAT alpha = 1.F);

//画像オブジェクト描画
HRESULT DrawGraph(int left, int top, int imagehandle, FLOAT alpha = 1.F);

//画像オブジェクト拡縮描画
HRESULT DrawExtendGraphF(FLOAT left, FLOAT top, int imagehandle, FLOAT extend = 1.F, FLOAT alpha = 1.F);

//画像オブジェクト拡縮描画
HRESULT DrawExtendGraph(int left, int top, int imagehandle, FLOAT extend = 1.F, FLOAT alpha = 1.F);

//画像オブジェクトブロック描画
HRESULT DrawRectGraphF(FLOAT left, FLOAT top, FLOAT src_x, FLOAT src_y, FLOAT width, FLOAT height, int imagehandle, FLOAT extend = 1.F, FLOAT alpha = 1.F);

//画像オブジェクトブロック描画
HRESULT DrawRectGraph(int left, int top, int src_x, int src_y, int width, int height, int imagehandle, FLOAT extend = 1.F, FLOAT alpha = 1.F);

//文字列描画[レイアウト文字数&D2D1カラーブラシ指定版]
HRESULT DrawString(FLOAT left, FLOAT top, FLOAT words, LPCWSTR text, ID2D1SolidColorBrush *d2d1brush, int fonthandle = 0, DWRITE_TEXT_ALIGNMENT alignment_x = DWRITE_TEXT_ALIGNMENT_JUSTIFIED, DWRITE_PARAGRAPH_ALIGNMENT alignment_y = DWRITE_PARAGRAPH_ALIGNMENT_CENTER);

//文字列描画[レイアウト文字数&UINT32カラー指定版]
HRESULT DrawString(FLOAT left, FLOAT top, FLOAT words, LPCWSTR text, UINT32 color = 0xffffffU, int fonthandle = 0, DWRITE_TEXT_ALIGNMENT alignment_x = DWRITE_TEXT_ALIGNMENT_JUSTIFIED, DWRITE_PARAGRAPH_ALIGNMENT alignment_y = DWRITE_PARAGRAPH_ALIGNMENT_CENTER);

//文字列描画[レイアウト文字数&D2D1KnownColor指定版]
HRESULT DrawString(FLOAT left, FLOAT top, FLOAT words, LPCWSTR text, D2D1::ColorF::Enum knowncolor, int fonthandle = 0, DWRITE_TEXT_ALIGNMENT alignment_x = DWRITE_TEXT_ALIGNMENT_JUSTIFIED, DWRITE_PARAGRAPH_ALIGNMENT alignment_y = DWRITE_PARAGRAPH_ALIGNMENT_CENTER);

//文字列描画[レイアウト文字数自動設定&UINT32カラー指定版]
HRESULT DrawString(FLOAT left, FLOAT top, LPCWSTR text, UINT32 color = 0xffffffU, int fonthandle = 0, DWRITE_TEXT_ALIGNMENT alignment_x = DWRITE_TEXT_ALIGNMENT_JUSTIFIED, DWRITE_PARAGRAPH_ALIGNMENT alignment_y = DWRITE_PARAGRAPH_ALIGNMENT_CENTER);

//整数値描画[レイアウト文字数&UINT32カラー指定版]
HRESULT DrawValue(FLOAT left, FLOAT top, FLOAT words, LONG value, UINT32 color = 0xffffffU, int fonthandle = 0, DWRITE_TEXT_ALIGNMENT alignment_x = DWRITE_TEXT_ALIGNMENT_JUSTIFIED, DWRITE_PARAGRAPH_ALIGNMENT alignment_y = DWRITE_PARAGRAPH_ALIGNMENT_CENTER);

//整数値描画[レイアウト文字数自動設定&UINT32カラー指定版]
HRESULT DrawValue(FLOAT left, FLOAT top, LONG value, UINT32 color = 0xffffffU, int fonthandle = 0, DWRITE_TEXT_ALIGNMENT alignment_x = DWRITE_TEXT_ALIGNMENT_JUSTIFIED, DWRITE_PARAGRAPH_ALIGNMENT alignment_y = DWRITE_PARAGRAPH_ALIGNMENT_CENTER);

//画像オブジェクト破棄
BOOL	DiscardBitmapObject(int *imagehandle);

//画像オブジェクト登録
HRESULT	EntryBitmapObject(LPCWSTR filename, int *imagehandle);

//画像オブジェクト縦サイズ参照
FLOAT	GetBitmapObjectHeight(int imagehandle);

//画像オブジェクトサイズ参照
D2D1_SIZE_F GetBitmapObjectSize(int imagehandle);

//画像オブジェクト横サイズ参照
FLOAT	GetBitmapObjectWidth(int imagehandle);

//画像サイズ計測
void	ScaleGraphSize(GraphData *object);

コメントはまだありません。