2022年 3月 4日
プレイヤー操作と NPC(コンピューター)の切り替えを実装しました。

ちょっと分かりにくいけど、明るい国が操作国、暗い国が NPCで、押すたびに切り替わる。
元は NPCの国が操作可能になっている。

今の所、操作変更画面への切り替えは上下にスライドする事でできるようにしている。
左右へのスライドはマップのスクロールで使っているので。
少しスマホのゲームをやってるけど、相変わらず「字が小さい、表示が小さい」ので、目が疲れる。
目を悪くしてさらに実感してるけど、スマホの表示と目への悪影響は製作者として十分に考慮すべきだと思う。
一つにはオートで冒険が進んで勝手にアイテムを収集してくれるような「半放置系」ゲームとか、とにかく「ずっと画面を見続けない」ようなものの方がやはり好ましい気がする。
表示をなるべく大きくするのは当然として、自分としては操作概念として SUI(スクロジカル・ユーザー・インターフェイス、適当)のようなものを取り入れたいと考えている。
簡単な話で、要は「画面が狭ければ上下左右へのスクロールを補助画面として使えば良い」程度の事。
もちろんこれは今のスマホでも左右への画面スクロールはあるし、上下での画面機能切り替えもある。
その一貫として、今回はオプションやセーブロードへの切り替えはボタンでは無くて上下スクロールにしたいと考えている。
むろん、左右が使えればその方が分かりやすいかも。
スマホでゲームをしていて、ボタン横 5個並び(機能呼び出し系ボタンで)でも小さいと思った。
確かに年齢的な老眼という事もあるとは思うけど、なるべく子供の内から目は大切にした方がよいだろう。
ちなみに、だけど今回目を悪くしたのはどうやら糖尿病の一貫で「糖分の取りすぎ」らしい、未だに完治しない、食事の量を減らしている時だけ調子が良い。
歳をとったら糖分の取りすぎには注意しよう。
操作のソース
;---------- キー入力 ----------
#deffunc scr_key ; スクロール入力
;mx=mousex : my=mousey ; カーソル位置
;stick k,256 ; マウスボタン、スマホクリック
mkn=-1 ; hex座標
k=0 : mx=0 : my=0 ; 入力リセット
repeat 1
if kwc>0 : kwc- : break ; ウエイト
mx=mousex : my=mousey ; カーソル位置
stick k,256 ; マウスボタン、スマホクリック
loop
; 押してる
repeat 1
if k!256 : break
if kf=0 : kf=1 : kepx=mx : kepy=my : keplx=lx
if kf=1 {
if kepx-mx>8 or mx-kepx>8 : kf=2 ; スクロールモード
if kepy-my>20 or my-kepy>20 : kf=3 ; 他画面
}
if kf=2 and scf>=2 { ; スクロール
lx=keplx+(kepx-mx)/20;hkx
if lx<0 : lx=lx+hxb+schk
if lx>=hxb+schk : lx=lx-(hxb+schk)
}
loop
return
加わったのは
if kepy-my>20 or my-kepy>20 : kf=3 ; 他画面
の部分で、今の所、上下に2 0ドット以上スライドすると切り替わるようになってる。
メインソース
*pc_change ; 操作変更
repeat
scr_key ; スクロール入力
pc_key ; データエリア入力
; 押してない
repeat 1
if k=256 : break ; 放してない
if kf=0 : break ; 一度も押してない
if kf=2 : kf=0 : break ; スクロールモード
; 押して放した
; ゲームへ戻る
if pc_keyn=1 or pc_keyn=2 or kf=3 {
if pfd(pn1)=1 : msf=1 ; メインスイッチフラグ
if pfd(pn1)=2 : msf=2 ; CPU
}
kf=0 ; リセット
mkn_syo ; HEX座標(mkn)
if mkn>=0 {
mpn=map(mkn)
if mpn>0 {
pn=(lpd(mpn)) ; 国No.
pfd(pn)+ : if pfd(pn)>2 : pfd(pn)=1
}
}
loop
if msf!5 : break ; 戻る
redraw 0
sc_mput ; スクロールマップ表示
pc_put ; プレイヤーチェンジエリア表示
redraw 1
await 1000/50
loop
return
表示や国のタップ座標自体は、メインと変わらないので、後は押した国の操作を切り替えるだけになってる。
if mkn>=0 {
mpn=map(mkn)
if mpn>0 {
pn=(lpd(mpn)) ; 国No.
pfd(pn)+ : if pfd(pn)>2 : pfd(pn)=1
}
}
の部分、pfd(プレイヤーフラグデータとかなんとか)がそのデータで、1 = プレイヤー、2 = NPCを切り替えるだけ。
今回は以上です。