C++ DXライブラリ ゲーム開発

【Dxlib】東方みたいな画面分割表示をする

 


 

まとめ

  • 画面分割表示の手段をまとめた

参考

今回ゲームの画面分割表示をするにあたり,
参考にしたページ.

qiita.com

dxlib.xsrv.jp

bituse.info

dixq.net

方法 1. MakeScreen() する

3つの中で一番凝(こ)った方法.
でも多分一番正攻法.

マルチパスレンダリングで実現する.

MakeScreen() でレンダリングターゲットを作成し,
ゲーム画面をそこに描画.
最後に裏画面に合成する,という方法.

詳しくはここが参考になる.

注意点としては,
MakeScreen() の第3引数を false にして,
アルファなしのレンダリングターゲットを作成する必要がある.

理由としては,最後に裏画面に合成する際に,
加算,減算などの処理を行ったものが,
無効化されてしまうため.

  • 引用

    因みに、MakeScreen で作成した『アルファチャンネル付きの描画対象にできるグラフィックハンドル』( 以降「仮画面」とします )に対して
    「乗算済みアルファ」の機能を使って描画処理を行った場合も、その仮画面を裏画面に描画した場合に
    「裏画面に描画される結果」が「仮画面に対して行った描画処理と結果が一致」するのは
    仮画面に対して一つのブレンドモードで描画を行い、仮画面を裏画面に描画する際も
    同様のブレンドモードで描画をした場合のみとなりますのでご注意ください。

最初この方法で作成していたのだが,
上記のアルファブレンドの仕組みにハマり,
↓ のような描画結果になってしまった.
f:id:gothlab:20210809130644j:plain

作成したカメラクラスとの相性が悪く,
結果的に上記問題が解決できず,
他の方法を採用することにした.

方法 2. SetDrawArea() する

SetDrawArea() という Dxlib の機能を使って実現する方法.

要は,ゲーム画面を指定の領域のみ描画することで実現する.

ここが参考になる.

今回はこの方法を採用することにした.

f:id:gothlab:20210809131745j:plain

ちなみに SetDrawArea() と Effekseer の相性が悪く,
エフェクトのアスペクト比が狂ってしまうが
それはまた別のお話...

上記スクリーンショットはこの問題を解決後のもの.

方法 3. 枠画像を表示する

3つの中で最もシンプルな方法.
ゲーム画面部分を透過した,
枠画像を表示するという方法.

四聖龍神録 はこの方法で実現しているようだ.

ぶっちゃけこの方法で十分で,
自分も過去タイトルはこの方法で行っていた.

しかし,
「Hellsinker.」の最終ステージような演出を行いたいという夢を見たので,
枠の裏側に弾などが描画されるのがまずく,
今回は不採用.

以上.

  • この記事を書いた人

GOTH

鹿児島県出身,吉祥寺在住の27歳.職業はゲーム会社でプログラマー.趣味はバイク,車,キャンプ,ガジェット,読書,そしてゲーム開発. サイトのテーマはプログラミングとガジェットでライフハック.たまに趣味に関する雑感や記録を残していく備忘録.ツイッターもやってます.
自己紹介
お問い合わせ

-C++, DXライブラリ, ゲーム開発