2: 2011-03-08 (火) 13:34:11 k-tan |
現: 2024-01-08 (月) 12:58:54 lina |
| * 上級者向けのblikeマニュアル(2) [#cd17d333] | | * 上級者向けのblikeマニュアル(2) [#cd17d333] |
| -(by [[K]], 2011.03.08) | | -(by [[K]], 2011.03.08) |
- | -C言語の文法が分からないという人を対象にはしていません。そういう人は[[blike/intro]]へ。 | + | -このページはC言語の文法が分からないという人を対象にはしていません。そういう人は[[blike/intro]]へ。 |
| -ドライバ開発者向けの情報は[[blike/drv]]にあります。 | | -ドライバ開発者向けの情報は[[blike/drv]]にあります。 |
| | | |
| --線を引く。色は事前に color() か setCol() で指定しておくこと。 | | --線を引く。色は事前に color() か setCol() で指定しておくこと。 |
| --アルゴリズムの関係で、drawLine(x0, y0, x1, y1) と drawLine(x1, y1, x0, y0) が厳密には重ならない場合もある。とはいえ、ズレは1ピクセル程度である。 | | --アルゴリズムの関係で、drawLine(x0, y0, x1, y1) と drawLine(x1, y1, x0, y0) が厳密には重ならない場合もある。とはいえ、ズレは1ピクセル程度である。 |
- | ---これがいやなら bball00a のようにすればいいだろう。 | + | ---これがいやなら bball00a.c のようにすればいいだろう。 |
| if (x0 <= t[j].x) | | if (x0 <= t[j].x) |
| drawLine(x0, y0, t[j].x, t[j].y); | | drawLine(x0, y0, t[j].x, t[j].y); |
| --r, g, b はそれぞれ0~255が有効。これらを0x000000~0xffffffの整数に変換する。 | | --r, g, b はそれぞれ0~255が有効。これらを0x000000~0xffffffの整数に変換する。 |
| | | |
- | -[01f以降] drawStr() | + | -[01f以降] drawStr(int x0, int y0, int rx, int ry, const char *s, ...) |
| + | --文字列を描画する。printfとの違いは、描き始めの位置をピクセル単位で制御できることと、重ねあわせができることと、拡大ができることである。 |
| + | --rxやryは倍率で、整数倍のみ指定できる。 |
| | | |
- | -[01f以降] setMode() | + | -[01f以降] setMode(int flags) |
| + | --flagsは以下のものが指定できる。 |
| + | #define BL_PSET 0x00000004 |
| + | #define BL_PAND 0x00000005 |
| + | #define BL_POR 0x00000006 |
| + | #define BL_PXOR 0x00000007 |
| + | #define BL_DBGFLSH 0x00000040 |
| + | #define BL_RLSFLSH 0x00000060 |
| + | #define BL_DEBUG BL_DBGFLSH |
| + | #define BL_RELEASE BL_RLSFLSH |
| + | --PSET, PAND, POR, PXOR はどれか一つを指定することができる。デフォルトでは PSET になっている。指定しなければ変更されない。 |
| + | ---これらは setPix(), drawLine(), drawRect(), fillRect(), fillOval(), drawStr() に影響する。 |
| + | --DBGFLSH, RLSFLSH もどれか一つを指定することができる。デフォルトでは DBGFLSH になっている。指定しなければ変更されない。 |
| + | ---これはフラッシュ忘れを分かりやすくする。リリースモードにするとフラッシュ忘れが分かりにくくなる代わりに(忘れていても結構それなりに画面に反映されてしまうことがある)、メモリが節約され、速度も向上する。 |
| + | ---リリースモードにしたいときは、一番最初に setMode(BL_RELEASE); と書くのが良いだろう。 |
| + | ---デバッグが終わる前にリリースモードにするべきではない。 |
| | | |
| -[01f以降] openVWin(int n, int sx, int sy) | | -[01f以降] openVWin(int n, int sx, int sy) |
| --描画関数がどの画面に対して描画を行うかを指定する。 openVWin() しないまま slctWin() して描画することもできて、その場合は表画面と同一サイズで blike が openVWin() する。 | | --描画関数がどの画面に対して描画を行うかを指定する。 openVWin() しないまま slctWin() して描画することもできて、その場合は表画面と同一サイズで blike が openVWin() する。 |
| | | |
- | -[01f以降] copyRct0() | + | -[01f以降] copyRct0(int sx, int sy, int n0, int x0, int y0, int n1, int x1, int y1) |
| + | --ウィンドウのある領域の画像を、別のウィンドウの同じ大きさの領域にコピーする。sxとsyは領域のサイズで、n0やn1はウィンドウ番号。 n0, x0, y0 の内容が、 n1, x1, y1 へコピーされる。 |
| + | --n0とn1が同じウィンドウを指していてもよく、その場合は同一画面内でのコピーになる。ただし領域が重なっていてはいけない。 |
| | | |
- | -[01f以降] copyRct1() | + | -[01f以降] copyRct1(int sx, int sy, int n0, int x0, int y0, int n1, int x1, int y1, int ic) |
| + | --ウィンドウのある領域の画像を、別のウィンドウの同じ大きさの領域にコピーする。その際、 ic で指定した色が透明色として扱われる。 |
| + | |
| + | -[01f以降] drawPtrn(int sx, int sy, int x, int y, char *c, char *p) |
| + | --ドット絵を描く。sxとsyは絵の大きさ。xとyは絵を描く座標。cは配色や絵の名前を指定するための文字列で、pは絵の内容を表す文字列である。以下に例を示す。 |
| + | drawPtrn(8, 8, 100, 100, "%name=sample ○=#000000 ●=#FFFFFF", |
| + | "●●●●●●●●" |
| + | "●○○○○○○●" |
| + | "●○●●●●○●" |
| + | "●○●○○●○●" |
| + | "●○●○○●○●" |
| + | "●○●●●●○●" |
| + | "●○○○○○○●" |
| + | "●●●●●●●●" |
| + | ); |
| + | --この例では全角文字を使ったが、 test021a.c のように半角でもよい。 |
| + | --絵の名前はエラー時にのみ使われるので、エラーが起きないのなら指定しなくてもよい。 |
| + | --この関数は文字列をちまちまと解釈するのであまり高速ではない。もし何度も表示するのなら、裏画面に一度これで描いておいて、あとはそこからcopyRct0するのがいいだろう。 |
| + | --色指定は、 #hhhhhh の形式の代わりに 0xhhhhhh を使うこともできる。多分そうしたほうが初心者には教えやすい(getPixして色比較するときに、if文中に #FFFFFF とは書けないから)。 |
| + | --ちなみに色 #80000000 は透明色として扱われ、描画されない。 |
| + | |
| + | *** そのほかの関数群 [#g0dd6fe4] |
| + | -[01f以降] int rnd(int n) |
| + | --0からn-1の範囲の乱数を返す。 |
| + | |
| + | -[01f以降] srand(int s) |
| + | --乱数のパターンを指定する。 |
| + | |
| + | *** 基本的なゲームの作り方 [#t4b0b065] |
| + | -実はゲームに限らず、この構造は頻出する。 |
| + | 準備の処理 |
| + | for (;;) { |
| + | 画面に描画など(動かないものは再描画しないようにすると動作が軽くなる) |
| + | 必要ならflshWinをやる(下でwaitを使うのならこれはやらなくていい) |
| + | 終了判定が成立すればbreak |
| + | waitかwaitNF |
| + | inkey |
| + | キー入力によっていろいろやる |
| + | キー入力によらない時間経過処理など(敵が動くとか) |
| + | } |
| + | 終了処理 |
| + | -inkeyの後にも描画やflshWinをする場合がある。 |
| + | -ポイントは、画面を作り終わったらwaitして、waitの直後にinkeyするということである。 |