1: 2011-03-08 (火) 09:50:59 k-tan[6] [7] | 2: 2011-03-08 (火) 10:22:23 k-tan[6] [8] | ||
---|---|---|---|
Line 3: | Line 3: | ||
-(by [[K]], 2011.03.08) | -(by [[K]], 2011.03.08) | ||
-C言語の文法が分からないという人を対象にはしていません。そういう人は[[blike/intro]]へ。 | -C言語の文法が分からないという人を対象にはしていません。そういう人は[[blike/intro]]へ。 | ||
+ | -ドライバ開発者向けの情報は[[blike/drv]]にあります。 | ||
*** キャラクタ系関数群 [#j298223e] | *** キャラクタ系関数群 [#j298223e] | ||
-[01f以降] printf(const char *s, ...) | -[01f以降] printf(const char *s, ...) | ||
--いわゆるprintf。しかしフォーマット記述子はなんでも全部使えるというわけではない。どのくらいのさじ加減にするかは検討中。 | --いわゆるprintf。しかしフォーマット記述子はなんでも全部使えるというわけではない。どのくらいのさじ加減にするかは検討中。 | ||
--表示される文字は8x16ピクセルの固定ピッチフォントで、それ以外の文字が使いたいときは他の方法での表示を推奨する(グラフィック描画など)。 | --表示される文字は8x16ピクセルの固定ピッチフォントで、それ以外の文字が使いたいときは他の方法での表示を推奨する(グラフィック描画など)。 | ||
+ | |||
-[01f以降] puts(const char *s) | -[01f以降] puts(const char *s) | ||
--文字列の表示。標準関数のputs()と同様に、出力後に改行が付加される。 | --文字列の表示。標準関数のputs()と同様に、出力後に改行が付加される。 | ||
+ | |||
-[01f以降] bl_puts(const char *s) | -[01f以降] bl_puts(const char *s) | ||
--文字列の表示。標準関数のputs()とは異なり、改行の付加はない(そういう意味でfputs()ふう)。 | --文字列の表示。標準関数のputs()とは異なり、改行の付加はない(そういう意味でfputs()ふう)。 | ||
+ | |||
-[01f以降] putc(int c) | -[01f以降] putc(int c) | ||
--文字の表示。 | --文字の表示。 | ||
+ | |||
-[01f以降] locate(int x, int y) | -[01f以降] locate(int x, int y) | ||
--次回のprintfでの表示位置を指定。左上は(0,0)である。右下の座標はウィンドウサイズによる。デフォルトでは640x400なので、(79,24)が右下になる。 | --次回のprintfでの表示位置を指定。左上は(0,0)である。右下の座標はウィンドウサイズによる。デフォルトでは640x400なので、(79,24)が右下になる。 | ||
+ | |||
-[01f以降] color(int c, int b) | -[01f以降] color(int c, int b) | ||
--テキスト表示のカラーを指定。cは文字色。bは背景色。それぞれ0~15が有効。-1などの無効な数値を指定すれば無視されるので、color(7, -1);などとすれば文字色だけの変更も可能。何番がどの色なのかは、以下を参照のこと。1~7が高輝度で、8~15が低輝度である。 | --テキスト表示のカラーを指定。cは文字色。bは背景色。それぞれ0~15が有効。-1などの無効な数値を指定すれば無視されるので、color(7, -1);などとすれば文字色だけの変更も可能。何番がどの色なのかは、以下を参照のこと。1~7が高輝度で、8~15が低輝度である。 | ||
Line 21: | Line 27: | ||
0x5f5f5f, 0x0000af, 0x00af00, 0x00afaf, 0xaf0000, 0xaf00af, 0xafaf00, 0xafafaf | 0x5f5f5f, 0x0000af, 0x00af00, 0x00afaf, 0xaf0000, 0xaf00af, 0xafaf00, 0xafafaf | ||
}; | }; | ||
- | *** キー・マウス入力関数群 [#m653c905] | + | |
+ | -[01f以降] cls() | ||
+ | --画面全域を背景色で消去する。 | ||
+ | |||
+ | *** キー入力関数群 [#m653c905] | ||
-[01f以降] int inkey() | -[01f以降] int inkey() | ||
--blikeではキー入力はすべてキーバッファに貯められるが、そのキーバッファから1つ取り出す。もしキーバッファが空であれば0を返す。したがってこの関数を呼んでも処理はとまらない(それがgetc()とは違う)。 | --blikeではキー入力はすべてキーバッファに貯められるが、そのキーバッファから1つ取り出す。もしキーバッファが空であれば0を返す。したがってこの関数を呼んでも処理はとまらない(それがgetc()とは違う)。 | ||
Line 36: | Line 46: | ||
#define KEY_DEL 339 | #define KEY_DEL 339 | ||
--(これらの(変則的な)値は、blikeの旧バージョンとの互換性のため。旧バージョンではwin32の仕様に振り回されて適当に決めた。) | --(これらの(変則的な)値は、blikeの旧バージョンとの互換性のため。旧バージョンではwin32の仕様に振り回されて適当に決めた。) | ||
+ | |||
-[01f以降] gets(char *s) | -[01f以降] gets(char *s) | ||
--一行入力。これはカーソルが出て、入力を促す。 | --一行入力。これはカーソルが出て、入力を促す。 | ||
+ | |||
-[01f以降] int bl_inkey(int flags) | -[01f以降] int bl_inkey(int flags) | ||
--これはもっと小回りのきくinkeyである。flagsには以下のものを指定できる(組み合わせたいときは | でつなぐ)。 | --これはもっと小回りのきくinkeyである。flagsには以下のものを指定できる(組み合わせたいときは | でつなぐ)。 | ||
Line 51: | Line 63: | ||
--BL_WAITKEYNF を指定すれば、キーバッファが空の間は waitNF() するようになる。つまりキーが入力されるまで待つ。 | --BL_WAITKEYNF を指定すれば、キーバッファが空の間は waitNF() するようになる。つまりキーが入力されるまで待つ。 | ||
--BL_WAITKEYF を指定すれば、inkey() 処理に先立って画面全域の flshWin() を行う。 | --BL_WAITKEYF を指定すれば、inkey() 処理に先立って画面全域の flshWin() を行う。 | ||
- | ---ちなみに、フラグを見れば自明だが、 BL_WAITKEY = BL_WAITKEYF | BL_WAITKEYNF である。 | + | ---ちなみに、フラグを見れば自明だが、 BL_WAITKEY == BL_WAITKEYF | BL_WAITKEYNF である。 |
--BL_CLEARREP を指定すれば、過剰なキーリピートを削除する。ゲームなどではこれをやったほうがいいことが多い。逆にgetsみたいなものを自作したいときは、これをやらないほうがいい。 | --BL_CLEARREP を指定すれば、過剰なキーリピートを削除する。ゲームなどではこれをやったほうがいいことが多い。逆にgetsみたいなものを自作したいときは、これをやらないほうがいい。 | ||
--BL_BL_DELFFF を指定すれば、blikeが内部制御用に挿入している 0xfff のキーコードを返さないようになる。 | --BL_BL_DELFFF を指定すれば、blikeが内部制御用に挿入している 0xfff のキーコードを返さないようになる。 | ||
--inkey() に相当するのは、 bl_inkey(BL_GETKEY | BL_CLEARREP | BL_DELFFF) である。 | --inkey() に相当するのは、 bl_inkey(BL_GETKEY | BL_CLEARREP | BL_DELFFF) である。 | ||
+ | |||
+ | *** 表示制御関数群 [#f35a659f] | ||
+ | -[01f以降] openWin(int sx, int sy) | ||
+ | --ウィンドウの大きさを指定する。ウィンドウといっているが、実際のニュアンスは必要な画面の広さというべきかもしれない。 | ||
+ | --blikeではウィンドウは一枚しか開けない(というか必要な画面の広さはひとつ)。ただし裏画面を持つことはできる。裏画面については openVWin() を参照。 | ||
+ | --ウィンドウシステムをサポートしないOS上では、この命令で画面解像度が変更されるかもしれない。 | ||
+ | --openWin() は最初に一度しか設定できない。二度目以降の実行は無視される。 | ||
+ | --openWin() を実行する前に文字表示や描画系の関数を呼ぶと、 openWin(640, 400); が実行される。これがデフォルトの画面サイズである。 | ||
+ | --openWin() は、ウィンドウを準備した後に cls() を実行する。しかし flshWin() は実行していないので、必要に応じてフラッシュしなければいけない。 | ||
+ | |||
+ | -[01f以降] flshWin(int sx, int sy, int x0, int y0) | ||
+ | --ウィンドウの内部バッファをフラッシュする。 | ||
+ | --多くのOSでは、画面表示にはそれなりの時間がかかる。したがって、blikeではすべての描画関数(文字表示も含まれる)の実行結果をすぐには画面には反映させていない。内部バッファでのみ処理する。そして一通りかき終わったら、このフラッシュ関数でバッファの内容を画面に反映させる。そういう仕組みである。 | ||
+ | --しかしこのフラッシュの概念は初心者にはやや難しいため、wait() 関数を普通に使っていれば、blikeが適当なタイミングで flshWin() するようになっている。しかし blike まかせではやっぱり処理は重くなる傾向にあり、したがって動作の軽快な良いアプリケーションを書きたいのであれば、フラッシュの自前制御は欠かせない。 | ||
+ | --この関数では、グラフィック座標(x0, y0)から、右にsxピクセル、下にsyピクセルの、長方形の範囲の内部バッファをフラッシュして画面に反映させることができる。flshWin() はやはり負荷の大きな関数で、その負荷の大きさはこのときに指定する長方形の面積に強く依存する。したがって変更していない部分をできるだけ含まないようにしてやれば、高速になる。 | ||
+ | --また長方形の面積によらない固定的な負荷もあるので、斜めに線を引いたからといって1ピクセルずつフラッシュするのは効率が良くない。ある程度の大きさで何回かに分けるのがベストだろう。 | ||
+ | |||
+ | *** 時間制御関数群 [#ef7eb74c] | ||
+ | -[01f以降] wait(int msec) | ||
+ | |||
+ | -[01f以降] waitNF(int msec) | ||
+ | |||
+ | -[01f以降] bl_clock() |
(This host) = http://osask.net