Original Text by Yamada Takumi, Page producted by Libroworks Inc.
このページを見るにはJavaScriptを有効にする必要があります。
C言語VS2010編バナー

SetGraphMode関数

宣言int SetGraphMode( int SizeX , int SizeY , int ColorBitNum ) ;
概略画面モードの変更
引数
  • SizeX , SizeY:画面の解像度
  • ColorBitNum:カラービット数
戻り値
  • DX_CHANGESCREEN_OK: 画面変更は成功した
  • DX_CHANGESCREEN_RETURN: 画面の変更は失敗し元の画面モードに戻された
  • DX_CHANGESCREEN_DEFAULT : 画面の変更は失敗し標準の画面モードに変更された

解説

画面の解像度や最大表示色数を変更します。

<注意>

この関数を実行するとロードしたすべてのグラフィックデータハンドル、 作成したフォントハンドルは自動的に削除され、SetDrawArea, SetDrawScreen, SetDrawMode, SetDrawBlendMode, SetDrawBright 等の描画に関係する設定を行う関数による設定も全て初期状態に戻りますので、 画面モード変更後 LoadGraph関数や CreateFontToHandle関数等で再度ハンドルを作成し直し、 描画可能領域、描画対象画面等の各種描画系の設定も再度行う必要があります。

画面の解像度は画面を表現するのに使用されるドット(点)の数 です。解像度としては主に

320×240 640×480 800×600 1024×768 1280×1024

があり、2Dのアクションゲームで1番メジャーな解像度は640×480となっています
(デフォルトは640×480です)。画面の解像度を上げると点の数が 増え表現力も高まりますが、その分画面の状態を記憶しておく データの量も増えますので注意してください。あと上記に記されて いない解像度を指定することも出来ますが(例 300×200 512×225) モニターやグラフィックボードが対応していない場合はウインドウ モードで起動します。

カラービット数

カラービット数とは使用する画面の色の数です。
ビットとは要は2進数の1桁の事で、16ビットで65536色 (Trueカラー)24ビットで1677万色(フルカラー)表現でき ます。ビット数が上がれば上がるほど表現できる色の数は増えますが その分必要なデータの量も増えますので注意してください。

このライブラリで指定できるカラービット数は16ビットと32ビットの 二つになります。

指定したカラービット数に対応する3D機能を持たないグラフィ ックカードでは3D機能が使用不可になります。
16ビットはDXライブラリの標準色ビット数で、 65536色を使って画像を表現します。
32ビットは内部的には24ビットを使って1667万色で画像を表現します。 このモードを選択するとグラフィックデータのサイズが16bitモードに比べて2倍になるので、 ある程度ハイスペックなグラフィックカードが必要となります。

戻り値は、変更が成功した場合は DX_CAHNGESCREEN_OKが 失敗して元の画面モードに戻された場合は DX_CHANGESCREEN_RETURN が 失敗して元の画面にも戻せず、デフォルトの画面モード( 640x480 16bit) に変更された場合は DX_CHANGESCREEN_DEFAULT が、それすらも失敗 した場合はソフトが自動終了します。

なおこの関数を DxLib_Init 関数を使用する前に呼び出すことにより 初期状態の画面モードを設定することが出来ます。

解像度800×600、カラービット数32ビットで起動し、グラフィックを読み込み描画します

#include "DxLib.h"

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

	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// 画面モードの変更
	SetGraphMode( 800 , 600 , 32 ) ;

	// test.bmpの読み込み
	GHandle = LoadGraph( "test1.bmp" ) ;

	// グラフィックの描画
	DrawGraph( 0 , 0 , GHandle , FALSE ) ;

	// キー待ち(『WaitKey』を使用)
	WaitKey() ;

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}

GetScreenState関数

宣言int GetScreenState( int *SizeX , int *SizeY , int *ColorBitDepth ) ;
概略現在の画面の大きさとカラービット数を得る
引数
  • int *SizeX , *SizeY : それぞれ画面の幅と高さを保存する int 型変数のポインタ
  • int *ColorBitDepth : 画面のカラービット深度を保存する int 型変数のポインタ
戻り値
  • 0:成功
  • -1:エラー発生

解説

現在の画面の幅と高さ、そして1ピクセルあたりに使用されているビット数 を得ます。

例 Sx,Sy,Cb にそれぞれ画面の幅、高さ、カラービット数を取得する

	int Sx , Sy , Cb ;

	GetScreenState( &Sx , &Sy , &Cb ) ;

なおここでいう画面の幅、高さとはDXライブラリが実際に描きこめる 広さのことを示しており、ウインドウモード時などのデスクトップ自体の 画面の広さのことではないので注意してください。
( 例 デスクトップの広さ 1024x768 DXライブラリの画面の広さ 640x480 だった  場合、この関数で得られる数値は後者の 640x480 です)

ありません

SetDrawArea関数

宣言int SetDrawArea( int x1 , int y1 , int x2 , int y2 ) ;
概略描画可能領域のセット
引数
  • x1 , y1 : 描画可能領域を示す矩形の左上の頂点
  • x2 , y2 : 描画可能領域を示す矩形の右下+1の頂点
戻り値
  • 0:成功
  • -1:エラー発生

解説

( x1, y1 )を左上頂点、( x2 - 1, y2 - 1 ) を右下頂点とした矩形 を各描画関数で描画可能な領域として設定します。この領域をはみ出て 描画しようとした場合はその部分は描画されません。

注…『なんで右下の頂点は「-1」してるの?』と思われた方はDrawBoxの解説を読んでみて下さい。

画面の半分を描画不可能にして画面全体に青い四角を描画しようとする

#include "DxLib.h"

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

	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// 描画可能領域セット
	SetDrawArea( 0 , 0 , 320 , 480 ) ;

	// 青色の値を取得
	Cr = GetColor( 0 , 0 , 255 ) ;

	// 青い四角形の描画
	DrawBox( 0 , 0 , 640 , 480 , Cr , TRUE ) ;

	// キー待ち(『WaitKey』を使用)
	WaitKey() ;

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}

ClearDrawScreen関数

宣言int ClearDrawScreen( void ) ;
概略画面に描かれたものを消去する
引数なし
戻り値
  • 0:成功
  • -1:エラー発生

解説

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

ランダムな座標で1000個の点を描画した後画面を消去します

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
		 LPSTR lpCmdLine, int nCmdShow )
{
	int i ;
	int Cr ;

	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// 白色の値を取得
	Cr = GetColor( 255 , 255 , 255 ) ;

	// 1000個の点を描く
	for( i = 0 ; i < 1000 ; i ++ )
	{
		// ランダムな位置に点を描く(『GetRand』を使用)
		DrawPixel( GetRand( 639 ) , GetRand( 479 ) , Cr ) ;
	}

	WaitKey() ;		// 結果を見るためにキー待ち(『WaitKey』を使用)

	// 画面を初期化
	ClearDrawScreen() ;

	WaitKey() ;		// キーの入力待ち(『WaitKey』を使用)

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}

GetColor関数

宣言int GetColor( int Red , int Green , int Blue ) ;
概略色コードを取得する
引数Red , Green , Blue : 取得したい色の各輝度値(0~255)
戻り値カラーコード

解説

DrawLineDrawPixelDrawStringDrawBoxDrawCircleで 使用する色の値を取得します。Red、Green、Blueはそれぞれ 色の3原色に対応していてこの値を指定することで希望の 色コードが取得できます。(各色要素の上限値は255です)

<<注意!>>

色コードは画面のカラービット数によって変化しますので、画面のカラービット数が変化するとそれ以前にこの関数で得られた色コードは無効( 別の色を表す数値 )になります。

灰色の線を描く

#include "DxLib.h"

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

	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// 灰色の値を取得
	Cr = GetColor( 128 , 128 , 128 ) ;

	// 線の描画
	DrawLine( 120 , 150 , 300 , 240 , Cr );

	WaitKey() ;		// キーの入力待ち(『WaitKey』を使用)

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}

SetDrawScreen関数

宣言int SetDrawScreen( int DrawScreen ) ;
概略描画先グラフィック領域の指定
引数
  • DrawScreen:描画する対象となるグラフィック領域を指定します。
  • DX_SCREEN_FRONT:表の画面(表示されている画面)
  • DX_SCREEN_BACK :裏の画面(表示されていない画面)
戻り値

    0:成功

    -1:エラー発生

解説

アニメーショングラフィックを表示するとして、常に表示され ている画面に対して描画処理を行うと、画面への描画、消去が 見えてしまい結果として画面がちらついているように見えます。 ( 注 … グラフィックカードによってはちらつかない場合も ありますが、一般にはちらつきます )
そこで画面への描画中は見えないようにして、描画処理が終った 後で見えるようにすれば画面のちらつきは消えるはずです。それを 実現するためにこの関数があります。
デフォルトでは描画先は DX_SCREEN_FRONT (表の画面)と なっていて描画処理中も見えてしまい画面はちらつきますが、 描画先を DX_SCREEN_BACK (裏の画面)を指定すると描画先が 普段は見えない裏の画面に対して行われます。
描画が終った後で次に示す関数ScreenFlipを呼び出せば、 裏画面の内容が表画面に反映され、裏画面に描画していた内容が実際に表示されます。
この関数はその描画先をどちらの画面にするか、を指定する ための関数です。

最初に表画面を描画先にしてランダムに四角形を描き続き、次に描画先を裏画面にして同じことをしてみます。

#include "DxLib.h"

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,
			 LPSTR lpCmdLine, int nCmdShow )
{
	int i ;
	int Cr ;
	int x , y ;

	if( DxLib_Init() == -1 )	// DXライブラリ初期化処理
	{
		 return -1;	// エラーが起きたら直ちに終了
	}

	// 描画先画面を表にする
	SetDrawScreen( DX_SCREEN_FRONT ) ;

	// 10000個四角形を描きます
	for( i = 0 ; i < 10000 ; i ++ )
	{
		// ランダムな色を取得する『GetRand』使用
		Cr = GetColor( GetRand( 255 ) , GetRand( 255 ) , GetRand( 255 ) ) ;

		// ランダムな位置に四角形を描く
		x = GetRand( 639 ) ;
		y = GetRand( 479 ) ;
		DrawBox( x , y , x + GetRand( 639 ) , y + GetRand( 479 ) , Cr , TRUE ) ;
	}

	WaitKey() ;		// 結果を見るためにキー待ち(『WaitKey』を使用)

	// 画面を初期化
	ClearDrawScreen() ;

	// 描画先画面を裏にする
	SetDrawScreen( DX_SCREEN_BACK ) ;

	// 10000個四角形を描きます
	for( i = 0 ; i < 10000 ; i ++ )
	{
		// ランダムな色を取得する『GetRand』使用
		Cr = GetColor( GetRand( 255 ) , GetRand( 255 ) , GetRand( 255 ) ) ;

		// ランダムな位置に四角形を描く
		x = GetRand( 639 ) ;
		y = GetRand( 479 ) ;
		DrawBox( x , y , x + GetRand( 639 ) , y + GetRand( 479 ) , Cr , TRUE ) ;
	}

	// 裏画面の内容を表画面に反映します
	ScreenFlip() ;

	WaitKey() ;		// 結果を見るためにキー待ち(『WaitKey』を使用)

	DxLib_End() ;		// DXライブラリ使用の終了処理

	return 0 ;		// ソフトの終了
}

ScreenFlip関数

宣言int ScreenFlip( void ) ;
概略
    フリップ関数、画面の裏ページ(普段は表示されていない)を 表ページ(普段表示されている)に反映する
引数なし
戻り値
  • 0:成功
  • -1:エラー発生

解説

裏ページの内容を表ページに反映します。
(裏ページ、表ページについては SetDrawScreen関数の解説を参照してください)

注…この関数を使用した後の裏ページの内容は環境によって変わりますので、 ScreenFlip 関数を使用した後は ClearDrawScreen 等を使用して裏ページを初期化して下さい

SetDrawScreen 関数の解説を参照してください