Bagikan melalui


Port perulangan permainan

Ringkasan

Menunjukkan cara mengimplementasikan jendela untuk game Platform Windows Universal (UWP) dan cara membawa perulangan game, termasuk cara membangun IFrameworkView untuk mengontrol CoreWindow layar penuh. Bagian 3 dari Port, aplikasi Direct3D 9 sederhana ke panduan DirectX 11 dan UWP .

Membuat jendela

Untuk menyiapkan jendela desktop dengan viewport Direct3D 9, kami harus menerapkan kerangka kerja windowing tradisional untuk aplikasi desktop. Kami harus membuat HWND, mengatur ukuran jendela, menyediakan panggilan balik pemrosesan jendela, membuatnya terlihat, dan sebagainya.

Lingkungan UWP memiliki sistem yang jauh lebih sederhana. Alih-alih menyiapkan jendela tradisional, game Microsoft Store menggunakan DirectX mengimplementasikan IFrameworkView. Antarmuka ini ada untuk aplikasi dan game DirectX untuk berjalan langsung di CoreWindow di dalam kontainer aplikasi.

Catatan Windows menyediakan pointer terkelola ke sumber daya seperti objek aplikasi sumber dan CoreWindow. Lihat Menangani ke Operator Objek (^).

 

Kelas "utama" Anda perlu mewarisi dari IFrameworkView dan menerapkan lima metode IFrameworkView : Menginisialisasi, SetWindow, Memuat, Menjalankan, dan Membatalkan inisialisasi. Selain membuat IFrameworkView, yang merupakan (pada dasarnya) tempat game Anda akan berada, Anda perlu menerapkan kelas pabrik yang membuat instans IFrameworkView Anda. Game Anda masih memiliki executable dengan metode yang disebut main(), tetapi yang dapat dilakukan utama adalah menggunakan pabrik untuk membuat instans IFrameworkView .

Fungsi utama

//-----------------------------------------------------------------------------
// Required method for a DirectX-only app.
// The main function is only used to initialize the app's IFrameworkView class.
//-----------------------------------------------------------------------------
[Platform::MTAThread]
int main(Platform::Array<Platform::String^>^)
{
    auto direct3DApplicationSource = ref new Direct3DApplicationSource();
    CoreApplication::Run(direct3DApplicationSource);
    return 0;
}

Pabrik IFrameworkView

//-----------------------------------------------------------------------------
// This class creates our IFrameworkView.
//-----------------------------------------------------------------------------
ref class Direct3DApplicationSource sealed : 
    Windows::ApplicationModel::Core::IFrameworkViewSource
{
public:
    virtual Windows::ApplicationModel::Core::IFrameworkView^ CreateView()
    {
        return ref new Cube11();
    };
};

Port perulangan permainan

Mari kita lihat perulangan game dari implementasi Direct3D 9 kami. Kode ini ada dalam fungsi utama aplikasi. Setiap iterasi perulangan ini memproses pesan jendela atau merender bingkai.

Perulangan game di game desktop Direct3D 9

while(WM_QUIT != msg.message)
{
    // Process window events.
    // Use PeekMessage() so we can use idle time to render the scene. 
    bGotMsg = (PeekMessage(&msg, NULL, 0U, 0U, PM_REMOVE) != 0);

    if(bGotMsg)
    {
        // Translate and dispatch the message
        TranslateMessage(&msg);
        DispatchMessage(&msg);
    }
    else
    {
        // Render a new frame.
        // Render frames during idle time (when no messages are waiting).
        RenderFrame();
    }
}

Perulangan game serupa - tetapi lebih mudah - dalam versi UWP dari game kami:

Perulangan game masuk ke metode IFrameworkView::Run (bukan main()) karena fungsi game kami dalam kelas IFrameworkView .

Alih-alih menerapkan kerangka kerja penanganan pesan dan memanggil PeekMessage, kita dapat memanggil metode ProcessEvents bawaan ke CoreDispatcher jendela aplikasi kita. Tidak perlu perulangan game untuk bercabang dan menangani pesan - cukup panggil ProcessEvents dan lanjutkan.

Perulangan game di game Microsoft Store Direct3D 11

// UWP apps should not exit. Use app lifecycle events instead.
while (true)
{
    // Process window events.
    auto dispatcher = CoreWindow::GetForCurrentThread()->Dispatcher;
    dispatcher->ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent);

    // Render a new frame.
    RenderFrame();
}

Sekarang kita memiliki aplikasi UWP yang menyiapkan infrastruktur grafis dasar yang sama, dan merender kubus berwarna-warni yang sama, seperti contoh DirectX 9 kami.

Kemana aku harus pergi dari sini?

Tanya Jawab Umum pemindahan Marka buku DirectX 11.

Templat DirectX UWP menyertakan infrastruktur perangkat Direct3D yang kuat yang siap digunakan dengan game Anda. Lihat Membuat proyek game DirectX dari templat untuk panduan tentang memilih templat yang tepat.

Kunjungi artikel pengembangan game Microsoft Store mendalam berikut ini: