合計 昨日 今日

横スクロールアクションでの背景画像の大きさについて

[このトピックは解決済みです]

フォーラムルール
フォーラムルールはこちら  ※コードを貼り付ける場合は [code][/code] で囲って下さい。詳しくはこちら
Name: 焼き魚
[URL]
Date: 2017年10月11日(水) 19:10
No: 1
(OFFLINE)

 横スクロールアクションでの背景画像の大きさについて

現在1920*1080の解像度で横スクロールアクションゲームを作っていて、背景画像に12000*1400の大きさの一枚絵を使用して問題なく動いているのですが、このような大きさの画像を使用して作り進めていくのは現実的なのでしょうか?もっと良い方法などがあれば教えていただきたいです。

Name: Dixq (管理人)
(管理人)
[URL]
ウィザード(1,483,388 ポイント)
Date: 2017年10月12日(木) 21:56
No: 2
(OFFLINE)

 Re: 横スクロールアクションでの背景画像の大きさについて

一昔前であれば考えられませんでしたが、12000*1400はメモリ展開時の容量がだいたい70MBと考えると非現実的な数字ではないですね。
ゲームの実行ファイルが数百MB食うということは近年珍しくなくなりました。
マップチップのような素材を組み合わせて背景を作るのが一般的だとは思いますが、メモリが潤沢にある現在では一枚絵も一つの選択肢かもしれません。

マップチップによる背景の作成方法をご存じない場合は検索してみてください。
https://www.google.co.jp/search?q=%E3%8 ... 64&bih=868
32x32のような単位でブロックを組み合わせて背景を作ります。
ただマップチップを利用するなら何らかのマップチップの管理ツールが必要になるでしょう。

Name: 焼き魚
[URL]
Date: 2017年10月13日(金) 01:17
No: 3
(OFFLINE)

 Re: 横スクロールアクションでの背景画像の大きさについて

[解決!]

回答ありがとうございます!
あり得る選択肢であることが分かり安心しました。
マップチップも魅力的なのですが、グラフィックに力を入れた作品を作ってみたいのでこのまま進めてみようと思います。

Name: usao
[URL]
ハッカー(138,420 ポイント)
Date: 2017年10月13日(金) 10:12
No: 4
(OFFLINE)

 Re: 横スクロールアクションでの背景画像の大きさについて

Offtopic :
> 1920*1080の解像度
の方が,一般的に許容されるサイズなのか否かがちょっと気になります.
例えば私のちょい古いPCとかでは遊べなそうなw

Name: 焼き魚
[URL]
Date: 2017年10月13日(金) 14:38
No: 5
(OFFLINE)

 Re: 横スクロールアクションでの背景画像の大きさについて

なるほどそっちもあるんですねw
解像度もうちょっと考えてみようと思います。

Name: Dixq (管理人)
(管理人)
[URL]
ウィザード(1,483,388 ポイント)
Date: 2017年10月13日(金) 19:22
No: 6
(OFFLINE)

 Re: 横スクロールアクションでの背景画像の大きさについて

確かに。1080pをデフォルトにするにはまだ早いです。
もしやりたいなら解像度を起動時に設定できるようにすべきでしょう。

日本のみであれば1080pがシェアの1位ですが、世界的には1366x768が解像度の1位を占めています。
日本でも2位です。
まだまだちょっと前のノートPCの主流解像度が高いシェアを占めています。

Name: 焼き魚
[URL]
Date: 2017年10月13日(金) 22:28
No: 7
(OFFLINE)

 Re: 横スクロールアクションでの背景画像の大きさについて

やはり1980*1080のみではできる環境が制限されてしまうんですね。
質問続きで申し訳ないのですが、dxlibで低い解像度でも高解像度と同じ表示領域で表示する(ズームせず)ことは可能ですか?

Name: Dixq (管理人)
(管理人)
[URL]
ウィザード(1,483,388 ポイント)
Date: 2017年10月14日(土) 20:43
No: 8
(OFFLINE)

 Re: 横スクロールアクションでの背景画像の大きさについて

ズームせずという意味がよくわかりませんが、それはいわゆるズームではないのでしょうか?
例えば画面を0.5倍に縮小したければ
SetWindowSizeExtendRate(0.5);
で可能です。

Name: 焼き魚
[URL]
Date: 2017年10月14日(土) 23:54
No: 9
(OFFLINE)

 Re: 横スクロールアクションでの背景画像の大きさについて

説明が難しくてややこしい感じになってしまいすみません。
今までSetGraphMode(1920,1080)に合わせて背景やキャラを作成し使用していたのですが、SetGraphModeで解像度を下げ800*600にするとどアップで拡大表示してしまいキャラクターが見えなくなってしまいます。
起動時に解像度を変更できるようにしたいのですがこの場合、低解像度用に少ないピクセルで画像を作り直すしかないのでしょうか?
それとも何らかの方法で1920*1080と800*600などで同じ範囲を表示させることはできますか?
SetWindowSizeExtendRateの場合、拡大表示のままウィンドウサイズが変わってしまいました。

Name: あたっしゅ
[URL]
中級者(10,284 ポイント)
Date: 2017年10月15日(日) 05:29
No: 10
(OFFLINE)

 Re: 横スクロールアクションでの背景画像の大きさについて

1920x1080 は Bluray Disk の解像度ですよね。64bit オンリーのアプリも増えていることだし、必 1920*1080 のゲームがあってもいいと思います。

Name: Math
[URL]
Date: 2017年10月15日(日) 07:36
No: 11
(OFFLINE)

 Re: 横スクロールアクションでの背景画像の大きさについて

インターネット上にもFull HDの画像が増えてますよね。Gameは60p。
https://ja.wikipedia.org/wiki/1080p

FullHD:=1080p:=2Kみたいな感じですがいずれ4Kになるのでしょうか。(^^)/

Name: 焼き魚
[URL]
Date: 2017年10月15日(日) 16:42
No: 12
(OFFLINE)

 Re: 横スクロールアクションでの背景画像の大きさについて

調べてみてもよく分からなかったのでとりあえずは1920*1080の解像度必須のゲームにしてみようと思いますw
解決積みにかかわらず色々アドバイスしていただきありがとうございました。

Name: ISLe
[URL]
ハッカー(264,705 ポイント)
Date: 2017年10月15日(日) 17:54
No: 13
(OFFLINE)

 Re: 横スクロールアクションでの背景画像の大きさについて

1920x1080を前提に作っていても、それを任意のサイズで表示することはほとんど手間をかけることなくできるのに、その手間を惜しむというのは選ばれたひとにしかプレイして欲しくないという意思表示になってしまうと思いますけどね。

1920x1080固定だと4Kディスプレイでは小さい画面でプレイするのを強制することになりますよ。
ファミコン時代の256x240とかのゲームがPCに移植されるのを豆粒のような画面でプレイしたくはないですよね。


1920x1080を800x600で表示したいのなら、SetGraphMode(1920,1080)のままで、SetWindowSizeExtendRate(0.416)とする。
ただし、この方法はアスペクト比が異なると誤差が大きかったり、環境によってドットが欠けるのを防げなかったりします。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include "DxLib.h"
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    // ↓↓↓↓
    SetGraphMode(1920,1080,32);
    SetWindowSizeExtendRate(0.416);
    // ↑↑↑↑
 
    ChangeWindowMode(TRUE);
    if (DxLib_Init() != 0) return 0;
    SetDrawScreen(DX_SCREEN_BACK);
 
    while (ProcessMessage() == 0 && ScreenFlip() == 0 && ClearDrawScreen() == 0) {
 
        // 1920x1080を前提とした描画
        DrawBox(0,0,1920,1080,GetColor(255,0,0),FALSE);
        DrawLine(0,0,1920,1080,GetColor(255,0,0));
        DrawLine(0,1080,1920,0,GetColor(255,0,0));
    }
 
    DxLib_End();
    return 0;
}


ユーザーに、より快適にプレイして欲しいと思うのであれば、オフスクリーンに描画してから、それを表示用画面に描画する方法をお勧めします。
コード[C++]: 全て選択
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
#include "DxLib.h"
 
int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow)
{
    // ↓↓↓↓
    // 描画位置とサイズを計算(拡大縮小アスペクト比汎用)
    int w = 800; // 画面サイズ
    int h = 600; // 〃
    int renderW = 1920; // 前提サイズ
    int renderH = 1080; // 〃
    double rw = (double)w / renderW;
    double rh = (double)h / renderH;
    if (rw > rh) {
        renderW *= rh;
        renderH = h;
    }
    else {
        renderW = w;
        renderH *= rw;
    }
    int renderX = (w - renderW) / 2;
    int renderY = (h - renderH) / 2;
 
    // 画面サイズを設定
    // ウィンドウモードなら上で計算したサイズを使ってアスペクト比による余白を無くすことが可能
    SetGraphMode(800,600,32);
    // ↑↑↑↑
 
    ChangeWindowMode(TRUE);
    if (DxLib_Init() != 0) return 0;
 
    // ↓↓↓↓
    // 前提サイズでオフスクリーンを作成
    int hOffScrn = MakeScreen(1920,1080);
    // ↑↑↑↑
 
    while (ProcessMessage() == 0 && ScreenFlip() == 0 && ClearDrawScreen() == 0) {
        // ↓↓↓↓
        // オフスクリーンに対して描画するように指定
        SetDrawScreen(hOffScrn);
        // 表示用画面に転送する際にフィルタを掛けるのでここでは画面全体に対してのフィルターを掛けない
        // コンテンツとしてのフィルターは別、掛け過ぎると表示が滲む
        SetDrawMode(DX_DRAWMODE_NEAREST);
        // ↑↑↑↑
 
        // 1920x1080を前提とした描画
        DrawBox(0,0,1920,1080,GetColor(255,0,0),FALSE);
        DrawLine(0,0,1920,1080,GetColor(255,0,0));
        DrawLine(0,1080,1920,0,GetColor(255,0,0));
 
        // ↓↓↓↓
        // バックバッファ(裏画面)に対して描画するように指定
        SetDrawScreen(DX_SCREEN_BACK);
        // 画面全体に対して掛けるフィルターを指定
        SetDrawMode(DX_DRAWMODE_BILINEAR);
 
        // オフスクリーンをバックバッファに描画
        DrawExtendGraph(renderX,renderY,renderW,renderH,hOffScrn,FALSE);
        // ↑↑↑↑
    }
 
    DxLib_End();
    return 0;
}

もとの前提サイズに対する描画処理はそのまま、それ以外の部分も定型で使い回せるので、手間は大きくありません。

オフスクリーンをバックバッファに描画する際、もっと(等倍で)大きなサイズのオフスクリーンに(フィルタなしで)描画して、それを表示用画面に描画するようにすると、細い線など細かい部分が欠けたりしない、さらに綺麗な描画を得られます。
#nVIDIAの最新のグラフィックドライバには、ドライバ側でそれをやってくれるようにする設定があります。

(追記)
前者の方法はマウス入力の座標変換をDXライブラリがやってくれますが、後者の方法は自前でやる必要があります。
マウスを使うゲームの場合は、綺麗な描画を得る代わりに、さらにひと手間増えるということになりますね。

Name: あたっしゅ
[URL]
中級者(10,284 ポイント)
Date: 2017年10月15日(日) 21:08
No: 14
(OFFLINE)

 Re: 横スクロールアクションでの背景画像の大きさについて

自分が持ってない解像度のモニタでの debug は、できないでしょ。アマチュアなんだから 4K モニタ買う義務なし。
ゲームが遊べるところまで持って行く方が大事。マルチ解像度対応は、その後でよし。
手提鞄あたっしゅ、[MrAtassyu]

Name: Dixq (管理人)
(管理人)
[URL]
ウィザード(1,483,388 ポイント)
Date: 2017年10月15日(日) 21:45
No: 15
(OFFLINE)

 Re: 横スクロールアクションでの背景画像の大きさについて

私も1080pがなければ遊べない仕様にすべきではないと思います。
上でも言った通り、一番多く使われている解像度は1366x768なわけですから・・。
1080pを前提に作っておき、起動時に最低限720pと1080pを選択できるようにすべきでしょう。
実現方法はSetWindowSizeExtendRateを使って任意の解像度で縮小拡大表示できるようにするのが一番簡単です。
SetWindowSizeChangeEnableFlag(TRUE);
をしておけば好きなサイズにリサイズできるのでなお親切でしょう。

Name: 焼き魚
[URL]
Date: 2017年10月16日(月) 00:39
No: 16
(OFFLINE)

 Re: 横スクロールアクションでの背景画像の大きさについて

ISLeさんのコードを参考に設定してみます!
お世話様でしたm(__)m


Return to C言語何でも質問掲示板

オンラインデータ

このフォーラムを閲覧中のユーザー: なし & ゲスト[17人]