前回「キャラを表示する」からの続きです。
表示したキャラクターを動かしてみましょう。
今回の完成コード
function _init() x=60 y=60 end function _update() if btn(0) then x-=1 end if btn(1) then x+=1 end if btn(2) then y-=1 end if btn(3) then y+=1 end end function _draw() cls(7) spr(1,x,y,1,1,false,false) end
キャラクターの座標を変数にする
いまは、キャラクターの座標はX:60、Y:60の位置に固定されています。
このままだと動くことができないので、座標を変数にします。
変数名=値
コードの頭に追記して、さっきのコードを修正します。
function _init() x=60 y=60 end function _draw() cls(7) spr(1,x,y,1,1,false,false) end
function _init()〜endという部分が追記されています。
function _init()は、プログラムが実行された時に、最初の一度だけ動作する命令です。ゲームの初期化処理を行います。
このコードの場合、xとyという変数をそれぞれ60という数字で定義しています。
スプライトを表示する部分(spr)の座標を、この変数x、yに変更しました。
x、yの数字を変えてプログラムを実行(ctrl+r / Macはcommand+r)すると、表示される座標が変わるはずです。
キー入力を調べる
次に「カーソルキーの上下左右どれが押されたかを調べる」という処理を作ります。
PICO-8は、上下左右とマルバツボタンの合計6このボタンを扱うことができます。
方向 | 番号 |
---|---|
←左 | 0 |
→右 | 1 |
↑上 | 2 |
↓下 | 3 |
O | 4 |
X | 5 |
それぞれ、こんな風に番号が割り当てられています。
何番のボタンが押されたら何をする、というのは次のような書式になります。
if btn( ボタン番号 ) then なにをする end
btn()は、キー入力の状態を調べる関数(命令)です。
指定した番号のキーが押されていれば「true(真)」押されていなければ「false(偽)」という結果を返します。
上記のコードは、もし(if)指定した番号のボタンが押されていたら(true)、そのときは(then)、〜〜をする、という構文になります。
キャラクターを上下左右に動かすには、ボタンに合わせて、次のような処理ができればオッケーです。
- 左を押したらX座標の値を減らす
- 右を押したらX座標の値を増やす
- 上を押したらY座標の値を減らす
- 下を押したらY座標の値を増やす
コードにすると、こうなります。
if btn(0) then x-=1 end if btn(1) then x+=1 end if btn(2) then y-=1 end if btn(3) then y+=1 end
少し付け足して、次のコードをエディターで追加します。
function _update() if btn(0) then x-=1 end if btn(1) then x+=1 end if btn(2) then y-=1 end if btn(3) then y+=1 end end
function _update()は、キー入力描画や座標の計算など、描画以外の処理を行い続ける命令です。
これも、function _draw()と同じく、通常1秒間に30回実行されます。
コード全体は、次のようになりました。
function _init() x=60 y=60 end function _update() if btn(0) then x-=1 end if btn(1) then x+=1 end if btn(2) then y-=1 end if btn(3) then y+=1 end end function _draw() cls(7) spr(1,x,y,1,1,false,false) end
実行してみましょう。
動きました!
function _update()の中の、x-=1などの数字を大きくすると、移動スピードが速くなります。
- function _init() 〜 end:初期化
- function _update() 〜 end:計算処理
- function _draw() 〜 end:描画処理
この3つの流れが、PICO-8のゲーム作りの基本、GameLoopです。
これで、ゲーム作りの基礎ができました。
次は、キャラクターに続いて、かんたんな背景を作ってみます。