2022年 2月 4日
今度は国のサイコロとキャラ(CU)の表示をやる。
座標の算出が HEX単位では無くドット単位なので前回と違うし、これまた結構ややこしかった。
まず、元のダイスとキャラの座標は lcx(n),lcy(n)になる、これは n国の中心点座標を表す。
この座標の上下にダイスとキャラを表示している。
次にスクロール座標 lxを加味した座標を算出する。
x=lcx(n)-lx*hkx ; 補正座標x
hkxは HEXの横の間隔で 30ドット、lcxから lx × 30ドットを引くとスクロールの補正座標になる訳だ。
描き始め座標は左端固定なのでスクロールが右ヘなら補正座標は左へになる。
次に、このままだと前回と同じで、余白の部分とその右側の座標は求められないので、別の式で算出しなければいけない。
まず表示画面があって
マップの大きさがあって
マップをスクロールすると、表示画面より左のダイスとキャラは x 座標を補正して表示画面右に表示します。
オレンジの「補正表示しない座標エリア」のものは右にも表示されないので無視します、マップ画面が 2画面のためです。
そのエリアの右端と左端はダイスとキャラの表示端が、画面端で欠けないように補正表示します。
つまり、補正表示するのは表示画面から 2画面左のエリアからです。
2画面 +余白分、右に補正します。
式はこうなってます。
x=lcx(pldn)-lx*hkx ; 補正座標x if x<-20 { ; 左端より左 if -wx+20<x : continue ; 2倍左端より右 x+=wx*2+(schk+1)*hkx ; 右端へ }
lcxが元の表示座標で、wxは画面の xの大きさです。
schkは余白ですけど、なぜか +1しないとピッタリ合いません、理由は分かりません。
マップが 3画面の時はこうなります。
if x<-20 { ; 左端より左 if -wx*3+20<x : continue ; 3倍左端より右 x+=wx*3+(schk+1)*hkx ; 右端へ }
割とややこしかった