今まで使ったDXライブラリ関数
更新日:2010/6/28

プログラミングの館へ戻る


ムンバが、今まで∩今後、参考にさせて頂いたサイトや本
自作のゲームで使用したDXライブラリの関数を乱列してくページです。

このページの、DXライブラリ関数の解説や参考ソース(改造箇所有り)は
ほぼ全て、DXライブラリの本家
DXライブラリ置き場 内の 関数リファレンスページ
の、ご解説(例文・ソース)を引用させて頂いてます。
また、各所で直接リンクを張らせて頂いてます。

たまに、ムンバのQ∩Aが入ったりして、ごちゃごちゃになると思いますので
最終的には、このページも信用しないで頂きたい方向で。^^;
何か、この辺違うんじゃね?とか、御座いましたら
ご一報、宜しくお願い致します〜!ぜひぜひ。(;≧□≦)

DXライブラリ分類順
(ひらがな順:例 3Dなら「す」で、DrawStringなら「ど」で)

DXライブラリ関数がする事順あいうえお順
(ひらがな順:例 3Dなら「す」で、DrawStringなら「ど」ですが
  関数がする事によって、多少前後する事があります。)


DXライブラリ関数アルファベット順
(数字・記号があれば最優先)


ムンバが自分勝手に理解したもので、全く信用できませんが
ほとんどの解説は、他サイトや購入した本の内容を引用させて頂いてます。
ので、もし差し障りあれば、ご一報お願い致します。

引用させて頂いた文章や例文、ソースに関しての詳細は
各サイトや本の規約を厳守下さい。


・サイト内の一部の転載・引用に関して、許可されてると思われるサイト
 (もしも私の思い違いで不許可でしたら、お手数ですがご一報下さい。)

 DXライブラリ置き場 内の DXライブラリ 関数リファレンスページ

 C言語何でも質問サイト 〜疑問・宿題解決します〜 内の 
  C言語〜ゲームプログラミングの館〜 [DXライブラリ]

・転載・引用に関して、許可が必要なサイト

 今現在搭載無し

・転載・引用に関して、許可が必要かどうか自己判断できないサイトや本
 (不許可でしたら、事後処理となります事ご勘弁下さい。
  お手数ですが、不許可の趣旨、ご一報宜しくお願い致します。)

・DXライブラリ関連で購入した本

 本:14歳からはじめる C言語オンラインゲーム プログラミング教室(著者:大槻有一郎) 

TOP
プログラミングの館へ戻る

分類順
(ひらがな順:例 3Dなら「す」で、DrawStringなら「ど」で、関数により多少前後あり)

分類 関数がする事 DXライブラリ関数 ご解説・サンプルソースなど
        
ウェイト関係の関数 キーの入力待ち Waitkey DXライブラリ置き場
ウィンドウモード関係 ウインドウモード・フルスクリーンモードの変更を行う ChangeWindowMode DXライブラリ置き場
キーボード入力関連関数 特定キーの入力状態を得る CheckHitKey DXライブラリ置き場
グラフィックデータ制御関数 画像ファイルをメモリに読み込む。及び動画ファイルのロード LoadGraph DXライブラリ置き場
グラフィックデータ制御関数 メモリに読みこんだグラフィックの描画 DrawGraph DXライブラリ置き場
使用必須関数 ライブラリの初期化 DxLib_Init DXライブラリ置き場
使用必須関数 ライブラリ使用の終了関数 DXLib_End DXライブラリ置き場
使用必須関数 ウインドウズのメッセージを処理する ProcessMessage DXライブラリ置き場
時間関係の関数 ミリ秒単位の精度を持つカウンタの現在値を得る GetNowCount DXライブラリ置き場
図形描画関数 点を描画する DrawPixel DXライブラリ置き場
図形描画関数 線を描画する DrawLine DXライブラリ置き場
図形描画関数 四角を描画 DrawBox DXライブラリ置き場
その他画面操作系関数 描画先グラフィック領域の指定 SetDrawScreen DXライブラリ置き場
その他画面操作系関数 画面に描かれたものを消去する ClearDrawScreen DXライブラリ置き場
その他画面操作系関数 色コードを取得する GetColor DXライブラリ置き場
その他画面操作系関数 (フリップ関数)画面の裏ページ(普段は表示されていない)
の内容を表ページ(普段表示されている)に反映する
ScreenFlip DXライブラリ置き場
入力関係の関数
 ジョイパッド入力関連関数
ジョイパッドの入力状態を得る GetJoypadInputState DXライブラリ置き場
プログラム開始 メイン関数 WINAPI WinMain DXライブラリ置き場
文字描画関係関数 書式付き文字列を描画する DrawFormatString DXライブラリ置き場
文字描画関係関数 文字列を描画する DrawString DXライブラリ置き場

TOP
プログラミングの館へ戻る


関数がする事順
(ひらがな順:例 3Dなら「す」で、DrawStringなら「ど」で、関数により多少前後あり)

関数がする事 分類 DXライブラリ関数 ご解説・サンプルソースなど
       
色コードを取得する その他画面操作系関数 GetColor DXライブラリ置き場
ウインドウズのメッセージを処理する 使用必須関数 ProcessMessage DXライブラリ置き場
ウインドウモード・フルスクリーンモードの変更を行う ウィンドウモード関係 ChangeWindowMode DXライブラリ置き場
画像ファイルをメモリに読み込む。及び動画ファイルのロード グラフィックデータ制御関数 LoadGraph DXライブラリ置き場
画面に描かれたものを消去する その他画面操作系関数 ClearDrawScreen DXライブラリ置き場
(フリップ関数)画面の裏ページ(普段は表示されていない)
の内容を表ページ(普段表示されている)に反映する
その他画面操作系関数 ScreenFlip DXライブラリ置き場
キーの入力待ち ウェイト関係の関数 Waitkey DXライブラリ置き場
四角を描画 図形描画関数 DrawBox DXライブラリ置き場
書式付き文字列を描画する 文字描画関係関数 DrawFormatString DXライブラリ置き場
ジョイパッドの入力状態を得る 入力関係の関数
 ジョイパッド入力関連関数
GetJoypadInputState DXライブラリ置き場
線を描画する 図形描画関数 DrawLine DXライブラリ置き場
点を描画する 図形描画関数 DrawPixel DXライブラリ置き場
特定キーの入力状態を得る キーボード入力関連関数 CheckHitKey DXライブラリ置き場
描画先グラフィック領域の指定 その他画面操作系関数 SetDrawScreen DXライブラリ置き場
ミリ秒単位の精度を持つカウンタの現在値を得る 時間関係の関数 GetNowCount DXライブラリ置き場
メイン関数 プログラム開始 WINAPI WinMain DXライブラリ置き場
メモリに読みこんだグラフィックの描画 グラフィックデータ制御関数 DrawGraph DXライブラリ置き場
文字列を描画する 文字描画関係関数 DrawString DXライブラリ置き場
ライブラリの初期化 使用必須関数 DxLib_Init DXライブラリ置き場
ライブラリ使用の終了関数 使用必須関数 DXLib_End DXライブラリ置き場

TOP
プログラミングの館へ戻る

関数アルファベット順
(数字・記号があれば最優先)

DXライブラリ関数 分類 関数がする事 ご解説・サンプルソースなど
       
ChangeWindowMode ウィンドウモード関係 ウインドウモード・フルスクリーンモードの変更を行う DXライブラリ置き場
CheckHitKey キーボード入力関連関数 特定キーの入力状態を得る DXライブラリ置き場
ClearDrawScreen その他画面操作系関数 画面に描かれたものを消去する DXライブラリ置き場
DrawBox 図形描画関数 四角を描画 DXライブラリ置き場
DrawFormatString 文字描画関係関数 書式付き文字列を描画する DXライブラリ置き場
DrawGraph グラフィックデータ制御関数 メモリに読みこんだグラフィックの描画 DXライブラリ置き場
DrawLine 図形描画関数 線を描画する DXライブラリ置き場
DrawPixel 図形描画関数 点を描画する DXライブラリ置き場
DrawString 文字描画関係関数 文字列を描画する DXライブラリ置き場
DXLib_End 使用必須関数 ライブラリ使用の終了関数 DXライブラリ置き場
DxLib_Init 使用必須関数 ライブラリの初期化 DXライブラリ置き場
GetColor その他画面操作系関数 色コードを取得する DXライブラリ置き場
GetJoypadInputState 入力関係の関数
 ジョイパッド入力関連関数
ジョイパッドの入力状態を得る DXライブラリ置き場
GetNowCount 時間関係の関数 ミリ秒単位の精度を持つカウンタの現在値を得る DXライブラリ置き場
LoadGraph グラフィックデータ制御関数 画像ファイルをメモリに読み込む。及び動画ファイルのロード DXライブラリ置き場
ProcessMessage 使用必須関数 ウインドウズのメッセージを処理する DXライブラリ置き場
ScreenFlip その他画面操作系関数 (フリップ関数)画面の裏ページ(普段は表示されていない)
の内容を表ページ(普段表示されている)に反映する
DXライブラリ置き場
SetDrawScreen その他画面操作系関数 描画先グラフィック領域の指定 DXライブラリ置き場
Waitkey ウェイト関係の関数 キーの入力待ち DXライブラリ置き場
WINAPI WinMain プログラム開始 メイン関数 DXライブラリ置き場

TOP
プログラミングの館へ戻る


ChangeWindowMode

ChangeWindowMode(TRUE);

ウインドウモードかフルスクリーンモードかの設定。
DXライブラリの初期化をする前にコード記入。

TRUE:ウインドモードで起動
FALSE:フルスクリーンモードで起動(デフォルト)

DXライブラリ置き場

TOP

プログラミングの館

CheckHitKey

引数 KeyCode:入力状態を取得するキーコード
戻り値 1:押されている
  0:押されていない
解説 特定のキーの入力状態を得る。
例えば『I』キーの入力状態を調べたい場合は CheckHitKey( KEY_INPUT_I ) として関数を呼び出す。
KEY_INPUT_I は、マクロを使用して定義したもので
全てのキーに対して、この様な選別子が定義される。
それを以下に記す。

DXライブラリ置き場
(↑本家リファレンス引用)

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
	int color_white;

	ChangeWindowMode(TRUE);
	
	if(DxLib_Init() == -1)
		return -1;
	
	color_white = GetColor(255, 255, 255);

	while(CheckHitKey(KEY_INPUT_ESCAPE) == 0) //Escキーを押すとループを抜けて終了
	{
		if(ProcessMessage() == -1) //メッセージ処理
			break; //エラーが発生したらループを抜ける
		
		DrawBox(240, 180, 350, 300, color_white, TRUE);
	}
	
	DxLib_End();
	
	return 0;
}

DXライブラリ置き場

TOP

プログラミングの館

ClearDrawScreen

・描画に描かれたものを消去する

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int)
{
        ChangeWindowMode(TRUE);
        if( DxLib_Init() == -1 ) return -1;
        
        int gazou001 = LoadGraph("abc.bmp");
        
        SetDrawScreen(DX_SCREEN_BACK); //裏画面を描画対称にする
        
        for(int x = 0; x < 320; x++)
        {
                ClearDrawScreen(); //画面消去 //ClsDrawScreen();←過去
                DrawGraph(x, 224, gazou001, TRUE);
                
                ScreenFlip(); //画面入れ替え
        }
        
        WaitKey();

        DxLib_End();

        return 0;
}
本家更新履歴(2006/3/11)DXライブラリバージョン2.21aより < 「つうこうにん」さんから情報頂きました。
ClsDrawScreen(); → ClearDrawScreen();
に変更。

各種描画関数で描画したグラフィックを、すべて消し画面を初期化する。

DXライブラリ置き場

TOP

プログラミングの館

DrawBox

DrawBox(x座標開始位置, y座標開始位置, x座標終了位置, y座標終了位置, 予め用意した色指定した変数, TRUE);

TRUE:四角の中を塗りつぶす。
FALSE:四角の中を塗りつぶさない。(枠だけ表示)

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
	int color; //型宣言
	
	ChangeWindowMode(TRUE); //TRUE:ウインドモード・FALSE:フルスクリーンモード(デフォルト)
	
	if(DxLib_Init() == -1) //DXライブラリ初期化処理
		return -1; //エラーが起きたら直ちに終了 {}略
	
	color = GetColor(0, 0, 255); //RGB
	
	DrawBox(0, 0, 64, 48, color, TRUE); //TRUE:四角の中を塗りつぶす・FALSE:四角の中を塗りつぶさない
	
	WaitKey(); //キーの入力待ち
	
	DxLib_End(); //DXライブラリ使用の終了処理
	
	return 0; //メイン関数終了
}

DXライブラリ置き場

TOP

プログラミングの館

DrawFormatString

・書式付き文字列を描画する

宣言 int DrawFormatString( int x , int y , int Color , char *FormatString , ... ) ;
概略 書式付き文字列を描画する
引数 int x , y : 文字列を描画する起点座標
int Color : 描画する文字列の色
char *FormatString : 描画したい書式付き文字列のアドレス
... : 書式付き文字列に付随する引数
戻り値 0:成功
  −1:エラー発生
解説 printf 関数は、DXライブラリを含む DirectX を使う環境では
printf 関数は使う事が出来無い。
そこで登場するのが、この DrawFormatString 関数。
この関数は printf と違い描画する座標や色を指定するという違いはあるものの
ほぼ printf と同じ機能を提供する。
↑DXライブラリ本家より引用 DXライブラリ置き場


//DX_try001.cpp

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        ChangeWindowMode(TRUE);

        if(DxLib_Init() == -1)
                return -1;

        int white = GetColor(255, 255, 255) ; //白色の値を取得し変数に代入
        int red = GetColor(255, 0, 0) ; //赤色の値を取得し変数に代入
        int green = GetColor(0, 255, 0) ; //緑色の値を取得し変数に代入
        int blue = GetColor(0, 0, 255) ; //青色の値を取得し変数に代入

        char *moji_iro[] = {"白い文字","赤い文字","緑の文字","青い文字","NULL"};
        
        while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) //Escキーが押されたらループを抜ける
        {        //文字列表示
                DrawFormatString(10, 10, white, "%s", moji_iro[0]);

                DrawFormatString(30, 40, red, "%s", moji_iro[1]);

                DrawFormatString(50, 70, green, "%s", moji_iro[2]);

                DrawFormatString(70, 100, blue, "%s", moji_iro[3]);
        }

        DxLib_End();

        return 0;
}


↓DXライブラリ本家より引用
DXライブラリ置き場
流石に \t や \n のエスケープシーケンスを表現することは出来ませんが
普通に使う分には問題無いはずです。
なお、肝心の書式の指定方法ですが、かなり複雑で説明が大変なので
詳しくはC言語のヘルプを参照して下さい。
主な例を次に記載しておきますので、参考にしてください。

文字列を描画する例

	char String[ 100 ] ;
	strcpy( String , "曇り" ) ;
	DrawFormatString( 0, 0, Color, "今日の天気は %s です", String ) ;

int 型整数値を描画する例

	DrawFormatString( 0, 0, Color, "タイム %d  速度 %d ", t, s ) ;

double 型浮動小数点数値を描画する例

	DrawFormatString( 0, 0, Color, "倍率 %f ",r ) ;

double 型浮動小数点数値を少数第三位まで描画する例

	DrawFormatString( 0, 0, Color, "倍率 %.3f ",r ) ;

int 型整数値と double 型浮動小数点数値と文字列を描画する例

	char String[ 100 ] ;
	strcpy( String , "城北" ) ;
	DrawFormatString( 0, 0, Color,
		 "%s 高等学校 出願者数 %d人  倍率 %.3f ",s ,n ,r ) ;

なお、文章の量を抑えるために Color は常に Color = GetColor( 255 , 255 , 255 ) ; が
代入されているものとします。
↑DXライブラリ本家より引用

DXライブラリ置き場

TOP

プログラミングの館

DrawGraph

・メモリに読みこんだグラフィックの描画。
・LoadDivGraph・LoadGraph・MakeGraph等で読みこんだ(作成した) グラフィックを
 ( x , y )を描画する画像の左上を頂点として描画する。

DrawGraph(画像表示を開始したい左上の x座標, 画像表示を開始したい左上の y座標, gazou001, TRUE);


#include "DxLib.h" //DXライブラリのヘッダファイルの取り込み int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int) //アプリケーションの開始 { ChangeWindowMode(TRUE); //画面モード変更関数・TRUE:ウインドモード FALSE:フルスクリーンモード if( DxLib_Init() == -1 ) return -1; //DXライブラリの初期化関数 int gazou001; gazou001 = LoadGraph("media/f-player.bmp"); //画像を読み込む関数 DrawGraph(296, 224, gazou001, TRUE); //画像を表示する関数 WaitKey(); //何かキーが押されるまでプログラムを一時停止する関数 DxLib_End(); //DXライブラリを終了する関数 return 0; //プログラムを終了 }

この例の場合、LoadGraph関数で読み込んだ画像(ファイルハンドル)を、変数 gazou001に代入し
DrawGraph関数で、表示したい画像の左上の頂点の x座標(296) y座標(224)を指定して
変数 gazou001を、透過色を有効にするかどうか、TLUE・透過有効(FALSE・透過無効)
を指定して、画像を表示する。

透過色の設定

TLUE:透過色を有効にする。
FALSE:透過色を無効にする。

DXライブラリ置き場

TOP

プログラミングの館

DrawLine

・線を描画する

宣言 int DrawLine( int x1, int y1, int x2, int y2, int Color) ;
概略 線を描画
引数 x1 , y1 :描画する線の起点座標
x2 , y2 :描画する線の終点座標
Color :描く線の色
戻り値 0:成功
  -1:エラー発生
解説 画面上に点( x1 , y1 )と点( x2 , y2 )を結ぶ線を
Color で指定した色で描く。
(終端座標は描かれないので、実際には
 描き切りたい座標+1の値を指定する必要がある。)
パソコン画面は、一般に画面左上が座標( 0 , 0 )で
画面左から右に向かう方向が x のプラス方向の 画面
上から下に向かう方向が y の プラス方向となる。
そして標準では画面の右端の x 座標値は 639
画面最下の y 座標は 479 となる。
この最大値は関数『SetGraphMode』 (工事中)によって変更する事が出来る。

Colorの値は画面の色の表現できる色の数によって変わってくる。
この色の値はライブラリの関数『GetColor』(工事中)を使って
取得する事を、お勧めする。

(注) なおこの関数は±1ドットの単位で描画位置に誤差が生じる。
   その誤差は、グラフィックボードの機種
   描く線の方向、長さによって様々なのでライブラリ側での
   補正は行っていないので、ご了承下さい。
   3D機能を使っていない場合は、正しく描画される。
   3D機能を使わない方法については
   『SetUse3DFlag』関数(工事中)を参照。
↑DXライブラリ本家より引用 DXライブラリ置き場

//DX_try001.cpp

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
	int color_red	= GetColor(255, 0, 0);		//赤色
	int color_green	= GetColor(0, 255, 0);		//緑色
	int color_blue	= GetColor(0, 0, 255);		//青色
	int color_white	= GetColor(255, 255, 255);	//白色

	ChangeWindowMode(TRUE);
	
	if(DxLib_Init() == -1)
		return -1;

	while(CheckHitKey(KEY_INPUT_ESCAPE) == 0) //Escキーを押すとループを抜けて終了
	{
		if(ProcessMessage() == -1) //メッセージ処理
			break; //エラーが発生したらループを抜ける
		
		DrawString(20, 50, "DrawLine関数で線を描画", color_white); //文字列を描画
		
		DrawLine(50, 100, 250, 100, color_blue);	//横線を描画
		DrawLine(150, 200, 350, 200, color_white);	//横線を描画
		DrawLine(30, 120, 30, 350, color_green);	//縦線を描画
		DrawLine(90, 250, 125, 350, color_red);		//斜線を描画
	}
	
	DxLib_End();
	
	return 0;
}

DXライブラリ置き場

TOP

プログラミングの館

DrawPixel

・点を描画する

DrawPixel(x座標, y座標, 点の色);

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        int color_white;

        ChangeWindowMode(TRUE);
        
        if(DxLib_Init() == -1)
                return -1;
        
        color_white = GetColor(255, 255, 255); //GetColor関数で取得したRGB(白色)に指定、変数に代入
        
        DrawPixel(320, 240, color_white); //(白色の)点をピクセル表示

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

DXライブラリ置き場

TOP

プログラミングの館

DrawString

・文字列を描画する

宣言 int DrawString( int x , int y , char *String , int Color ) ;
概略 文字列を描画する
引数 x , y :文字列を描画する領域の左上の座標
String :描画する文字列のポインタ
Color :描画する文字列の色
戻り値 0:成功
  −1:エラー発生
解説 ( x , y )が示す座標にStringポインタが示している文字列を Color色で描画する。
(パソコン画面上での座標のとり方、色の指定方法は DrawLine の解説を参照。)
↑DXライブラリ本家より引用 DXライブラリ置き場

//DX_try001.cpp

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
	int color_white;

	ChangeWindowMode(TRUE);
	
	if(DxLib_Init() == -1)
		return -1;
	
	color_white = GetColor(255, 255, 255);

	while(CheckHitKey(KEY_INPUT_ESCAPE) == 0) //Escキーを押すとループを抜けて終了
	{
		if(ProcessMessage() == -1) //メッセージ処理
			break; //エラーが発生したらループを抜ける
		
		DrawString(20, 50, "DrawString関数での表示", color_white);
	}
	
	DxLib_End();
	
	return 0;
}

DXライブラリ置き場

TOP

プログラミングの館

DXLib_End

DXライブラリが使用していたメモリ領域を開放し、ウィンドウを閉じる。

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
	ChangeWindowMode(TRUE); //TRUE:ウインドモード・FALSE:フルスクリーンモード(デフォルト)
	
	if(DxLib_Init() == -1) //DXライブラリ初期化処理
		return -1; //エラーが起きたら直ちに終了 {}略
	
	WaitKey(); //キーの入力待ち
	
	DxLib_End(); //DXライブラリ使用の終了処理
	
	return 0; //メイン関数終了
}

DXライブラリの使用を終了する関数。
DXライブラリを使用しているソフトは、全てのソフトを終了させる前に、この関数を呼ぶ必要がある。
同時に、DXライブラリはソフトのウインドウの制御も してるので
この関数を呼び出した後は、なるべくすぐに、プログラムを終了させなければならない。

↑、↓サイト内引用

DXライブラリ置き場

TOP

プログラミングの館

DxLib_Init

if( DxLib_Init() == -1 ) return -1;

DXライブラリの初期化

戻り値 0:成功 -1:エラー発生

DXライブラリを使用可能な状態に初期化する。
DXライブラリを使用するソフトウェアでは、メイン関数内で、最初に呼び出す必要がある。
この関数を使ってもし-1(エラー)が返ってきた場合は
直ちに ソフトを終了しなければならない。
この場合 return 0; で終了。

DXライブラリ置き場

TOP

プログラミングの館

GetColor

・色コードを取得する。

GetColor(R, G, B); 0〜255で指定。

R:255(他0)→赤
G:255(他0)→緑
B:255(他0)→青

RGB:全て0→黒
RGB:全て255→白

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        int color_white;

        ChangeWindowMode(TRUE);
        
        if(DxLib_Init() == -1)
                return -1;
        
        color_white = GetColor(0, 0, 255); //RGBで指定。変数color_whiteに代入。
        
        DrawBox(240, 180, 350, 300, color_white, TRUE);

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

引数 Red , Green , Blue : 取得したい色の各輝度値(0〜255)
戻り値 カラーコード
↑DXライブラリ本家より引用

DXライブラリ置き場

TOP

プログラミングの館

GetJoypadInputState

・ジョイパッドの入力状態を得る
・チェックできるキーの数は少ない。一部のキーの入力状態を得る。

宣言 int GetJoypadInputState( int InputType ) ;
概略 ジョイパッドの入力状態を得る
引数 InputType : 入力状態を取得するパッドの識別子
        DX_INPUT_KEY_PAD1  : キー入力とパッド1
        DX_INPUT_PAD1    : パッド1
        DX_INPUT_PAD2    : パッド2
        DX_INPUT_PAD3    : パッド3
        DX_INPUT_PAD4    : パッド4
        DX_INPUT_KEY     : キー入力
戻り値 パッドの入力状態
解説 指定した識別子のパッドの入力状態が返る。
入力状態取得タイプにキー入力とあるが
これは、パッドとキー入力を別々に取得するのは面倒かなと思いつけた機能。
DX_INPUT_KEY_PAD1 を指定すると
キー入力と(キー入力のパッド 入力の対応は以下の通り)パッド1の入力状態を得ることができる。
DX_INPUT_KEY は下記の対応表のキー入力部のみの入力状態を得る。
入力状態は int型データとして返り
次に示すパッドの入力マスクを戻り値とAND演算をして結果が0でなければ
そのボタンが押されている事を示す。
(ボタンの名称はマイクロソフトサイドワインダーゲームパッドに対応)

PAD_INPUT_DOWN  // ↓チェックマスク(下キー or テンキーの2キー)
PAD_INPUT_LEFT  // ←チェックマスク(左キー or テンキーの4キー)
PAD_INPUT_RIGHT  // →チェックマスク(右キー or テンキーの6キー)
PAD_INPUT_UP  // ↑チェックマスク(上キー or テンキーの8キー)
PAD_INPUT_A  // A(1)ボタンチェックマスク(Zキー)
PAD_INPUT_B  // B(2)ボタンチェックマスク(Xキー)
PAD_INPUT_C  // C(3)ボタンチェックマスク(Cキー)
PAD_INPUT_X  // X(4)ボタンチェックマスク(Aキー)
PAD_INPUT_Y  // Y(5)ボタンチェックマスク(Sキー)
PAD_INPUT_Z  // Z(6)ボタンチェックマスク(Dキー)
PAD_INPUT_L  // L(7)ボタンチェックマスク(Qキー)
PAD_INPUT_R  // R(8)ボタンチェックマスク(Wキー)
PAD_INPUT_START  // STARTボタンチェックマスク(ESCキー)
PAD_INPUT_M  // Mボタンチェックマスク(スペースキー)
↑DXライブラリ本家より引用

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int)
{
        ChangeWindowMode(TRUE);
        if( DxLib_Init() == -1 ) return -1;
        
        int gazou = LoadGraph("abc.bmp");
        
        int x = 240, y = 180;
        
        SetDrawScreen(DX_SCREEN_BACK);

        while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) //Escキーが押されたら終了
        {
                ClearDrawScreen();

                //自キャラ移動
                int key = GetJoypadInputState(DX_INPUT_KEY_PAD1); //キーとPAD1のチェック

                if(key & PAD_INPUT_UP)          y -= 4;
                if(key & PAD_INPUT_DOWN)        y += 4;
                if(key & PAD_INPUT_LEFT)        x -= 4;
                if(key & PAD_INPUT_RIGHT)       x += 4;
                
                DrawGraph(x, y, gazou, TRUE);
        
                ScreenFlip();
        }

        DxLib_End();

        return 0;
}

↓枠内、14歳〜オンラインゲーム〜内、引用
もし複数のキーが同時に押された場合、GetJoypadInputState関数は
押されたキーを表す定数を合計した数値を返す。

例えば、←キーと↑キーが同時に押された場合
PAD_INPUT_LEFT(実体は整数の2)とPAD_INPUT_UP(整数の8)の合計、つまり 10 が返される。
キーを表す定数には2進数で表すと、ビットが重ならない数値が割り当てられているので
合計してもキーを表すビットの状態は変わらない。

←キーと↑キーの同時押し
  0000 0010(2)
+0000 1000(8)
 ↓
  0000 1010(10)

↑キーと→キーの同時押し
  0000 1000(8)
+0000 0100(4)
 ↓
  0000 1100(12)

この値から押されたキーを調べる場合、単純な == を使った条件式は使えない。
ビット単位の計算を行う、ビット演算子を使う必要がある。
ビット演算子には、両方のビットが1の時に1にする &演算子や
どちらかが1の時に1にする | 演算子などがあり、この場合に使うのは & 演算子を使う。
& 演算子を使った計算は次の様になる。
 (↓表示の都合上、全角)

  0000 1100(12)
&0000 1000(8)
 ↓
  0000 1000(8)

  0000 1100(10)
&0000 0100(4)
 ↓
  0000 0100(4)

 0000 1100(10)
&0000 0010(2)
 ↓
  0000 0100(0)

↑目的のボタンが押されている場合は、掛け合わせた定数と同じ数値が
押されていない場合は、0が返される。

& より == の方が優先順位が高いため
if文中の条件式では () を使って順位を調整しないと、正しい結果が得られない。

if ( (key & PAD_INPUT_DOWN) == PAD_INPUT_DOWN) ・・・・

↑&演算子の計算結果は、押されていない場合は 0
 押されている場合は 0以外の数値を返すので

if (key & PAD_INPUT_DOWN) ・・・・

の様に書く事ができる。

DXライブラリ置き場

TOP

プログラミングの館

GetNowCount

宣言 int GetNowCount( void ) ;
概略 ミリ秒単位の精度を持つカウンタの現在値を得る
引数 なし
戻り値 Windowsが起動してから経過時間をミリ秒単位であらわした値
解説 すぐ上に書いてあるが
Windowsが起動してから経過時間をミリ秒単位で表した値が返ってくる。
この関数の存在意義は、時間の計測にある。
特定の時間を取得する事は この関数では出来ない。
↑DXライブラリ本家より引用

Win_sTime = GetNowCount();
の様に、変数に代入するだけ。

//DX_try001.cpp

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        ChangeWindowMode(TRUE);

        if(DxLib_Init() == -1)
                return -1;

        int Win_sTime;
        int white = GetColor(255, 255, 255) ; //白色の値を取得し変数に代入
        
        Win_sTime = GetNowCount(); //Windowsを立ち上げてからの現在までの経過時間を得る
        
        while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) //Escキーでループを抜ける
        {        //文字列表示
                DrawFormatString(10, 10, white, "Windowsを立ち上げてからの時間(ミリ秒):%dミリ秒経過"
                        ,Win_sTime);

                DrawFormatString(10, 40, white, "Windowsを立ち上げてからの時間(秒 :%d秒経過"
                        ,Win_sTime / 1000);

                DrawFormatString(10, 70, white, "Windowsを立ち上げてからの時間(分):%d分経過"
                        ,Win_sTime / 60000);

                DrawFormatString(10, 100, white, "Windowsを立ち上げてからの時間(時):%d時間経過"
                        ,Win_sTime / 3600000);
        }

        DxLib_End();

        return 0;
}

DXライブラリ置き場

TOP

プログラミングの館

LoadGraph

画像ファイルのメモリへの読みこみ、及び動画ファイルのロード。
画像をメモリに読み込む関数。
画像ファイルをメモリにロードする関数。

LoadGraph("ファイル名"); ←画像ファイルが、実行ファイルと同じディレクトリにある場合
LoadGraph("ファイルまでのパス / ファイル名"); ←その他の場所にある場合
など。

#include "DxLib.h" //DXライブラリのヘッダファイルの取り込み

int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int) //アプリケーションの開始
{
        ChangeWindowMode(TRUE); //画面モード変更関数・TRUE:ウインドモード FALSE:フルスクリーンモード

        if( DxLib_Init() == -1 ) return -1; //DXライブラリの初期化関数

        int gazou001;
        
        gazou001 = LoadGraph("media\\f-player.bmp"); //画像を読み込む関数
        DrawGraph(296, 224, gazou001, TRUE); //画像を表示する関数

        WaitKey(); //何かキーが押されるまでプログラムを一時停止する関数

        DxLib_End(); //DXライブラリを終了する関数

        return 0; //プログラムを終了
}      

この関数が成功すると、グラフィックハンドル(メモリに保存した int型の識別番号)を返す。
↑の例では、このグラフィックハンドルを、変数 gazou001に代入している。

media\\f-player.bmp と
media/f-player.bmp は、同じ意味?

DXライブラリ置き場

TOP

プログラミングの館

ProcessMessage

Windowsアプリケーションでは、一定期間ごとにOSから送られてくるメッセージを、処理しないといけない。
 という決まりがあるので
 メッセージを処理しない無限ループを作成してしまうと
 同時に動いてる他のアプリケーションとの連携がうまくいかなくなり
 様々なトラブルが起きる。
 DXライブラリでは ProcessMessage関数をループ中にはさむ事で、メッセージを処理する事ができる。

 この関数を全ての関数に入れる必要は無いが
 ScreenFlip関数 1回につき ProcessMessage関数を1回呼び出す様にする。<14歳〜オンライン〜

// 14歳・・・ mymain.cpp

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int)
{
        ChangeWindowMode(TRUE);
        if( DxLib_Init() == -1 ) return -1;
        
        int gazou001 = LoadGraph("abc.bmp");
        
        int x = 0;
        
        SetDrawScreen(DX_SCREEN_BACK);
        

        while(ProcessMessage() == 0 && CheckHitKey(KEY_INPUT_ESCAPE) == 0) //Escキーが押されたら終了
        {
                ClearDrawScreen();
                
                if(x <= 320) x = x + 2;
                
                DrawGraph(x, 224, gazou001, TRUE);
        
                ScreenFlip();
        }

        DxLib_End();

        return 0;
}

↓DXライブラリ本家のリファレンス ProcessMessage 引用
宣言 int ProcessMessage( void ) ;
概略 ウインドウのメッセージを処理する
引数 なし
戻り値  0:成功
  −1:エラー発生・若しくはウインドウが閉じられた
解説 この関数はWindows環境でのソフトプログラムに付きまとう メッセージループ処理を肩代わりしてくれる関数です。
この関数がなにをしているのか、というのは特に気にする 必要はありませんが
とにかく定期的にこの関数を呼び出して やる必要があります。
目安としては60分の1秒に一回程度、用はゲームのループに 一回程度です。
この関数を呼び出さないと結果としてシステムが 異常に重くなったり不安定になったりします。
あと、戻り値が-1( エラー発生・若しくはDXライブラリのウインドウが閉じられた )になったら
なるべく早めにDxLib_Endでライブラリ使用を終了し
同時にプログラムも終了する必要があります。
( そうしないとウインドウを閉じてもプロセスが残るという事態になります )
↑DXライブラリ本家のリファレンス ProcessMessage引用

DXライブラリ置き場

TOP

プログラミングの館

ScreenFlip

・裏ページの内容を表ページに反映する。
・プログラムの実行時、ディスプレイのリフレッシュレートにタイミングを合わせる。
 ただし、リフレッシュレートはPCやモニタの機種によって異なるため
 環境により、プログラムの実行速度が変わってしまう事がある。
 高リフレッシュレートの環境では、速度が上がり
 低リフレッシュレートの環境では、速度が下がる。<14歳〜
 (↑この問題を解決する方法があるらしいのだが、ムンバの勉強不足で保留∩工事中って事で。^^;)

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int)
{
        ChangeWindowMode(TRUE);
        if( DxLib_Init() == -1 ) return -1;
        
        int gazou001 = LoadGraph("abc.bmp");
        
        SetDrawScreen(DX_SCREEN_BACK); //裏画面を描画対称にする
        
        for(int x = 0; x < 320; x++)
        {
                ClearDrawScreen(); //画面消去
                DrawGraph(x, 224, gazou001, TRUE);
                
                ScreenFlip(); //画面入れ替え
        }
        
        WaitKey();

        DxLib_End();

        return 0;
}

裏ページ、表ページについては SetDrawScreen関数を参照。

注…この関数を使用した後の裏ページの内容は環境によって変わるので
ScreenFlip 関数を使用した後は ClearDrawScreen 等を使用して
裏ページを初期化する様にする。
<DXライブラリ本家引用

DXライブラリ置き場

TOP

プログラミングの館

SetDrawScreen

・描画する対象となるグラフィック領域を指定する。<DXライブラリ本家
・描画命令の対象の切り替え。<14歳〜

int SetDrawScreen(int DrawScreen);
SetDrawScreen(描画する対象となるグラフィック領域を指定)

SetDrawScreen(DX_SCREEN_FRONT) ; 表の画面(表示されている画面)
SetDrawScreen(DX_SCREEN_BACK) ; 裏の画面(表示されていない画面)

画面への描画中は見えないようにして、描画処理が終った後で見えるようにすれば
画面のちらつきは消えるはず。それを 実現するためにこの関数がある。
デフォルトでは描画先は DX_SCREEN_FRONT (表の画面)と なっていて
描画処理中も見えてしまい画面はちらつくが、 描画先を DX_SCREEN_BACK (裏の画面)を指定すると
描画先が 普段は見えない裏の画面に対して行われる。
描画が終った後で次に示す ScreenFlip関数 を呼び出せば
裏画面の内容が表画面に反映され、裏画面に描画していた内容が実際に表示される。
この関数は、その描画先をどちらの画面にするか、を指定する ための関数。<DXライブラリ本家引用

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE, HINSTANCE, LPSTR, int)
{
        ChangeWindowMode(TRUE);
    if( DxLib_Init() == -1 ) return -1;

    int gazou001 = LoadGraph("abc.bmp"); 
    
    SetDrawScreen(DX_SCREEN_BACK); //裏画面を描画対称にする

    for(int x = 0; x < 320; x++)
    {
        //ClsDrawScreen(); //画面消去
        ClearDrawScreen(); //画面消去
        DrawGraph(x, 224, gazou001, TRUE);

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

    WaitKey();

    DxLib_End();

    return 0;
}

DXライブラリ置き場

TOP

プログラミングの館

Waitkey

何かキーが押されるまで待つ関数。
何かキーが入力されるまで、プログラムを一時停止する関数。

#include "DxLib.h"

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int)
{
        ChangeWindowMode(TRUE); //TRUE:ウインドモード・FALSE:フルスクリーンモード(デフォルト)
        
        if(DxLib_Init() == -1) //DXライブラリ初期化処理
                return -1; //エラーが起きたら直ちに終了 {}略
        
        WaitKey(); //キーの入力待ち
        
        DxLib_End(); //DXライブラリ使用の終了処理
        
        return 0; //メイン関数終了
}

DXライブラリ置き場

TOP

プログラミングの館

WINAPI WinMain

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ){
}

int WINAPI WinMain( HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC){
}

コンソールアプリケーションは main関数から始まるが
Windowsアプリケーションは WinMainから始まる。
HINSTANCE や LPSTR などはマイクロソフトが定義した型名で、特に意識しないで、このまま使う。

何と〜っ!「C言語何でも質問サイト」で質問したところ、Justyさんと言う方が
DXライブラリでは、この4つの引数は使わないらしいので

int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) 

で、良いのではないか?との、ご意見伺いました。
試してみたら、今の所問題無し!www
Justyさん、貴重なご意見ありがとうございました。<(_ _)>

DXライブラリ置き場

TOP

プログラミングの館



TOP

プログラミングの館