win10とwin7とでは文字列を表示した時に差異がある
つい先日気が付きました。
自分の開発環境はwin7にあるのでテストプレイもwin7で行なっていたのですが
cf2.5のゲームを動作させた時にwin7(恐らくはwin9辺りまでは同じ仕様の筈)
では何の問題もなく表示できていた文字列がwin10ではサイズが変わってしまう
(サイズが大きく表示される)・・・場合がある、と言う事に。
どうやって修正しようか・・・win7でもwin10でも同様に文字列を表示するには
どうすればいいだろうか・・・と言うのをずっと考えていました。
で、1週間くらい試行錯誤して一応解決方法を見つけたのでとりあえず記事に
残しておこうかなと、そんな次第。
画像にするとこれだけです。文字列の直ぐ隣に予めアクティブを置くだけ。
どう言う仕組みでフォントサイズが変わってしまうのかは自分には解りませんが
フォントサイズが変わったのか変わっていないのかを検出できれば、ひとまず
変わってしまう環境で動作している時のみ、フォントサイズを修正してやれば
良いと言う考え方をしています。
win7などではイベント実行中に命令でフォントを変更しても、サイズ変更で
境界線を変更しない限り文字列の表示範囲は変わらないのですが、win10では
何故かフォント変更時に境界線がリセットされてしまいます。
その結果想定しているテキストボックスから実際は文字がはみ出して表示
されてしまうと言う現象が発生します(他の環境でもそうなのかは未検証)。
なのでフォント変更時に境界線が変化したかどうかを見ればいいだけなので
位置が固定されているアクティブオブジェクトとの衝突をチェックしておいて
衝突しなければwin7、衝突していたらwin10を想定した設定にすれば良いと。
(ゲーム全体で必要となるのでフレーム開始時にフォントを変更しその結果を
グローバル変数に取っておくと良い)
まあこれもwindows10の仕様ないしcf2.5の仕様が変われば同様では
なくなると思いますが、少なくともwin7までのシステムでは影響を受けずに
組めるので安全性は高いと思います。
ただしwin10を検出した後は最適なフォントサイズをcfs2.5に指定する為に
『開発者が予め自分で調べておく』必要がありますので意外と面倒です。
もしかしたらエクステンション等で簡単に解決する方法があるかもしれませんが
こういった問題に出くわした時に自分で解決法を探ると言うのも醍醐味であるし
経験にもなるので面倒がらず、やってみるのが良いのではないかと。
今回はソフト開発の話なのでソフトな口調で。ではまたね。