ChangeWindowMode(TRUE);
ウインドウモードかフルスクリーンモードかの設定。
DXライブラリの初期化をする前にコード記入。
TRUE:ウインドモードで起動
FALSE:フルスクリーンモードで起動(デフォルト)
DXライブラリ置き場
TOPへ
プログラミングの館へ
引数 |
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へ
プログラミングの館へ
・描画に描かれたものを消去する
#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(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へ
プログラミングの館へ
・書式付き文字列を描画する
宣言 |
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へ
プログラミングの館へ
・メモリに読みこんだグラフィックの描画。
・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へ
プログラミングの館へ
・線を描画する
宣言 |
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(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へ
プログラミングの館へ
・文字列を描画する
宣言 |
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へ
プログラミングの館へ
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へ
プログラミングの館へ
if( DxLib_Init() == -1 ) return -1;
DXライブラリの初期化
戻り値 0:成功 -1:エラー発生
DXライブラリを使用可能な状態に初期化する。
DXライブラリを使用するソフトウェアでは、メイン関数内で、最初に呼び出す必要がある。
この関数を使ってもし-1(エラー)が返ってきた場合は
直ちに ソフトを終了しなければならない。
この場合 return 0; で終了。
DXライブラリ置き場
TOPへ
プログラミングの館へ
・色コードを取得する。
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へ
プログラミングの館へ
・ジョイパッドの入力状態を得る
・チェックできるキーの数は少ない。一部のキーの入力状態を得る。
宣言 |
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へ
プログラミングの館へ
宣言 |
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("ファイルまでのパス / ファイル名"); ←その他の場所にある場合
など。
#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へ
プログラミングの館へ
・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へ
プログラミングの館へ
・裏ページの内容を表ページに反映する。
・プログラムの実行時、ディスプレイのリフレッシュレートにタイミングを合わせる。
ただし、リフレッシュレートは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へ
プログラミングの館へ
・描画する対象となるグラフィック領域を指定する。<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へ
プログラミングの館へ
何かキーが押されるまで待つ関数。
何かキーが入力されるまで、プログラムを一時停止する関数。
#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へ
プログラミングの館へ
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へ
プログラミングの館へ |