サーチ…
前書き
PICO-8は、組み込み型Luaでプログラムされたファンタジーコンソールです。それはすでに良い文書を持っています 。このトピックを使用して、文書化されていないか、または文書化されていない機能を実演してください。
ゲームループ
PICO-8をインタラクティブシェルとして使用することは完全に可能ですが、おそらくゲームループを利用したいと考えています。これを行うには、これらのコールバック関数の少なくとも1つを作成する必要があります。
-
_update()
-
_update60()
( v0.1.8以降) -
_draw()
最小限の「ゲーム」は単に画面上に何かを描くかもしれません:
function _draw()
cls()
print("a winner is you")
end
_update60()
を定義すると、ゲームループは60fpsで実行しようとし、 update()
(30fpsで実行されますupdate()
は無視されます。どちらの更新関数も_draw()
前に_draw()
ます。システムがドロップされたフレームを検出した場合、それは他のフレームごとに描画関数をスキップしますので、更新関数でゲームロジックとプレーヤ入力を保持することをお勧めします:
function _init()
x = 63
y = 63
cls()
end
function _update()
local dx = 0 dy = 0
if (btn(0)) dx-=1
if (btn(1)) dx+=1
if (btn(2)) dy-=1
if (btn(3)) dy+=1
x+=dx
y+=dy
x%=128
y%=128
end
function _draw()
pset(x,y)
end
厳密に言うと、 _init()
関数は任意の関数の外部にあるコマンドが起動時に実行されるため、オプションです。しかし、それはカートリッジを再起動せずにゲームを初期状態にリセットする便利な方法です:
if (btn(4)) _init()
マウス入力
正式にはサポートされていませんが、ゲームでマウス入力を使用できます:
function _update60()
x = stat(32)
y = stat(33)
if (x>0 and x<=128 and
y>0 and y<=128)
then
-- left button
if (band(stat(34),1)==1) then
ball_x=x
ball_y=y
end
end
-- right button
if (band(stat(34),2)==2) then
ball_c+=1
ball_c%=16
end
-- middle button
if (band(stat(34),4)==4) then
ball_r+=1
ball_r%=64
end
end
function _init()
ball_x=63
ball_y=63
ball_c=10
ball_r=1
end
function _draw()
cls()
print(stat(34),1,1)
circ(ball_x,ball_y,ball_r,ball_c)
pset(x,y,7) -- white
end
ゲームモード
タイトル画面または終了ゲーム画面が必要な場合は、モード切り替えメカニズムを設定することを検討してください。
function _init()
mode = 1
end
function _update()
if (mode == 1) then
if (btnp(5)) mode = 2
elseif (mode == 2) then
if (btnp(5)) mode = 3
end
end
function _draw()
cls()
if (mode == 1) then
title()
elseif (mode == 2) then
print("press 'x' to win")
else
end_screen()
end
end
function title()
print("press 'x' to start game")
end
function end_screen()
print("a winner is you")
end
Modified text is an extract of the original Stack Overflow Documentation
ライセンスを受けた CC BY-SA 3.0
所属していない Stack Overflow