편리한 Window<> 전체 화면 전환

14777 단어 XNAOpenSiv3DC++
TogleFullScreen() 함수 제작
함수만 호출하면 XNA 라이브러리의 윈도와 전체 화면을 전환할 수 있는 기능입니다.
XNA 라이브러리를 사용할 때 도움을 받았습니다.
요약하면 XNA 라이브러리에서
            this.graphics.ToggleFullScreen();
이 명령만 있으면 Windows≥전체 화면으로 전환할 수 있습니다.
과거 보도 (이하) 에서 윈도와 전체 화면 전환이 진행되고 있으며, 이를 개조하고 싶습니다.
그때부터 OpenSiv3D(0.4.3)가 약간 업그레이드되었습니다.
배율 윈도 나올 때 괜찮아요.
빈티지 게임 사이즈를 곱하면 화면이 너무 작아요.
3배를 나타내려면 어쨌든 처음이라면 다음과 같다.
등배 화면의 오른쪽 하단에 공백이 표시됩니다.

그리고 이 동작을 피하기 위해 억지로 조립했습니다.
openSiv3d_main.cpp
# include <Siv3D.hpp> // OpenSiv3D v0.4.3
namespace System2
{
    /// <summary>
    /// 一定時間待つ
    /// </summary>
    /// <param name="ms">待つ時間(ミリ秒)</param>
    void Sleep(int ms)
    {
        for (Stopwatch sw(true); sw.ms() < ms;);
    }
}
namespace TVgame
{
    //http://site.oukasei.com/?p=1230
    const Size DreamCast=   DisplayResolution::VGA_640x480;
    const Size PS4HD    =   DisplayResolution::HD_1280x720;
    const Size PS4FHD   =   DisplayResolution::FHD_1920x1080;
    const Size NES      =   Size{ 256, 224 };
    const Size FC       =   Size{ 256, 224 };
    const Size SFC      =   Size{ 256, 224 };
    const Size GENESIS  =   Size{ 320, 224 };
    const Size MD       =   Size{ 320, 224 };
    const Size SEGA_MS  =   Size{ 256, 224 };
    const Size SEGA_MK3 =   Size{ 256, 192 };
}
namespace Graphics2
{
    void SetScreenSize(Size screenSize = DisplayResolution::HD_1280x720, bool fullScreen = false, double scale = 1);
    void ToggleFullScreen();
}
namespace Graphics2
{
    Size sceneSize;
    Size windowSize;
    /// <summary>
    /// 
    /// 画面のサイズ決定
    /// 
    /// ToggleFullScreenができるようにします
    /// 
    /// Windowsサイズが小さすぎるとき、scaleを2以上にしてください
    /// </summary>
    /// <param name="screenSize">画素数  TV</param>
    /// <param name="fullScreen">全画面</param>
    /// <param name="scale">Windowの表示サイズが小さすぎるときに1より大きい数を入れてください</param>
    void SetScreenSize(Size screenSize,bool fullScreen,double scale)
    {
        Graphics2::windowSize = (screenSize * scale).asPoint();
        Window::Resize(Graphics2::windowSize); //重いのでこの命令はフルスクリーン切り替え時には行わない
        Graphics2::sceneSize = screenSize;
        Scene::Resize(screenSize);
        fullScreen = !fullScreen; // これをしないとscaleが1以外の値が入ると描画がおかしくなるため仕方なく
        Window::SetFullscreen(fullScreen);
        Graphics2::ToggleFullScreen(); // これをしないとscaleが1以外の値が入ると描画がおかしくなるため仕方なく
    }
    /// <summary>
    /// Window画面<>フルスクリーン切り替え
    /// </summary>
    void ToggleFullScreen()
    {   
        static int first = 0;
        static bool fullScreen=false;
        fullScreen = !fullScreen;
        Window::SetFullscreen(fullScreen);  // Windowかフルスクリーン切り替え
        Scene::Resize(Graphics2::sceneSize);
    }
};
//https://sorceryforce.net/ja/tips/xna-system-toggle-fullscreen

void Main()
{
    Graphics::SetTargetFrameRateHz(60);   // 60FPS固定
// MegaDrive(海外だとGenesis)の幅と高さのピクセル
    Window::SetTitle(U"Retro game");  // ウィンドウタイトル(フルスクリーンでは表示されない)
    // ウィンドウの枠を非表示にする
    //Window::SetStyle(WindowStyle::Frameless);   // ウィンドウ枠を消す

    bool fullscreen = true;
#ifdef _DEBUG
    fullscreen = false;
#endif

    Graphics2::SetScreenSize(TVgame::GENESIS,fullscreen,3);

    // シーンをウィンドウに転送する際の拡大縮小フィルタを「補間なし」に
    Scene::SetTextureFilter(TextureFilter::Nearest);

    // 背景を水色にする

    // 大きさ 60 のフォントを用意
    const Font font(60);

    // 320*224のテクスチャを用意(メガドライブと同じ画素数)
    const Texture genesisScreen(U"sonic3tails.gif");

    while (System::Update())
    {
        if (KeySpace.down())
        {
            Graphics2::ToggleFullScreen();// Windowの時、画面が小さいので2倍に拡大
        }
        if (KeyN.down()) // 補間なし
        {
            Scene::SetTextureFilter(TextureFilter::Nearest);
        }
        if (KeyL.down()) // 補間あり
        {
            Scene::SetTextureFilter(TextureFilter::Linear);
        }
        genesisScreen.draw();
    }
}

스페이스바를 사용하여 Window<> 전체 화면을 전환할 수 있습니다.
이것에 의하면 게임 하면 전체 화면이죠!이런 사람도 괜찮아.
전체 화면은 인터럽트 삽입 디버깅 작업에 큰 장애를 초래할 수 있다
그럴 때는 윈도 화면을 간단하게 만들 수 있다.
Window를 3배로 확대합니다.스페이스바를 사용해도 전체 화면을 표시할 수 있다.

아래 이미지sonic 3 tails를 마우스 오른쪽 버튼으로 클릭합니다.gif라는 이름으로 저장해 프로젝트의 앱 폴더에 넣으면 사용할 수 있다.

여담:
XNA 라이브러리에도 편리한 지령이 있기 때문에 간혹 동등한 기능도 고려하고 싶다.
외국인들은 XNA 라이브러리와 비슷한 도서관에서도 인기가 있는 것 같은데, 역시 무나무 밑에서 불타는 사람들만 있는 것 같다.
MonoGame FNA 말고도 몇 개 더 있다고 생각해요.이미지는 XNA 호환 라이브러리입니다.
OpenSiv3D 0.4.3의 다음 버전이 나왔습니다.
새로운 기능이 추가됨에 따라 프로젝트 생성 시 100M 이상 증가했다.
나는 대단한 기능을 사용하지 않았다. 가능하다면, 나는 DX 라이브러리처럼 2D밖에 없는 OpenSiv3D 같은 다른 것을 원한다.
또한 60FPS에 설정된 명령도 왠지 모르게 사라졌는데 장치 제어에 치명적인 오류가 있었나요
불안하니까 상황을 봐야지.
다른 도형 제어도 그 근처에 있을지도 모른다.
물리적 및 3D 기능이 복원되어 FBX 파일과 동작 데이터 등은 아직 사용할 수 없습니다.

좋은 웹페이지 즐겨찾기