MENUITEM関数を使う

メニューからでも始められる PICO-8
メニューからでも始められる

現在制作中のゲーム「Magic Line」、ゲームスタートは、🅾️ ❎のどちらかのボタンを押すことで始まるようになっていました(このゲームだけではなく、過去の作品も全て)。

ただ、イベントで来場者に試遊してもらう時に、多くの方がコントローラーのスタートボタンを押していました。

スタートボタンを押すと、デフォルトの機能でメニューが出て、

  • CONTINUE
  • FAVOURITE
  • OPTIONS
  • RESET CART

の4つが選べるようになります。

いつかのバージョンアップでの新機能で、「メニューが云々」とか あったなあ、と思い出してマニュアルを検索して調べてみると、「Custom Menu Control」といって、このメニューの項目に新たに5つまで項目を追加できるとのこと(バージョン0.2.2でした)。

じゃあ、ここにSTART GAMEを追加したら良いのか。

と、追加するに どの様なコードを記述したら良いのか、色々と調べてみました(公式マニュアルでは、十分理解できなかったので)。

書き方は、MENUITEM(インデックス, [ラベル], [コールバック])で、インデックスは数字(1〜5)で、ラベルはメニューを開いた時に表示する文、コールバックはその項目を選んだ時に実行する関数です。

「なるほど!」と、menuitem(1,”start game”,function game_init() end)って書いたら、挙動がおかしい(2025/05/19 訂正 functionに()がなかったから みたい)。

他の解説サイトなどのサンプルコードを見て、function(b) if b > 16 then game_init() end endと記述して、落ち着きました(思ったように動作しました)。

メニューから始めるアニメ
メニューから始めるアニメ

ボタンチェックを、始めはbtn()やbtnp()を使ってみたのですが、これは挙動がおかしくなり、思ったように動きません。

引数のボタン入力データ各桁のビットのオンorオフで、どのボタンが押されたかチェックします。

🅾️ ❎ ボタンは それぞれ&16と&32でチェックでき、16以上なら どちらかが押されていることになります。

昔 作ったゲーム「ICE-MAN」、これも操作しなくてしばらくすると、マップが表示されるようにしたけれど、スタートボタンメニューで「SHOW MAP」を選択させて表示することが出来ると思い付きました。

それから最後に、メニューを出したままPICO-8の機能のスナップショットを撮っても、メニューは写らないことを知りました(なので 今回は、OSのスナップショット機能を使いました)。

2025/05/19 追記
メニューの動作をもう一度検証したところ、上下で選択して、決定したら(🅾️ ❎ スタートボタンのいずれか)指定した関数が実行されるようで、
menuitem(1,”start game”,function(b) if b > 16 then game_init() end end)
とif文を記述しなくても、
menuitem(1,”start game”,function() game_init() end)
で、動作しました。

コメント

タイトルとURLをコピーしました