CDW マップを複数画面にする Part2


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 ; 右端へ
	 }

 
 
 割とややこしかった

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です