カテゴリー
やってみようPICO-8

2. キャラを動かす

表示したスプライトを、カーソルキーで動くようにしてみよう。

前回「キャラを表示する」からの続きです。
表示したキャラクターを動かしてみましょう。

今回の完成コード

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
O4
X5

それぞれ、こんな風に番号が割り当てられています。
何番のボタンが押されたら何をする、というのは次のような書式になります。

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です。

これで、ゲーム作りの基礎ができました。

次は、キャラクターに続いて、かんたんな背景を作ってみます。