HSPを始めたばかりの者です。
最近、自分なりにRPGやアドベンチャーゲームのメニューの様な物を作ったのですが、
そこでの「stick」の使い方に疑問があり質問させていただきます。
作ってたプログラムから単体で動くように抜き出したので不自然な点もあるとは思いますがご容赦ください。
;起動直後の設定 meseno=0;メニュー画面番号 sel=0;選択中の番号 max=3;各メニュー画面の最大選択数 *menucore title "Menu test" if bgm=0:mmstop redraw 0 color 0,0,0 boxf gosub *message redraw await 1 goto *menucore *message gosub *move if meseno=0:{ pos 30,0:color 255,255,255:font msgothic,20,1 mes "メニュー1" mes"" mes"次のメニュー";ここでenterを押すと mes"フラッシュ" mes"おわり" } if meseno=1:{ pos 30,0:color 0,255,255:font msgothic,20,1 mes "メニュー" mes"" mes"おわり";続いてこちらも実行されてしまう mes"もどる" } mes sel mes "↑↓キーで移動、enterキーで決定" return *move stick key if key&2 : sel-- : if sel=-1 : sel=max-1;上 if key&8 : sel++ : if sel=max : sel=0;下 if key&32 { ;エンターを押す color 0,255,0 if meseno=0{ if sel=0:cls 4:wait 1:meseno=1:max=2:sel=0 if sel=1:cls 1:wait 1 if sel=2:end } if meseno=1{ if sel=0:cls 4:end if sel=1:cls 1:wait 1:meseno=0:max=3:sel=0 } } color 255,255,255 :pos 10,sel*20+40: mes ">> <<" return
このスクリプトの中で、キー操作をstickで制御しています。
stick命令は押した瞬間だけを感知すると思ったのでメニューに最適だと思って使用したのですが、
このプログラム上だと、メニュー1の「次のメニュー」を押すと、キー入力が止まらないのか、
次のメニューの同じsel番号(=end)を実行してしまいます。(end命令自体は分かりやすくするための意図的な事です)
希望はメニュー画面で一旦止まる事なので自分なりに色々考えてスクリプトを弄ってみましたが、続けて実行されてしまうのに変わりありませんでした。
仮の対処方法(2番目のメニューではスペースキーに変えるなど)も考えましたが、
もっとスマートな方法があるのかもしれないとも思っています。
stickの正しい(良い)使い方、問題点など指摘して頂ければと思います。