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(); }); }

Download Presentation
Download Policy: The content available on the website is offered to you 'AS IS' for your personal information and use only. It cannot be commercialized, licensed, or distributed on other websites without prior consent from the author. To download a presentation, simply click this link. If you encounter any difficulties during the download process, it's possible that the publisher has removed the file from their server.

Recommend


More recommend