引き続き、PICO-8 v0.2.1bを触っているのでメモ。
今までの記事:
引き続きAUTOMATONの連載記事を読んでいる。
今回読んだのは第6回と第7回。第5回(3Dグラフィクス)は飛ばしている。
効果音を鳴らそう - PICO-8ゲーム開発入門(6) | AUTOMATON
人と物のふれあい……衝突判定 – PICO-8ゲーム開発入門(7) | AUTOMATON
ここまでやればあつあげが焼き鳥を拾えるようになっている。実際は効果音も鳴らしている。

移動に目的ができたので動かしていて楽しくなってきた。
以下はメモ。
export("hoge.wav") で作成した音をwavファイルとして出力できる。
出力先はPICO-8のカレントディレクトリなので、folderコマンドで開くとよい。
exportは他にもpngとhtml(+js)が出力できる。
htmlにすればそのままウェブ上で遊べる形になる。とてもよい。
あとは気楽に公開する方法があれば完璧なのだが……。
衝突判定
衝突判定のアルゴリズムは色々あると思うが、AUTOMATONの記事では2点間距離を算出して使用していた。
function distance(x1,y1,x2,y2)
return sqrt((x1-x2)^2+(y1-y2)^2)
endfunction collision(x1,y1,x2,y2)
if distance(x1,y1,x2,y2) < 4 then
return true
else
return false
end
end
※はてなブログの引用の都合上、全角スペースを使用している
数学関数
rnd(x)
0以上x未満のランダムな数を返す。整数が欲しい場合はflr(rnd(x))を使うとよい(が、PICO-8は座標に整数を与えなくても問題無い)。
xが配列形式のテーブルの場合は、テーブルの中のランダムな要素を返す。
flr(x)とceil(x)がある。
flr(x)はx以下の最も近い整数、ceilはx以上の最も近い整数を返す。
システム関数
time() / t()
AUTOMATONのサンプルコードではフレームカウンタ変数として使われていたが、現行バージョンではそもそもカートリッジが起動してからの経過時間を返すシステム関数だった。
_update()または_update60()で算出されるため、同一フレームで呼び出した場合は同一の値となる。
Luaのテーブル
Luaには配列が無いそうだ。代わりにテーブルで配列のような数字のキーと文字列のキーが使える。
a={} -- テーブルを初期化
a[1] = 4 -- テーブルの1番に値4を入れる
a[2] = 3 -- テーブルの2番に値3を入れる
a[3] = "aiueo" -- テーブルの3番に値"aiueo"を入れる
a["fruit"] = "pineapple" -- テーブルのfruit要素に値"pineapple"を入れる
a.animal = "panda" -- テーブルのanimal要素に値"panda"を入れる
print(a[1]) -- テーブルaの1番の要素を表示
print(a[2]) -- テーブルaの2番の要素を表示
print(a[3]) -- テーブルaの3番の要素を表示
print(a["fruit"]) -- テーブルaのfruit要素のを表示
print(a.animal) -- テーブルaのanimal要素を表示a={x=3, y=4, fruit=“banana”} -- keyとvalueを複数まとめて設定
添え字は1始まりらしい。a.1のように添え字を指定することはできない。
テーブルにテーブルを入れることもできる。
Luaのforループ
forループは、Luaではこのように書く。
for i=1,5 do
print(i)
end
↑の場合、1ループごとのiの増分は1。
↓のようにすれば、iの増分は8になる。
for i=0,120,8 do
print(i)
end
![日経ソフトウエア 2019年7月号 [雑誌] 日経ソフトウエア 2019年7月号 [雑誌]](https://m.media-amazon.com/images/I/61Oqs9jCCCL._SL160_.jpg)
- 発売日: 2019/05/24
- メディア: Kindle版

Programming in Lua プログラミング言語Lua公式解説書
- 作者:Roberto Ierusalimschy
- 発売日: 2009/08/28
- メディア: 大型本

スクリプト言語による効率的ゲーム開発 新訂版 (LuaとC/C++連携プログラミング)
- 作者:浜中 誠
- 発売日: 2010/09/30
- メディア: 大型本