|
Window
Frame
Image
__________________ __________________ ____ / / / _____/____/_ / / / / __/_ / /___/ / / / / / / / / / / /___/ / Text / <------/----/ ____ /______"HelloWorld" / / / / / / / / HelloWorld/ /_________________/ /_________________/ |
int main(void)
{
KXL_Rect rect = {
0, /**
左 **/
0, /**
上 **/
100, /** 幅
**/
100 /** 高さ
**/
};
Bool flag = False;
/**
*** 100x100でウィンドウを作成する
*** イベントは再描画イベントとキー押下のみ受け付ける
*** リターンキーが押されたら終了する
**/
KXL_CreateWindow(100, 100,
"sample",
KXL_EVENT_EXPOSURE_MASK |
KXL_EVENT_KEY_PRESS);
while (flag != True)
{
/** イベントループ **/
while (KXL_CheckEvents())
{
/** イベントを取得する
**/
switch
(KXL_GetEvents()) {
case
KXL_EVENT_EXPOSE: /** 再描画イベント **/
/**
フレームをクリアする **/
KXL_ClearFrame(rect);
/**
「sample」を描画する **/
KXL_PutText(30,
50,
"sample");
/**
フレームをウィンドウに反映させる **/
KXL_UpDate(rect);
break;
case
KXL_EVENT_KEY_PRESS: /** キー押下イベント **/
/**
リターンキーが押されたら終了 **/
if
(KXL_GetKey() == KXL_KEY_Return)
flag = True;
break;
}
}
}
/** ウィンドウを閉じる **/
KXL_DeleteWindow();
return 0;
}
まずはウィンドウを作成する。
KXL_CreateWindow(100,
100, "sample",
KXL_EVENT_EXPOSURE_MASK |
KXL_EVENT_KEY_PRESS);
これは幅100、高さ100の大きさのウィンドウで、タイトルバーに「sample」と表示し、イベントとして、再描画とキー押下を受け付ける、という設定です。この時点で同じ大きさのピックスマップ(以下フレームを言う)が作成されます。基本的にはウィンドウに直接描画するのではなく、一度フレームに描画してからフレームをウィンドウに反映させます。
次にイベントの受け付けをします。
while (KXL_CheckEvents())
{
switch (KXL_GetEvents())
{
case
KXL_EVENT_EXPOSE: /** 再描画イベント **/
:
case
KXL_EVENT_KEY_PRESS: /** キー押下イベント **/
:
}
}
KXL_CheckEvents()でイベントが発生したかをチェックします。イベントが何もなければwhileを抜けます。イベントが発生したならば、KXL_GetEvents()で何のイベントかを調べます。
再描画イベント(KXL_EVENT_EXPOSE)が発生したらフレームに必要なものを描画していきます。まずフレーム全体をクリアします。
KXL_ClearFrame(rect);
rect構造体にフレームのどの部分をクリアするかを設定しておきます。この場合フレーム全体なので左=0、上=0、幅=100、高さ=100を設定します。
フレームをクリアしたら文字列を描画します。
KXL_PutText(30,
50, "sample");
これはフレームの左上から左に30、下に50の位置に「sample」という文字を描画します。デフォルトのフォントセットは
"-adobe-courier-bold-r-normal--14-*-*-*-*-*-iso8859-1"で、色は白になっています。
フレームへの描画が終ったら、フレームをウィンドウに反映させます。
KXL_UpDate(rect);
rect構造体にフレームのどの部分をウィンドウに反映させるかを設定しておきます。この場合フレーム全体を反映をさせるので左=0、上=0、幅=100、高さ=100を設定します。
キー押下イベント(KXL_EVENT_KEY_PRESS)が発生したらどのキーが押されたかを判定します。
if (KXL_GetKey()
== KXL_KEY_Return)
flag = True;
KXL_GetKey()で押されたキーを取得し、それがリターンキー(KXL_KEY_Return)ならばflagにTrueをセットします。これでループから抜けます。
最後にウィンドウを閉じます。
KXL_DeleteWindow();
以上簡単なサンプルプログラムの解説です。どうです、簡単でしょ?
この関数はウィンドウ及びフレームを作成する為の関数です。
イベントは以下のものを論理和で組み合わせて指定します。
KXL_EVENT_KEY_PRESS_MASK
キーが押された時
KXL_EVENT_KEY_RELEASE_MASK キーが離された時
KXL_EVENT_BUTTON_PRESS_MASK マウスのボタンが押された時
KXL_EVENT_BUTTON_RELEASE_MASK マウスのボタンが離された時
KXL_EVENT_BUTTON_MOTION_MASK マウスのボタンを押しながら移動した時
KXL_EVENT_EXPOSURE_MASK
再描画の要求があった時
ゲームを作る上でこれぐらいしか使わないだろうと思ったのでこれしかありません(^^
この関数はウィンドウを閉じる為の関数です。
必ず最後に呼び出して下さい。
この関数はウィンドウを表示するディスプレイを指定する為の関数です。
KXL_CreateWindow関数を呼び出す前に使用します。
例えば表示したいディスプレイの名前(Xのホスト名)が「ks.com」ならば
KXL_DisplayName("ks.com:0.0");
KXL_CreateWindow(〜);
というように使用します。
この関数はフレームをウィンドウに反映させる為の関数です。
まずKXL_Rect構造体を使用してフレームの左、上、幅、高さを指定します。
ウィンドウ及びフレームの大きさが100x100で、フレーム全体をウィンドウに反映させる場合は
rect.Left = 0;
rect.Top = 0;
rect.Width = 100;
rect.Heigth = 100;
と、なります。フレームのrectで指定した矩形がウィンドウの左上(0、0)を視点として反映されます。
この関数はフォントの名前、色を指定する為の関数です。
nameはデフォルトでは"-adobe-courier-bold-r-normal--14-*-*-*-*-*-iso8859-1"�となっているので変更したく無い場合はNULLを渡します。
r,g,bの各輝度はある程度(?)はプレーン数を自動で識別して変換してくれるので、例えば黄色にしたい場合はr=0xff,g=0xff,b=0x00とし、プレーン数が8、16、24でもこのままの値でOKです。
この関数はKXL_CreateWindowで作成されたフレームのサイズを変更する為の関数です。
シューティングゲーム等で画面外のキャラの描画処理等にウィンドウの大きさでは不足になる事があるので、そのような時に使用して下さい。
この関数はフレームの消去、点描画、線描画、長方形描画時の描画色を設定する為の関数です。
r,g,bの各輝度はある程度(?)はプレーン数を自動で識別して変換してくれるので、例えば黄色にしたい場合はr=0xff,g=0xff,b=0x00とし、プレーン数が8、16、24でもこのままの値でOKです。
デフォルト値は黒(0x00,0x00,0x00)です。
この関数は任意の場所に点を描画する為の関数です。
描画色はKXL_SetDrawColor関数で設定してある色です。
例えば赤色で100、100の位置に点を描画したい場合は
KXL_SetDrawColor(0xff,0x00,0x00);
KXL_DrawPoint(100,100);
となります。
この関数は任意の場所に線を描画する為の関数です。
描画色はKXL_SetDrawColor関数で設定してある色です。
例えば赤色で100、100の位置から200、200の位置へ線を描画したい場合は
KXL_SetDrawColor(0xff,0x00,0x00);
KXL_DrawLine(100,100,200,200);
となります。
この関数は任意の場所に連続した線を描画する為の関数です。
KXL_Polygonの内容は以下の通りです。
typedef struct {
Uint16 x;
Uint16 y;
} KXL_Polygon;
描画色はKXL_SetDrawColor関数で設定してある色です。
例えば赤色で三角形((0,100),(100,0),(200、100))を描画する場合は
KXL_Polygon data[3] = {
{0,100},{100,0},{200,100}
};
KXL_SetDrawColor(0xff,0x00,0x00);
KXL_DrawPolygon(data, 3);
となります。
この関数は任意の場所に長方形を描画する為の関数です。
描画色はKXL_SetDrawColor関数で設定してある色です。
例えば赤色で100、100の位置から100x100のサイズで長方形(塗りつぶす)を描画したい場合は
KXL_SetDrawColor(0xff,0x00,0x00);
KXL_DrawRectangle(100,100,100,100,True);
となります。
この関数はフレームを消去する為の関数です。
消去色はKXL_SetDrawColor関数で設定してある色です。
例えば赤色で0、0の位置から100x100のサイズを消去したい場合は
KXL_Rect rect;
rect.Left = 0;
rect.Top = 0;
rect.Width = 100;
rect.Heigth = 100;
KXL_SetDrawColor(0xff,0x00,0x00);
KXL_ClearFrame(rect);
と、なります。
この関数はbmpファイルを読み込み、指定した透明色の番号を透明にし、KXL_Image構造体へ格納する(以下イメージと記す)為の関数です。
KXL_Imageの内容は以下の通りです。
typedef struct {
Pixmap Buffer; bmpのイメージが格納されている
Pixmap Mask; bmpのマスクイメージが格納されている
GC MaskGC; bmpのマスク用GC
Uint16 Width; bmpの幅
Uint16 Height; bmpの高さ
} KXL_Image;
これらは全て参照のみです。
この関数を使用する場合の注意点としては、bmpファイルは4bpp(16色以下)か8bpp(256色以下)で作られていなければなりません。また、X
Window Systemが16か24ビットカラーで起動していなければなりません。
この関数はイメージ全体をフレームに描画する為の関数です。
透明色も自動で処理されます。
この関数はイメージの全体又は一部分をフレームに描画する為の関数です。
透明色も自動で処理されます。
この関数はイメージの全体又は一部を他のイメージにコピーする為の関数です。
例えば48x16のイメージがあるとします。このイメージは16x16のキャラが横に4つ並んでいます。このキャラを個別のイメージにコピーしたい場合に使用します。
サンプルコード
KXL_Image *all;
KXL_Image *chr[4];
KXL_Rect rect;
int i;
all = KXL_LoadImage("alll.xpm");
for (i=0; i<4; i++) {
rect.Left = i*16;
rect.Top = 0;
rect.Width = 16;
rect.Height = 16;
chr[i] = KXL_CopyImage(all, rect);
}
と、なります。
この関数はイメージを任意のサイズに変換し、他のイメージにコピーする為の関数です。
この関数はイメージを削除する為の関数です。
KXL_LoadBitmap関数を使用した場合、終了時には必ず実行して下さい。
この関数は文字列を描画する為の関数です。
文字列には2バイトコード(日本語)は指定出来ません。(いずれは対応させるつもりです。。。)
描画時のフォント及び色はKXL_Fontで指定したフォント及び色です。
この関数は文字列を描画した時の横幅を求める為の関数です。
文字列には2バイトコード(日本語)は指定出来ません。(いずれは対応させるつもりです。。。)
描画時のフォントはKXL_Fontで指定したフォントで、横幅はそのフォントにより変化します。
この関数はイベントの有無をチェックする為の関数です。
イベントが複数発生した場合は複数回Trueが返るのでwhile等で処理をします。
サンプル
while (KXL_CheckEvents())
{
switch (KXL_GetEvents())
{
:
}
}
この関数はイベントを取得する為の関数です。
この関数はキーイベントが発生した時のキーコードを取得する為の関数です。
この関数はマウスイベントが発生した時のマウス情報を取得する為の関数です。
この関数はサウンドサーバーの初期化をする為の関数です。
サウンドサーバーを新たにプロセスを発生させて処理しています。サウンドは最大で16個同時に再生出来ます。対応しているファイル形式はwavのみで、cat
〜.wav > /dev/dspとした時に正常に再生出来るサンプリングのみです。ステレオ再生は出来ません。sox等で変換して下さい。
設定方法は、例えばwavファイル「bomb.wav」「bgm.wav」「attack.wav」が/usr/local/games以下にある場合は
Uint8 *fname[]={"bomb", "bgm", "attack", ""};
KXL_InitSound("/usr/local/games", fname);
とします。これで3つの音が鳴らせるようになります。
但し、ファイル数の上限は16です。
この関数はサウンドサーバーを終了させる為の関数です。
この関数はサウンドを再生、停止させる為の関数です。
サウンドファイル番号をKXL_InitSoundで設定したファイル数を0から数えます。3つ設定した場合は0〜2の間で指定します。全てのサウンドを停止させる場合はサウンドファイル番号は無視されます。最大で16のサウンドが再生されます。
この関数は1秒間に何回割込みを発生させるかを設定する為の関数です。
1秒間に30回処理を行う時のサンプル
KXL_Timer(30);
while (1) {
/*
タイマー割込みが発生するまで待機する */
if
(KXL_GetTimer() == False)
continue;
/*
タイマー割込みのリセット */
KXL_ResetTimer();
/*
処理 */
}
この関数はタイマー割込みが発生したかを調べる為の関数です。
この関数はタイマー割込みをリセットする為の関数です。