Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Poznámka:
Toto téma je součástí Vytvoření jednoduché hry pro Univerzální platformu Windows (UPW) pomocí série kurzů DirectX. Téma na tomto odkazu nastaví kontext pro řadu.
Prvním krokem při vývoji hry je vytvoření projektu v sadě Microsoft Visual Studio. Jakmile nakonfigurujete projekt speciálně pro vývoj her, můžete ho později znovu použít jako druh šablony.
Cíle
- Vytvořte nový projekt v sadě Visual Studio pomocí šablony projektu.
- Porozumějte vstupnímu bodu a inicializaci hry tím, že prozkoumáte zdrojový soubor pro třídu App.
- Podívejte se na herní cyklus.
- Zkontrolujte soubor package.appxmanifest projektu.
Vytvoření nového projektu v sadě Visual Studio
Poznámka:
Informace o nastavení sady Visual Studio pro vývoj pro C++/WinRT – včetně instalace a použití rozšíření sady C++/WinRT Visual Studio (VSIX) a balíčku NuGet (který společně poskytuje podporu pro šablonu projektu a sestavení) – viz podpora sady Visual Studio pro C++/WinRT.
Nejprve nainstalujte (nebo aktualizujte na) nejnovější verzi rozšíření sady Visual Studio C++/WinRT (VSIX); viz výše uvedená poznámka. Potom v sadě Visual Studio vytvořte nový projekt podle šablony projektu Core App (C++/WinRT). Zaměřte se na nejnovější obecně dostupnou verzi Windows SDK, tedy takovou, která není ve verzi Preview.
Projděte si třídu App, abyste porozuměli IFrameworkViewSource a IFrameworkView
V projektu základní aplikace otevřete soubor zdrojového kódu App.cpp. V ní je implementace třídy App, která představuje aplikaci a její životní cyklus. V tomto případě samozřejmě víme, že aplikace je hra. Budeme ho ale označovat jako aplikace, abychom mohli obecněji mluvit o tom, jak se aplikace pro Univerzální platformu Windows (UPW) inicializuje.
Funkce wWinMain
Funkce wWinMain je vstupním bodem aplikace. Takto vypadá wWinMain (z App.cpp).
int __stdcall wWinMain(HINSTANCE, HINSTANCE, PWSTR, int)
{
CoreApplication::Run(winrt::make<App>());
}
Vytvoříme instanci třídy App (to je jediná instance třídy App, která je vytvořená), a předáme ji statické metodě CoreApplication.Run. Všimněte si, že CoreApplication.Run očekává rozhraní IFrameworkViewSource. Proto App třída potřebuje implementovat toto rozhraní.
Další dvě části v tomto tématu popisují IFrameworkViewSource a IFrameworkView rozhraní. Tato rozhraní (stejně jako
Rozhraní IFrameworkViewSource
Třída App skutečně implementuje IFrameworkViewSource, jak je vidět v následujícím výpisu.
struct App : winrt::implements<App, IFrameworkViewSource, IFrameworkView>
{
...
IFrameworkView CreateView()
{
return *this;
}
...
}
Objekt, který implementuje
IFrameworkViewSource má jedinou metodu IFrameworkViewSource::CreateView. Systém Windows volá tuto funkci na objektu, který předáte CoreApplication.Run. Jak vidíte výše, App::CreateView implementace této metody vrátí *this. Jinými slovy, objekt App vrátí sám sebe. Vzhledem k tomu, že IFrameworkViewSource::CreateView má návratový typ hodnoty IFrameworkView, z toho vyplývá, že také třída App musí implementovat to rozhraní. A vidíte, že se to děje ve výpisu výše.
Rozhraní IFrameworkView
Objekt, který implementuje IFrameworkView je objekt zprostředkovatele zobrazení. A teď jsme poskytli Windows tohoto zprostředkovatele zobrazení. Je to stejný objekt App, který jsme vytvořili v wWinMain. Třída
Nyní může Windows volat implementace metod IFrameworkViewtřídy App. V implementacích těchto metod má vaše aplikace možnost provádět úlohy, jako je inicializace, začít načítat prostředky, které bude potřebovat, připojit příslušné obslužné rutiny událostí a přijmout CoreWindow, které vaše aplikace použije k zobrazení výstupu.
Vaše implementace metod IFrameworkView se volají v pořadí uvedeném níže.
- inicializovat
- SetWindow
- Načíst
- Vyvolá se událost CoreApplicationView::Activated. Pokud jste se tedy (volitelně) zaregistrovali pro zpracování této události, je v tuto chvíli volána obslužná rutina OnActivated.
- Spustit
- deinicializovat
A tady je kostra třídy App (v App.cpp), která ukazuje podpisy těchto metod.
struct App : winrt::implements<App, IFrameworkViewSource, IFrameworkView>
{
...
void Initialize(Windows::ApplicationModel::Core::CoreApplicationView const& applicationView) { ... }
void SetWindow(Windows::UI::Core::CoreWindow const& window) { ... }
void Load(winrt::hstring const& entryPoint) { ... }
void OnActivated(
Windows::ApplicationModel::Core::CoreApplicationView const& applicationView,
Windows::ApplicationModel::Activation::IActivatedEventArgs const& args) { ... }
void Run() { ... }
void Uninitialize() { ... }
...
}
Toto byl jen úvod do IFrameworkView. O těchto metodách a jejich implementaci se podrobněji zabýváme v Definice rámce aplikace UWP pro hru.
Uspořádat projekt
Projekt základní aplikace, který jste vytvořili ze šablony projektu, obsahuje funkcionalitu, kterou bychom měli v tuto chvíli upravit. Potom můžeme projekt použít k opětovnému vytvoření hry střelecké galerie (Simple3DGameDX). Proveďte následující změny třídy App v App.cpp.
- Odstraňte datové členy daného objektu.
- Odstranění
OnPointerPressed, OnPointerMoved a addvisual - Odstraňte kód z SetWindow.
Projekt se sestaví a spustí, ale v klientské oblasti se zobrazí jenom plná barva.
Herní smyčka
Abyste získali představu o tom, jak vypadá herní smyčka, podívejte se do zdrojového kódu pro ukázkovou hru Simple3DGameDX, kterou jste stáhli.
Třída aplikace
void Run()
{
m_main->Run();
}
GameMain::Run najdete v GameMain.cpp. Je to hlavní smyčka hry a tady je velmi hrubý přehled, který ukazuje nejdůležitější funkce.
void GameMain::Run()
{
while (!m_windowClosed)
{
if (m_visible)
{
CoreWindow::GetForCurrentThread().Dispatcher().ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent);
Update();
m_renderer->Render();
m_deviceResources->Present();
}
else
{
CoreWindow::GetForCurrentThread().Dispatcher().ProcessEvents(CoreProcessEventsOption::ProcessOneAndAllPending);
}
}
}
Zde je stručný popis toho, co tato hlavní herní smyčka dělá.
Pokud okno hry není zavřené, odešlete všechny události, aktualizujte časovač a pak vykreslujte a prezentujte výsledky grafického kanálu. O těchto obavách se dozvíte mnohem více a probereme to v tématech Definování UWP architektury aplikace hry, Vykreslovací framework I: Úvod do vykreslovánía Vykreslovací framework II: Vykreslování hry. Toto je ale základní struktura kódu hry DirectX pro UPW.
Kontrola a aktualizace souboru package.appxmanifest
Soubor Package.appxmanifest obsahuje metadata o projektu UPW. Tato metadata se používají k balení a spuštění hry a k odeslání do Microsoft Storu. Soubor obsahuje také důležité informace, které systém hráče používá k poskytování přístupu k systémovým prostředkům, které hra potřebuje ke spuštění.
Spusťte návrháře manifestu
Další informace o souboru package.appxmanifest a balíčku najdete v tématu Návrhář manifestu. Prozatím se podívejte na kartu Schopnosti a zvažte dostupné možnosti.
Pokud nevyberete možnosti, které vaše hra používá, například přístup k internetu pro globální panel s vysokým skóre, nebudete mít přístup k odpovídajícím prostředkům ani funkcím. Při vytváření nové hry se ujistěte, že jste vybrali všechny možnosti potřebné rozhraními API, která vaše hra volá.
Teď se podíváme na zbývající soubory, které jsou součástí ukázkové hry Simple3DGameDX.
Kontrola dalších důležitých knihoven a souborů zdrojového kódu
Pokud máte v úmyslu vytvořit šablonu herního projektu pro sebe, abyste ji mohli znovu použít jako výchozí bod pro budoucí projekty, budete chtít zkopírovat GameMain.h a GameMain.cpp z Simple3DGameDX projektu, který jste stáhli, a přidat je do nového projektu základní aplikace. Projděte si tyto soubory, zjistěte, co dělají, a odeberte cokoli, co je specifické pro Simple3DGameDX. Zakomentujte také cokoli, co závisí na kódu, který jste ještě nezkopírovali. Stejně jako příklad GameMain.h závisí na GameRenderer.h. Při kopírování dalších souborů z Simple3DGameDXbudete moct zrušit komentář.
Zde je stručný přehled některých souborů v Simple3DGameDX, které budou užitečné pro zahrnutí do vaší šablony, pokud ji vytváříte. V každém případě jsou stejně důležité pro pochopení, jak Simple3DGameDX sám pracuje.
Další kroky
V tomto okamžiku jsme ukázali, jak vytvořit nový projekt UPW pro hru DirectX, podívali se na některé části v ní a začali přemýšlet o tom, jak tento projekt převést na druh opakovaně použitelné šablony pro hry. Podívali jsme se také na některé důležité části ukázkové hry Simple3DGameDX.
Další část je Definovat architekturu aplikace pro UWP hry. Podrobněji se podíváme na to, jak funguje Simple3DGameDX.