![見出し画像](https://assets.st-note.com/production/uploads/images/49678537/rectangle_large_type_2_93a259d573f1fbded8caa2238dafee1d.png?width=1200)
ゲームウィンドウを画面中央にする
前回は「HSPでゲームウィンドウ作成」の記事でゲームウィンドウの設定方法を紹介しました。今回作成していく的当てゲームでは、起動時にウィンドウを画面中央に配置しようと思います。
では今回も「HSPアシスタント」を起動して目的の機能を達成できそうな項目を探していきます。使えそうな項目として「画面情報の取得 > デスクトップ全体のXサイズ取得」、「画面情報の取得 > デスクトップ全体のYサイズ取得」がありました。
この項目を利用するとHSPスクリプトエディタ上に下記のコードが入力されるはずです。
ginfo_dispx
ginfo_dispy
これらはドキュメントによると「デスクトップ全体のサイズ(画面解像度)が代入されます。」とあります。正直なところ、これだけの情報量では使い方がピンと来ないのでサンプルを探してみます。
ドキュメントページには「サンプル逆引き」という項目があります。このリンクを辿ると実際にコマンドが使われている例を見ることができます。今回の使い方の参考になりそうなのは「demo.hsp」になります。
リンク先に飛び、検索(ショートカットctrl+f)をかけてみます。世の中のソフトウェアの検索ショートカットの多くは「ctrl+f」であることが多いので、そのページ内で何かを検索したい場合はとりあえず「ctrl+f」を実行してみましょう。
上図のように「ginfo_dispx」と「ginfo_dispy」というのは引き算、割り算のような四則演算ができるものだと分かります。具体的には次の式からそれが読み取れます。
x=(ginfo_dispx-640)/2
上記の式をプログラマーなら
「ginfo_dispxから640引き、その値を2で割り、計算結果をxに入れる」
と解釈します。
これはプログラミングを始めたての人には新しい感覚だと思います。つまりどういうことなのでしょうか?と言いたくなるかもしれません。しかし、同じような式を何度も書いていくうちに慣れる必要があるとしか言えません。
ひとまず、ここでは計算結果が「x」の中に入っていると考えて下さい。ドキュメントによると「ginfo_dispx」の中には「デスクトップ全体のサイズ」が入っているので、もしあなたが使用しているモニターの横幅サイズが1280ピクセルであれば次の計算と同じになります。
x=(1280-640)/2
どうやらこれを応用すればウィンドウを画面の中央に配置することができそうです。なぜなら、「ginfo_dispx」を2で割るとモニター中央の位置が計算できるからです。実際にやってみます。
screen 0 , 640 , 480 , 0 , ginfo_dispx/2 , ginfo_dispy/2
上記を実行してもウィンドウが中央に来ていないと感じるかもしれません。実際にウィンドウは中央に来てません。しかし、ウィンドウの左上の位置がモニター中央に来ているように見えます。
つまり、ウィンドウのサイズが1であれば中央に来るということになります。今回のウィンドウには横幅と縦幅があるので、そのサイズの半分をマイナスしてあげれば中央に来そうです。
従って、コードはウィンドウサイズの半分をマイナスすることになるので下記のようになります。
screen 0 , 640 , 480 , 0 , ginfo_dispx/2 - 320 , ginfo_dispy/2 - 240
スクリプトを実行するとウィンドウが中央に来たのではないでしょうか?先ほど、「x」に計算結果が入ったコードを紹介しましたが、その計算結果を使う方法も紹介しておきます。「x」に計算結果が入っているので「x」は下記のように使えます。
x = ginfo_dispx/2 - 320
screen 0 , 640 , 480 , 0 , x , ginfo_dispy/2 - 240
最終的なコード
最後に紹介したコードをもう少し整えます。「x」が使えるなら「y」だって使えます(使えないものもあるのでその時はエラーで教えてくれます)。
window_width = 640
window_height = 480
x = ginfo_dispx/2 - window_width/2
y = ginfo_dispy/2 - window_height/2
screen 0 , window_width , window_height , 0 , x , y
上記のようにするとプログラムらしく見えるのではないでしょうか?
Sacchy
よろしければ明日のカップラーメン代のサポートをお願いします!