PICO-8を使ってみる2

そんなわけで(どんなわけで)、PICO-8 v0.2.1bを触っているのでメモ。
まずは、AUTOMATONの記事に沿ってやっている。

前回の記事:
PICO-8を使ってみる - もふぐらみんぐ
AUTOMATONの連載記事は4年前のもので未完ぽいが、貴重な日本語チュートリアルなのでありがたく読ませていただく。
今回読んだのは下記3つの記事。これだけでキャラクターに画面上を歩き回らせることができるのでちょっと楽しい。
プログラムで絵を描こう - PICO–8ゲーム開発入門(2) | AUTOMATON
アニメーションを作ろう - PICO-8ゲーム開発入門(3) | AUTOMATON
コントローラーを使おう - PICO-8ゲーム開発入門(4) | AUTOMATON
出来上がったのがこれ↓。歩いているのはあつあげというオリジナルキャラクター。上下左右キーで動かせる。
あつあげが歩く

以下はメモ。

function _init()
は最初に呼ばれる。
function _update()
は繰り返し呼ばれるゲームループ。30fps。
(function _update60()なら60fps。)
function _draw()
は描画用関数。30fps。
(※処理が間に合わない場合は15fpsになる。)

PICO-8座標系:
左上が(0,0)、右下が(127,127)

PICO-8の色:
カラーパレットの左上0~15
API早見表の「描画」タブの図を見ると分かりやすい。

0 black 1 dark_blue 2 dark_purple 3 dark_green
4 brown 5 dark_gray 6 light_gray 7 white
8 red 9 orange 10 yellow 11 green
12 blue 13 indigo 14 pink 15 peach

基本的な描画関数
(c: 描画色は省略可能で省略した場合は0: 黒になる。)
点を打つ:
pset(x, y, c)
線を引く:
line(x0, y0, x1, y1, c)
円を描く:
circ(x, y, r, c)
circfill(x, y, r, c)
矩形を描く:
rect(x0, y0, x1, y1, c)
rectfill(x0, y0, x1, y1, c)

スプライトを描画する:
spr(n, x, y)
n: スプライト番号
x: 左上のX座標
y: 左上のY座標

スプライトのデフォルト透過色は0: 黒だが、palt()で変更できる。

この辺りを手掛かりにして公式マニュアルを見る。

Luaのif文:
if 条件式 then
……
end

1行に収めてもOK。
if 条件式 then …… end

条件式の否定はnot。
if not hoge then …… end

PICO-8の入力:
PICO-8は十字キーと2ボタンのある空想上のゲーム機である。
API早見表の「入力」タブの図を見ると分かりやすい。

btn(i, p)
・i: ボタンに割り振られた番号 (0~5)(省略時は12個のボタンのビットフィールドを返す)
・p: プレイヤー番号 (0~7) (省略時0)
・返り値: ボタンが押されている : true/ 押されていない : false

0: 左ボタン
1: 右ボタン
2: 上ボタン
3: 下ボタン
4: 〇ボタン
5: ×ボタン
数値でなく、ボタンのグリフ(Shift+l/r/u/d/o/x)でも可能。つまり下図のようにできる。
PICO-8 ボタンのグリフを引数に利用する
※グリフは他のエディタで開くと文字化けしてしまう(unicode相当らしいのだが)。

入力されたタイミングを取得したいときはbtnp()を使う。(15フレーム押され続けると4フレーム毎にtrueを返すようになる。)

スプライトのアニメーション

記事ではフレームカウントをアニメーションさせたいスピードで除算した余りで制御していた。他の方法も色々ありそう。

FUNCTION _UPDATE()
 T+=1
 IF T%4==0 THEN
  S+=1
  IF S>4 THEN
   S=2
  END
 END
END

はてなブログの引用の都合上、全角スペースを使用している

日経ソフトウエア 2019年7月号 [雑誌]

日経ソフトウエア 2019年7月号 [雑誌]

  • 発売日: 2019/05/24
  • メディア: Kindle