4: 2011-03-09 (水) 11:44:03 k-tan[6] [7] | 現: 2024-01-08 (月) 12:58:54 lina[8] [9] | ||
---|---|---|---|
Line 12: | Line 12: | ||
--線を引く。色は事前に 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); | ||
Line 58: | Line 58: | ||
---これはフラッシュ忘れを分かりやすくする。リリースモードにするとフラッシュ忘れが分かりにくくなる代わりに(忘れていても結構それなりに画面に反映されてしまうことがある)、メモリが節約され、速度も向上する。 | ---これはフラッシュ忘れを分かりやすくする。リリースモードにするとフラッシュ忘れが分かりにくくなる代わりに(忘れていても結構それなりに画面に反映されてしまうことがある)、メモリが節約され、速度も向上する。 | ||
---リリースモードにしたいときは、一番最初に setMode(BL_RELEASE); と書くのが良いだろう。 | ---リリースモードにしたいときは、一番最初に setMode(BL_RELEASE); と書くのが良いだろう。 | ||
+ | ---デバッグが終わる前にリリースモードにするべきではない。 | ||
-[01f以降] openVWin(int n, int sx, int sy) | -[01f以降] openVWin(int n, int sx, int sy) | ||
Line 73: | Line 74: | ||
-[01f以降] copyRct1(int sx, int sy, int n0, int x0, int y0, int n1, int x1, int y1, int ic) | -[01f以降] copyRct1(int sx, int sy, int n0, int x0, int y0, int n1, int x1, int y1, int ic) | ||
--ウィンドウのある領域の画像を、別のウィンドウの同じ大きさの領域にコピーする。その際、 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] | *** そのほかの関数群 [#g0dd6fe4] | ||
Line 80: | Line 99: | ||
-[01f以降] srand(int s) | -[01f以降] srand(int s) | ||
--乱数のパターンを指定する。 | --乱数のパターンを指定する。 | ||
+ | |||
+ | *** 基本的なゲームの作り方 [#t4b0b065] | ||
+ | -実はゲームに限らず、この構造は頻出する。 | ||
+ | 準備の処理 | ||
+ | for (;;) { | ||
+ | 画面に描画など(動かないものは再描画しないようにすると動作が軽くなる) | ||
+ | 必要ならflshWinをやる(下でwaitを使うのならこれはやらなくていい) | ||
+ | 終了判定が成立すればbreak | ||
+ | waitかwaitNF | ||
+ | inkey | ||
+ | キー入力によっていろいろやる | ||
+ | キー入力によらない時間経過処理など(敵が動くとか) | ||
+ | } | ||
+ | 終了処理 | ||
+ | -inkeyの後にも描画やflshWinをする場合がある。 | ||
+ | -ポイントは、画面を作り終わったらwaitして、waitの直後にinkeyするということである。 |
(This host) = http://osask.net