1. Glen Gordon Developer Evangelist http://blogs.msdn.com/glengordon @glengordon Developing WP7 Games using XNA
2. Agenda 2 Windows Phone 7 – A new beginning XNA Game Studio 4.0 – Powerful, Productive, Portable XNA Framework - Game Loop, Graphics, Audio, Media, Touch, Sensors XBOX Live Q & A
4. Xbox LIVE is Gaming Services Gamertag Friends Achievements Windows Phone will extend the Xbox LIVE brand beyond the console for the first time MerchandisingPremiumPlacement Windows Phone is the first step towards our vision of a ubiquitous gaming service Differentiates your title from the rest
5. Game Development Opportunities To use the great features of Xbox LIVE Without Xbox LIVE You can still write andpublish games for Windows Phone Find a publisher! Lots to choose from! We’re interested in your great games! Create great games for marketplace http://developer.windowsphone.com wpgames@microsoft.com
6. Windows Phone 7 Hardware Consistent sets of hardware capabilities defined by Microsoft Resolution Touch Input CPU / GPU RAM Hardware keyboard is optional
7. User Experience Frameworks Modern XAML/event-driven application UI framework Rapid creation of visually rich apps HTML/Javascript Mature, robust, widely deployed technology High performance game framework Rapid creation of multi-screen 2D and 3D games Rich content pipeline Mature, robust, widely adopted technology spanning Xbox, Windows, and Zune GAMES(and applications) APPLICATIONS (and games)
9. XNA Game Studio Makes game development easier XNA Framework provides robust APIs for games C#, .NET and Visual Studio tooling Solutions for game content processing Not an engine solution CreatingGames
10. XNA Game Studio 4.0 Enhanced audio support Develop for Windows Phone 7 Simplified graphics APIs Visual Studio 2010 integration New configurable effects
12. Managed Code for Game Development Windows Phone 7 Uses the .NET platform Managed code platform, no unsafe code .NET/XNA is used for games today! XNA Game Studio 4.0 is C# exclusive 800+ managed code games on XBLA/XBLIG wpgames@microsoft.com Windows games published through portals
13. Addressing Performance Head-on Frameworks designed for performance Frameworks designed for performance Frameworks designed for performance Frameworks designed for performance XNA Framework designed for gaming scenarios Commitment to future of managed code No unnecessary garbage generation Three + years of profiling and investment We’ve built for performance on Windows Phone 7 Math libraries optimized Efficient APIs with tuned transitions to native code
16. Visual Studio and .NET Productive development with .NET and C# High performance IDE Intellisense makes coding faster Integrated build/deploy/debug experience MSBuild engine for build automation
17. Content Pipeline 17 Simplify Your Content Usage! Manage assets in Visual Studio Importers for common game data formats Optimize data into binary format for efficient loading Fully extensible Content projects external in XNA Game Studio 4.0
19. Bridging the Gap The XNA Framework Game Loop is layered on top of the Silverlight Application object on Windows Phone 7 Provides the bulk of integration of API’s Most of the XNA Framework can be accessed from Silverlight applications Including Gamer Services (Xbox LIVE) In this release some sharing/composition is not complete Scenes using GraphicsDevice from XNA Framework and UIElements from Silverlight You’ll want to choose the technology that works best for your scenarios
20. Choosing the Right Technology Graphics UI control heavy consider Silverlight Desire vector graphics in XAML Media Rich video support in application Tooling If you use Microsoft Blend in your pipeline
21. Leveraging the Right Technology Graphics Using 3D graphics Sprite heavy 2D applications should consider the XNA Framework Game Loop Simulation/Drawing Those who prefer a traditional update/draw/present frame loop Tooling Those who want to use the XNA Framework Content Pipeline graphics types
22. XNA Framework Game Loop Start simple and customize! XNA Framework Game Loop Example protectedoverridevoid Update(GameTimegameTime) { // Allows the game to exit if(GamePad.GetState(PlayerIndex.One).Buttons.Back== ButtonState.Pressed) this.Exit(); // TODO: Add your update logic here base.Update(gameTime); } protectedoverridevoid Draw(GameTimegameTime) { GraphicsDevice.Clear(Color.CornflowerBlue); // TODO: Add your drawing code here base.Draw(gameTime); } Traditional update/draw/present frame loop Core programming model consistent with previous releases Changes implemented yield better power performance on devices System integration with Windows Phone 7 best practices Translated to existing XNA Framework concepts
25. Graphics Overview Evolution of our existing immediate mode rendering API Simplifies for resource and render state management Feature segmentation between “Reach”/“HiDef” profiles Rendering primitives 2D and 3D
26. Configurable Effects BasicEffect SkinnedEffect New configurable effect classes on all platforms EnvironmentMapEffect DualTextureEffect Custom effects not available on Windows Phone 7 AlphaTestEffect
27. System Support: Scaler and Orientation Write your game without worrying about native resolution or orientation Automatic rotation between portrait and landscapeTouch automatically supports both scale and orientation changes Scaler can drastically improve performance Trade off performance for “crispness” and shade fewer pixels800x480 = 384,000 pixels, 480x320 = 153,600 pixels Upsample an arbitrary back buffer to native device resolution Far higher quality than bilinear filteringAllows for easier porting from other platforms Scaling/Rotation comes for “free” from Hardware
30. Audio Capture Example Audio publicvoidEventDrivenCapture() { mic= Microphone.Default; buffer = new byte[mic.GetSampleSizeInBytes(mic.BufferDuration)]; mic.BufferReady += newEventHandler(OnBufferReady); DynamicPlayback = newDynamicSoundEffectInstance(mic.SampleRate, AudioChannels.Mono); } publicvoidOnBufferReady(object sender, EventArgsargs) { // Get the latest captured audio. int duration = mic.GetData(buffer); // Do some post-capture processing and playback. MakeMeSoundLikeARobot(buffer, duration); DynamicPlayback.SubmitBuffer(buffer); } Audio Capture and Playback Simple API to play back WAV data Modify pitch, volume, pan audio Ability to play synthesized/buffered audio Serialize captured data Provides more control over System.Mediatypes on Windows Phone 7 Audio Playback Example // Load a sound effect from a raw stream SoundEffecteffect1 = SoundEffect.FromStream(GetStreamFromTheWeb("http://url.wav")); effect1.Play(); // Create dynamic audio on the fly byte[] fluteSound = GetFluteNote(); effect2 = newSoundEffect(fluteSound, SampleRate, AudioChannels.Stereo); SoundEffectInstanceinstance = effect2.CreateInstance(); instance.Pan = -1; instance.Pitch = 1.5f; instance.Play(); Microphone/Bluetooth Support Playback through headset Capture through mic or headset
31. Media – Music/Photos/Video URI Song Playback Example Music Enumeration and Playback // Constructs a song from a URI UrimediaStreamUri = newUri("http://song.asx"); SongstreamedSong = Song.FromUri("Song", mediaStreamUri); // Play the song MediaPlayer.Play(streamedSong); Control and enumerate users’ media within a game Ability to play songs from URI/URL (i.e. music app) Picture Enumeration and Playback Supports photo picking/editing/publishing Retrieve Image Data MediaLibrarymedia =newMediaLibrary(); // Get the JPEG image data StreammyJpegImage = ReadAndModifyPicture(somePicture); // Save texture to Media Library media.SavePicture("Awesome", myJpegImage); Video Playback Uses standard video player API Show/Hide controls
34. Input Overview Cross Platform Input API Xbox 360 Controllers (Xbox/Windows) Keyboard (Xbox/Windows/Windows Phone 7) Touch Input Handling vartouchCollection= TouchPanel.GetState(); //... foreach(vartouchLocationintouchCollection) { if(touchLocation.State == TouchLocationState.Released) { //... } } Touch API Available across platforms for portability (fewer #ifdefs) Multipoint on Windows Phone 7 and Windows Orientation and resolution aware Developer can override
39. Connectivity at a Glance Windows Phone 7 OS Xbox LIVE HTTP Push Gamer Services Invites Avatars Profile Achieve-ments Leader-boards TrialMode
40. Profile Your Identity in the Cloud Your phone knows you by your Windows Live ID Link to your Gamertag
41. Profile Read a Player’s Profile // Profile access SignedInGamergamer =Gamer.SignedInGamers[0]; // Get the player's GamerTag to display string gamerTag = gamer.Gamertag; // A SignedInGamer has a Profile GamerProfileprofile = gamer.GetProfile(); // Get the player's current GamerScore intgamerScore = profile.GamerScore; // get the gamer picture (PNG file stream) Stream gamerPictureStream = profile.GamerPicture;
42. Achievements Award an Achievement // Award an achievement SignedInGamergamer = Gamer.SignedInGamers[0]; gamer.AwardAchievement("Attended TechEd 2010"); Real achieventments Real gamerscore Up to 20 awards, 200G total Dead simple API, deep game design Read Achievements // Get achievements AchievementCollectionachievements = gamer.GetAchievements(); // walk through achievements foreach (Achievement ain achievements) { string name = a.Name; string description = a.Description; boolearned = a.IsEarned; intscore = a.GamerScore; Stream icon = a.Picture; }
43. Leaderboards Write to a Leaderboard // Create leaderboard identity with game mode 1 LeaderboardIdentityid = LeaderboardIdentity.Create(LeaderboardKey.BestScoreLifeTime, 1); // get the leaderboard writer from the signed in gamer LeaderboardWriterwriter = gamer.LeaderboardWriter; // get the leaderboard entry for the identity LeaderboardEntryentry = writer.GetLeaderboard(id); // write new leaderboard data entry.Rating = 1000; entry.columns.SetValue("Outcome",LeaderboardOutcome.Win); Compete withFriends Score- or Time-based Fixed columns 10k blob data Pivot on gamer Read From a Leaderboard // Read from leaderboard with page size of 10 LeaderboardReaderreader =LeaderboardReader.Read(id, gamer, 10); foreach (LeaderboardEntryein reader.Entries) { // score or time, as defined by identity. Rating determines rank. long rating = e.Rating; // read additional column data long wins = e.Columns.GetValueInt64("Wins"); Stream blob = e.Columns.GetValueStream("Blob"); } reader.PageDown();
44. Trial Mode Simple check Simulate for testing Send user to your Marketplace offer Trial Mode Guide.SimulateTrialMode =true; // if we are in trial mode, show a marketplace offering if(Guide.IsTrialMode) { PlayerIndexplayerIndex = Gamer.SignedInGamers[0].PlayerIndex; Guide.ShowMarketplace(playerIndex); }
45. Avatars Currently supported through web service only Static pose rendered on LIVE back-end Download as a stream http://avatar.xboxlive.com/avatar/Major%20Nelson/avatar-body.png
46. Game Invites Game invites are handled through email Guide.ShowGameInvite() invokes platform picker UI Player chooses game invite recipients Friends see invitations in their games hub
48. Target Three Screens XNA Framework designed to be cross platform Smaller time investment and target more sockets Project synchronization between platforms
49. XNA Framework Profiles Create a clear development environment Target broadly or platform showcases Designed for compatibility across screens/devices This profile includes Windows Phone 7 Reach Platform showcase features Xbox 360/Windows Only HiDef
51. Summary Powerful Great managed code games, working today Windows Phone provides a powerful platform for gaming Productive Focus on being a game developer Great tools make you more productive Portable Target more platforms easily Focus on your game differences, not the technology
52. Call to Action Download the Windows Phone Developer Tools http://developer.windowsphone.com Create awesome games!
53. Additional Resources Email: wpgames@microsoft.com On the web: http://developer.windowsphone.com Hundreds of samples Lots of MVPs and experts to help you get started XNA Creators Club @ http://creators.xna.com Team Blog @ http://blogs.msdn.com/xna/ Shawn Hargreaves @ http://blogs.msdn.com/shawnhar/(Great Tech Info!) Contact Microsoft Blogs Peer Support @ http://forums.xna.com