レトロゲーム調は、作ろうとすると、以下の問題が起きます。
●ウィンドウ画面で実行させると画面が小さすぎて分かりにくい。デバッグチェックが厳しい
●フルスクリーンにすると目立ちますが、中間色でドット絵がぼけて表現できない
●画面更新が 60FPS,120FPS などPCのスペックにより変わってしまう
これらの点をクリアする必要があります。
上記3点をクリアしたソースコード
main.cpp
# include <Siv3D.hpp> // OpenSiv3D v0.4.2
void Main()
{
Graphics::SetTargetFrameRateHz(60); // 60FPS固定
Size genesis(320,224); // MegaDrive(海外だとGenesis)の幅と高さのピクセル
Window::SetTitle(U"Retro game"); // ウィンドウタイトル(フルスクリーンでは表示されない)
// ウィンドウの枠を非表示にする
//Window::SetStyle(WindowStyle::Frameless); // ウィンドウ枠を消す
Window::Resize(genesis*2); // ウィンドウ画面にしたとき、小さすぎて見えないので2倍にした
Scene::SetBackground(ColorF(0.8, 0.9, 1.0));
Window::SetFullscreen(true);
Scene::Resize(genesis);
//
// シーンをウィンドウに転送する際の拡大縮小フィルタを「補間なし」に
Scene::SetTextureFilter(TextureFilter::Nearest);
// 背景を水色にする
// 大きさ 60 のフォントを用意
const Font font(60);
// 320*224のテクスチャを用意(メガドライブと同じ画素数)
const Texture genesisScreen(U"sonic3tails.gif");
bool fullscreen = true;
while (System::Update())
{
if (KeySpace.down())
{
fullscreen = ! fullscreen;
Window::SetFullscreen(fullscreen); // Windowかフルスクリーン切り替え
Scene::Resize(genesis);
}
if (KeyN.down()) // 補間なし
{
Scene::SetTextureFilter(TextureFilter::Nearest);
}
if (KeyL.down()) // 補間あり
{
Scene::SetTextureFilter(TextureFilter::Linear);
}
genesisScreen.draw();
}
}
//https://siv3d.github.io/ja-jp/tutorial/window/
操作キー
● スペース Window画面、フルスクリーン切り替え
● N 補間なし、ドットがくっきり見える
● L 補完あり、境目の色の中間色で埋める、ぼやけた感じになる
動作はうまくいっている。
使用した画像:レトロゲーム画像、画素数同じ
↓ sonic3tails.gif で保存して OpenSiv3Dプロジェクトの Appフォルダ に入れる
この画面がフルスクリーンで表示されます。
レトロゲームが好きな人はこれで昔のゲーム機と同じドット絵でのフルスクリーン画面表示可能になります。
画面切り替えを1命令で簡単にできるようにしました。
ブロックをコピペして簡単に使用できます。
続きの記事はこちらです。
https://qiita.com/loppta/items/76aeaa29cd850cf9ad81