"Ootake" Nonsupport BBS ノンサポート掲示板 管理:ソフト開発グループ「Finath(ファイナス)」

現在までに、4361人の方が、この書き込みをご覧になっています。

20/08/08(土)12:36 汁ダーク
フルスクリーン時のアスペクト比調整について

少しは実用的な話です。
以前、私がOotakeをあまり使っていなかった理由は主に2つ。

(1)バイリニアフィルタがない
(2)主にノートPCを使っているので、フルスクリーン時の画面が横に引き伸ばされてしまう事が多い。

今使っているノートPCには、丁度会うスクリーンサイズが存在するので大丈夫w
この2点を別プラットホームでなんとかしたかった事もあって、当時のめり込んだ訳です。


で、今は別に困ってないんですけど、別プラットホームから移植している内に、対応策を思い付きました。

「起動直後のアスペクト比を記憶して、フルスクリーン時の横幅に反映」すればいいんじゃないかと。

通常、PCで使用している時の解像度は、X,Yが1:1になる設定にしてあるんじゃないかという、自分の経験からくる発想ですね。


私の場合は、どういう風に実現しているかOotakeのソースに即した感じで抜粋すると
[App.cpp]
Sint32
APP_GetGameWidth(
Sint32 magnification)
{

double wmag, hmag, fullmag, adjstmag = 1.0; // フルストレッチ時の倍率判定用

// フルスクリーン時は起動時のアスペクト比に調整する
if (_bFullScreen && _ScreenHeight > 0 && _WindowAspect > 0.0){
fullmag = (double)_ScreenWidth / _ScreenHeight;
// フルスクリーン時の方が小さかった場合は縮小する
if( fullmag < _WindowAspect ) adjstmag = fullmag / _WindowAspect;
}

// フルストレッチでアスペクト比固定の場合は倍率の低い方に合わせる
if (bFullStretche && bStretche && _GameWidth > 0 && _GameHeight > 0)
{
wmag = (double)_ScreenWidth / _GameWidth;
hmag = (double)_ScreenHeight / _GameHeight;
if( wmag > hmag ) wmag = hmag;
width = _GameWidth * wmag * adjstmag + 0.5;

void
APP_SetScreenSize()
{
int cx, cy;

cx = GetSystemMetrics(SM_CXSCREEN);
cy = GetSystemMetrics(SM_CYSCREEN);
if( cx > 0 && cy > 0 ){
_WindowAspect = (double)cx / cy;
}
}

[WinMain.cpp]

// 起動時の解像度アスペクト比を記憶する(フルスクリーン時の横幅調整に使用)
APP_SetScreenSize();


Ootakeとはストレッチの方針が少し違いますけど、参考になれば。

ただ、これで全員の環境にマッチするかどうかは・・・
少数だとは思いますけど、改悪になってしまう方もいるでしょうし。

利点としては、スペックの関係で低い解像度にしたい場合、引き伸ばされる様な解像度でも問題なくなる、位でしょうか。


メッセージ一覧へ戻る

Copyright(C)1997-2007 Kitao Nakamura.