t alk outline
play

T alk Outline Platform Overview Introducing Metro style games - PowerPoint PPT Presentation

T alk Outline Platform Overview Introducing Metro style games App Model Object model for app structure a note about syntax Presentation Model Screen layouts State and Storage Persisting saved games and scores


  1. T alk Outline Platform Overview Introducing Metro style games � App Model Object model for app structure � a note about syntax � Presentation Model Screen layouts � State and Storage Persisting saved games and scores � <break> Metro Features Make your game look professional � Input Choices of control schemes � Audio and Media Sound effects � Networking Multiplayer �

  2. Why target Windows 8? Why target this platform as a game developer? � Easy access by developers � Easy development because of simplified APIs and tools � Large customer base � Only way to target new ARM-based devices � New opportunity �

  3. Very Short Demo This is why Windows 8 is great for games � Apps can go full screen � No OS chrome to clash with visuals � Application centric � No OS UI is using ANY of your pixels � Simplified UI for a broader audience of users � Fast/fluid � High-performance interaction is great for games � Multi-application environment � Enables casual games to appear next to another app � Or social apps to appear next to your game �

  4. � http://msdn.microsoft.com/windows/apps/ � http://channel9.msdn.com/events/BUILD/BUILD2011 � Set Tag to “DirectX” � Push [Filter] � Scroll down

  5. Platform Architecture Metro style apps Desktop app View XAML HTML / CSS C C# Controller Model JavaScript C HTML C++ VB C++ JavaScript WinRT APIs System Services Communication Graphics & Devices & & Data Media Printing Internet Application Model Win32 Explorer Kernel Windows Kernel Services

  6. Metro style app APIs User Interface HTML5/CSS XAML DirectX Controls Data Binding SVG Tiles Input Accessibility Printing Devices Communications & Data Geolocation Portable Sensors NFC Local & Cloud Storage Web Contracts Notifications Streams Media Background Visual XML SMS Networking Playback Capture PlayTo Transfer Effects Fundamentals Application Memory Threading/Timers Authentication Cryptography Globalization Services Management

  7. Language/Component Combinations XAML can be used with C++ or C# apps � DirectX can be used with C++ (or C# via wrappers) � JavaScript uses HTML for GUI/Markup and Canvas for rendering � Uses core engine from IE � Most Windows features are exposed in JavaScript in a WWA � File I/O, events, notifications, etc. � Can create custom WinRT-style components for use by all 3 languages � Such components can access native level functionality for any valid WinRT API � Except access to the screen… �

  8. Direct API calls WinRT APIs Core OS Broker App Container: Signed & Validated code AppXManifest

  9. Win32 WRL WinRT CoCreateInstance ComPtr<IObject> Foo^ foo = ref new Foo() QueryInterface foo.As(&bar) N/A AddRef / Release N/A N/A N/A std::vector Platform::Array<>^

  10. { IPointerPoint *spPointerPoint; hr = args ‐ >get_CurrentPoint(&spPointerPoint); IPointerDevice *spPointerDevice; spPointerPoint ‐ >get_PointerDevice(&spPointerDevice); PointerDeviceType deviceType; spPointerDevice ‐ >get_PointerDeviceType(&deviceType); ... spPointerPoint ‐ >Release(); spPointerDevice ‐ >Release(); }

  11. auto

  12. Updated C++ language support � File->New Project templates for native DirectX C++ apps � DirectX HLSL shader compilation and syntax highlighting � Packaging compiled HLSL shaders into the .appx package � Support for other asset types in MSBuild and previewer � Visualization, processing and packaging of � Textures, meshes, shaders, and audio � Debugging DirectX API calls � Separate talk: Sponsored Session �

  13. #include <ppl.h> #include <ppltasks.h> using namespace Concurrency; float f = 1.0f; task<int>([=]() // task defined with capturing lambda { return foo(f); }).then([](int x) // continuation lambda argument is return value of previous { bar(x); }).then(baz); // continuation using existing function baz()

  14. App Model App Activation � The initiation/launch sequence � Event Handlers � Replace message pump switch statement � Process Lifetime Management � Power efficiency � App Container � Enables app sandboxing � App Package � Setup for OS installer, manifest �

  15. App Activation User initiates app launch � OS opens splash screen from package and displays it � OS loads app code, and calls methods (IFrameWorkView) �

  16. ref class MyApp : public IFrameworkView { public: MyApp(); // IFrameworkView Methods virtual void Initialize(CoreApplicationView^ applicationView); virtual void SetWindow(CoreWindow^ window); virtual void Load(String^ entryPoint); virtual void Run(); virtual void Uninitialize();

  17. void MyApp::SetWindow(CoreWindow^ window) { window ‐ >SizeChanged += ref new TypedEventHandler<CoreWindow^, WindowSizeChangedEventArgs^>( this, &MyApp::OnWindowSizeChanged); m_renderer ‐ >Initialize(window); }

  18. void MyApp::Run() { auto dispatcher = CoreWindow::GetForCurrentThread() ‐ >Dispatcher; while (!m_windowClosed) { dispatcher ‐ >ProcessEvents(CoreProcessEventsOption::ProcessAllIfPresent); m_renderer ‐ >Update(); m_renderer ‐ >Render(); m_renderer ‐ >Present(); } }

  19. App Activation

  20. Packaging and Manifest APPX file is a ZIP file � Installed by Windows using WU technology � Manifest describes capabilities of app to user � User can disable capabilities with OS settings pane � Installation is an OS process, no arbitrary code run at install time �

  21. Process Lifetime Management Suspend/Resume � suspending User Running Suspended Terminated Low Memory Launches App App App App resuming

  22. void ref new this } void auto SaveMyStateAsync().then([=]() { deferral ‐ >Complete(); }); }

  23. Presentation Model Window Size/Resize � Layout � Full screen, filled, snapped � Rotation � Specify which orientations are supported � Window Activation � Focus � Entered/Exited � Useful for mouse �

  24. Full screen Filled Snapped 16 x 9 4 x 3 Phone-like

  25. void MyApp::SetWindow(CoreWindow^ window) { window ‐ >SizeChanged += ref new TypedEventHandler<CoreWindow^, WindowSizeChangedEventArgs^>( this, &MyApp::OnWindowSizeChanged); ApplicationView::GetForCurrentView() ‐ >ViewStateChanged += ref new TypedEventHandler <ApplicationView^, ApplicationViewStateChangedEventArgs^>( this, &MyApp::OnViewStateChanged); }

  26. Display Orientation Portrait Landscape

  27. Decision: Rotation Let OS Rotate: Block Rotation by OS: � Recommended for most apps � No potential for glitching gameplay � May be disruptive of some types of � If user rotates gameplay � OS UI is invoked from different edge � Notifications may be sideways or inverted � Recommended for � Recommended for � Event-based games � Full-real time games � Solitaire , Mahjong � For example, Arcade games � Any game that is paused or at a menu � Accelerometer/gyro games � Non-game apps � For example, Marble Maze � Augmented Reality Apps

  28. { DisplayOrientations::None; // Enable rotation by OS/Accelerometer DisplayOrientations::Landscape; // Lock rotation by OS/Accelerometer DisplayOrientations::LandscapeFlipped; // and enable this orientation DisplayOrientations::Portrait; DisplayOrientations::PortraitFlipped; } using namespace Windows::Graphics::Display; DisplayProperties::AutoRotationPreferences = DisplayOrientations::Landscape | DisplayOrientations::LandscapeFlipped;

  29. void MyApp::OnWindowActivationChanged( CoreWindow^ sender, WindowActivatedEventArgs^ args) { auto state = args ‐ >WindowActivationState; if(state == CoreWindowActivationState::Deactivated) OutputDebugString("Focus Lost"); if(state == CoreWindowActivationState::CodeActivated || state == CoreWindowActivationState::PointerActivated) OutputDebugString("Focus Regained"); }

  30. void MyApp::OnPointerEntered( CoreWindow^ window, PointerEventArgs^ args) { // turn mouse cursor off (hidden) window ‐ >PointerCursor = nullptr; }

  31. Pixel Density Handle DPI for graphics (XAML is fairly resolution independent) � Be careful of touch controls. Users hands are same size in inches � independent of monitor size. 1080p panels may be 10” to 30” to 75” �

  32. void MyApp::OnSuspending(Object^ sender, SuspendingEventArgs^ args) { SuspendingDeferral^ deferral = args ‐ >SuspendingOperation ‐ >GetDeferral(); task<void>([=]() { auto localState = ApplicationData::Current ‐ >LocalSettings ‐ >Values; auto roamingState = ApplicationData::Current ‐ >RoamingSettings ‐ >Values; localState ‐ >Insert( "GameTime", PropertyValue::CreateSingle(m_gameTime)); roamingState ‐ >Insert( "MaxLevel", PropertyValue::CreateUInt32(m_maxLevelUnlocked)); }).then([=]() { deferral ‐ >Complete(); }); }

Recommend


More recommend