2022年 6月 3日
メインのゲーム画面からオプション画面への切り替えを作った。
スクロール UI(スクロジカル・ユーザー・インターフェイス、適当)の考えにより、切り替えは画面をスクロールする事で切り替える。
メイン画面とオプション画面への切り替えは縦にスクロールする事で切り替える。
(スクロール中)
当然、横スクロールはマップのスクロールで使っているため。
オプションの画面は今の所「オプション1」「オプション2」「プレイヤーチェンジ」ができてる。
まだ出来てないのは「SAVE LOAD」
オプション同士は左右のスクロールで切り替える。
(スクロール中)
切り替えスクロールは専用のソースを作ってスクロール表示させた後、それぞれの画面ソースへ飛ぶようにしている。
切り替えスクロールのソース
#deffunc op_sc_put int _op_sc_putf op_sc_putf=_op_sc_putf switch op_sc_putf case 0 ; マッププット sc_mput stk_put swbreak case 1 : opt_put : swbreak ; オプション1 case 2 : opt_put2 : swbreak ; オプション2 case 3 ; プレイヤーチェンジ sc_mput 3 ; スクロールマップ表示 pc_put ; プレイヤーチェンジエリア表示 swbreak swend return *opt_scroll ; オプション切り替え switch opt_scf ; スクロール向きフラグ case 1 ; 上スクロール olx=0 : oly=0 repeat oly-=60 redraw 0 py=oly : op_sc_put ospf ; 元の py=wy+oly : op_sc_put optf ; 次の redraw 1 await 1000/50 if oly<=-wy : oly=0 : break loop swbreak case 2 ; 下スクロール olx=0 : oly=0 repeat oly+=60 redraw 0 py=-wy+oly : op_sc_put optf ; 次の py=oly : op_sc_put ospf ; 元の redraw 1 await 1000/50 if oly>=wy : oly=0 : break loop swbreak case 3 ; 左スクロール olx=0 : ly=0 repeat olx-=60 redraw 0 px=olx : op_sc_put ospf ; 元の px=wx+olx : op_sc_put optf ; 次の redraw 1 await 1000/50 if olx<=-wx : olx=0 : break loop swbreak case 4 ; 右スクロール olx=0 : oly=0 repeat olx+=60 redraw 0 px=-wx+olx : op_sc_put optf ; 次の px=olx : op_sc_put ospf ; 元の redraw 1 await 1000/50 if olx>=wx : olx=0 : break loop swbreak swend px=0 : py=0 return *option ; オプション optf=optgf repeat gosub *opt_scroll switch optf case 1 : gosub *option_1 : swbreak case 2 : gosub *option_2 : swbreak case 3 : gosub *pc_change : swbreak swend if mainf!5 or optf=0 : break loop if optf=0 : gosub *opt_scroll return
切り替え時、まず *optionに飛ぶ、そこから *opt_scrollに飛んでスクロール処理をする。
opt_scfの値により 1=上へ、2=下へ、3=左へ、4=右へ、スクロール処理する。
表示処理は op_sc_putで行う、スクロール元 ospf、スクロール先 optfの値により、どの画面を表示するか決める。
表示座標は、通常の表示座標に全て px,pyを足す事によって出している。
オプションの表示ソース
#deffunc opt_put gmode 2 ; 背景 pos px,py : celput opt1w ; option pos 157+px,24+py : celput gsft24w ; Map display speed pos 40+px,ot_mdy1+py : celput gsft16w repeat 5,1 pos gs_mdx(cnt)+px,ot_mdy2+py : celput fg50piw,cnt loop pos gs_mdx(bpwt1f)-25+px,ot_mdy2-25+py : celput gswd1w,0,0.8,0.8 ; Battle display speed pos 113+px,ot_bdy1+py : celput gsft17w repeat 5,1 pos gs_bdx(cnt)+px,ot_bdy2+py : celput fg50piw,cnt loop pos gs_bdx(bpwt2f)-25+px,ot_bdy2-25+py : celput gswd1w,0,0.8,0.8 ; 戦闘表示 pos 80+px,ot_cly1+py : celput gsft18w pos gs_c13x1+px,ot_cly2+py : celput gsft19w pos gs_c13x2+px,ot_cly2+py : celput gsft20w if btl_putf=0 : pos gs_c13x1-42+px,ot_cly2+2+py : celput guidew ; USE if btl_putf=1 : pos gs_c13x2-42+px,ot_cly2+2+py : celput guidew ; RANDOM ; 枠 gmulcolor 255,255,255 repeat 12 pos 40+cnt*40+px,py : celput gswk5w pos 40+cnt*40+px,920+py : celput gswk8w loop repeat 22 pos px ,40+cnt*40+py : celput gswk6w pos 500+px,40+cnt*40+py : celput gswk7w loop pos px ,py : celput gswk1w pos 500+px,py : celput gswk2w pos px ,920+py : celput gswk3w pos 500+px,920+py : celput gswk4w ; 操作変更 pos gs_btx1+px,gs_bty1+py : celput gsbt1w pos 71+px,878+py : celput gsft23w ; option2 pos gs_btx2+px,gs_bty2+py : celput gsbt1w pos 308+px,878+py : celput gsft22w return
全ての posに +px、+pyされてるのが分かると思う。
スクロールさせるので無ければ、この +px、+pyはいらない。