2022年 2月 18日
頻繁に戦闘画面に入るとチカチカするし、戦闘中はマップ画面を見れなくて不便なので、画面下のストックエリアに簡易戦闘画面を作る事にした。

でも、これって表示速度の関係で最初に断念した元の表示形態なんだよね。
なぜこれができるのかと言うと、HEXの大きさを大きくして表示個数が減ったのもあると思うけど、結局たぶん FPS 20(1秒間に 20回描画)は出てないのかもしれない。
一応 await 1000/50で設定はしてあるけど。
訂正
FPS 20の場合 1000/50ではなくて 1000/20でした。
await 50の書き方なら FPS 20ですね、ややこしい。
まあ STGや ACTゲームという訳では無いので FPS 20も要らないと言えば要らない。
ただし mes表示は決定的に遅い、このHEXに例えば HEX番号みたいのを mes表示させたりすると、話にならないくらい遅低する。
もちろん最終的に mes表示は全部使わない事になる、これは実機次第、つまり環境によって文字表示が変化してしまったりするためだけど。
表示はこのダイス目を

順番に表示して、数値も足されて表示するようにしている

ソース
#deffunc btl_put2 ; 簡易戦闘表示
font "",80 : color 255,255,255
; バックカラー
cn1=clpn(pn1)-1
color cld(cn1*3+1)*bacn/100,cld(cn1*3+2)*bacn/100,cld(cn1*3+3)*bacn/100
boxf 0,gk3y,270,wy
cn2=clpn(pn2)-1
color cld(cn2*3+1)*bacn/100,cld(cn2*3+2)*bacn/100,cld(cn2*3+3)*bacn/100
boxf 270,gk3y,540,wy
; エリア境界線
gmulcolor 255,255,255
repeat 540/8+1
pos 8*cnt,gw3y : celput wkw,46
pos 8*cnt,wy-8 : celput wkw,47
loop
n=20
repeat n
pos 0,wy-n*8+8*cnt : celput wkw,44
pos wx-8,wy-n*8+8*cnt : celput wkw,45
loop
pos 0,wy-n*8 : celput wkw,36
pos wx-8,wy-n*8 : celput wkw,37
pos 0,wy-8 : celput wkw,38
pos wx-8,wy-8 : celput wkw,39
; キャラ表示
gmode 2
gmulcolor 248,248,248
if ldcu(kln1)>0 : pos 6 ,807 : celput cuw(ldcu(kln1)),0,0.6,0.6
if ldcu(kln2)>0 : pos wx-6,807 : celput cuw(ldcu(kln2)),0,-0.6,0.6
; ダイスの目 pn1
if dn1f=0 and dpcb>dpc {
repeat dcpb
if dn1c>=dcpb : break
if p1dp(dn1c)=-1 : dn1c+ : continue
dn1=p1dp(dn1c) ; ダイスの目
cdwp1n=dn1c ; 金枠判定用
dn1f=1 : dn1c+
p1dnp+=dn1/2+1 ; 表示戦力
break
loop
}
dn1x=96 : dn1y=849
; 白目表示
gmulcolor 255,255,255
pos dn1x,dn1y : celput dc64whw,dn1
; ダイス表示
gmulcolor cld2(cn1*3+1),cld2(cn1*3+2),cld2(cn1*3+3)
pos dn1x,dn1y : celput dc64w,dn1
; cuダイス増の金枠表示
if cdwp1(cdwp1n)>0 {
gmulcolor 255,255,255
pos dn1x-4,dn1y-4 : celput dc64wkw
}
dn1fc+ : if dn1fc=dn1fcb : dn1f=0 : dn1fc=0
; 戦力数字表示
color 255,255,255
pos 172,839 : mes ""+p1dnp
; ダイスの目 pn2
if dn2f=0 and dpcb>dpc {
repeat dcpb
if dn2c>=dcpb : break
if p2dp(dn2c)=-1 : dn2c+ : continue
dn2=p2dp(dn2c) ; ダイスの目
cdwp2n=dn2c ; 金枠判定用
dn2f=1 : dn2c+
p2dnp+=dn2/2+1 ; 表示戦力
break
loop
}
dn2x=444-64 : dn2y=849
; 白目表示
gmulcolor 255,255,255
pos dn2x,dn2y : celput dc64whw,dn2
; ダイス表示
gmulcolor cld2(cn2*3+1),cld2(cn2*3+2),cld2(cn2*3+3)
pos dn2x,dn2y : celput dc64w,dn2
; cuダイス増の金枠表示
if cdwp2(cdwp2n)>0 {
gmulcolor 255,255,255
pos dn1x-4,dn1y-4 : celput dc64wkw
}
dn2fc+ : if dn2fc=dn2fcb : dn2f=0 : dn2fc=0
; 戦力数字表示
color 255,255,255
pos 290,839 : mes ""+p2dnp
; ATTACK、DEFENSE表示
font "",30
n=clpn(pn1)-1
color cld(n*3+1),cld(n*3+2),cld(n*3+3)
pos 6,wy-32
mes "ATTACK"
n=clpn(pn2)-1
color cld(n*3+1),cld(n*3+2),cld(n*3+3)
pos wx-110,wy-32
mes "DEFENSE"
return
dcpb = 最大ダイス数、16個 + 指揮官 3個で 19。
dn1c でその何番目参照かを定義して、使われていない(-1)の時は次の dn1cを参照するようにしている。
全ダイス表示しきったら後は wait分待つ。
使われていない(-1)は全画面戦闘表示ではダイスが描かれない空白を表す。
そんな所かな。