モニタ解像度2560*1440問題の報告
何かの拍子が思いのほか早く訪れたのでご報告。
ひとまず下載ファイルが対処版になります。
これで2560*1440でも動くという確信はまだ得られてないですが、よければ。
https://33.gigafile.nu/0922-ddd2572211bed97c9e003d492936a1f5c
以下は問題の詳細で、多分RPGツクールユーザ向けの内容。
今後同様の問題に遭遇する人がいるかもしれないので一応書き残しておきます。正直Rubyのことが良くわかってるとは言いがたいので、どっかしら間違ってたらご指摘いただければ幸いです。
まず、不具合の条件となっていたのは「2560」という数値そのものでした。
少なくとも私が把握しているもののなかでより正確に申し上げれば「2560~2815(0xA00~0xAFF)」の範囲内にある値が今回の問題を発生させる因子となるようです。
コード内での原因はArray#packとString#scanの併用です。
2560~2815周辺の数値を 'l' で pack してみたところ
[2559].pack('l') -> "\xFF\t\x00\x00"
[2560].pack('l') -> "\x00\n\x00\x00"
[2815].pack('l') -> "\xFF\n\x00\x00"
[2816].pack('l') -> "\x00\v\x00\x00"
このようになり、当該の2560と2815では二文字目が \n 即ち改行コードとして認識され scan の際に不都合な結果を取得していました。
この投稿の前日にご協力いただいた動作確認用のゲームファイルでも、プライマリモニタの解像度を取得し、縦横長の数値配列を pack 後に scan している部分があり、見事、ひっかかってしまったものと想定されます。
ひとまず下載ファイルが対処版になります。
これで2560*1440でも動くという確信はまだ得られてないですが、よければ。
https://33.gigafile.nu/0922-ddd2572211bed97c9e003d492936a1f5c
以下は問題の詳細で、多分RPGツクールユーザ向けの内容。
今後同様の問題に遭遇する人がいるかもしれないので一応書き残しておきます。正直Rubyのことが良くわかってるとは言いがたいので、どっかしら間違ってたらご指摘いただければ幸いです。
まず、不具合の条件となっていたのは「2560」という数値そのものでした。
少なくとも私が把握しているもののなかでより正確に申し上げれば「2560~2815(0xA00~0xAFF)」の範囲内にある値が今回の問題を発生させる因子となるようです。
コード内での原因はArray#packとString#scanの併用です。
2560~2815周辺の数値を 'l' で pack してみたところ
[2559].pack('l') -> "\xFF\t\x00\x00"
[2560].pack('l') -> "\x00\n\x00\x00"
[2815].pack('l') -> "\xFF\n\x00\x00"
[2816].pack('l') -> "\x00\v\x00\x00"
このようになり、当該の2560と2815では二文字目が \n 即ち改行コードとして認識され scan の際に不都合な結果を取得していました。
この投稿の前日にご協力いただいた動作確認用のゲームファイルでも、プライマリモニタの解像度を取得し、縦横長の数値配列を pack 後に scan している部分があり、見事、ひっかかってしまったものと想定されます。