7 Glen Gordon Developer Evangelist http://blogs.msdn.com/glengordon @glengordon Developing WP7 Games using XNA
Nov 07, 2014
7
Glen GordonDeveloper Evangelisthttp://blogs.msdn.com/glengordon@glengordon
Developing WP7 Games using XNA
2 Windows Phone Microsoft confidential.
Agenda
XNA Game Studio 4.0 – Powerful, Productive, Portable
Windows Phone 7 – A new beginning
XNA Framework
- Game Loop, Graphics, Audio, Media, Touch, Sensors
XBOX Live
Q & A
3 Windows Phone Microsoft confidential.
Games Hub Featuring Xbox LIVE
Xbox LIVE is Gaming Services
Windows Phone will extend the Xbox LIVE brand beyond the console for the first timeWindows Phone is the first step towards our vision of a ubiquitous gaming service
Differentiates your title from the rest
Gamertag
Friends
AchievementsMerchandising Premium Placement
Game Development Opportunities
Without Xbox LIVE You can still write
and publish games for Windows Phone
Create great games for marketplace
http://developer.windowsphone.com
We’re interested in your great games!
To use the great features of Xbox
LIVE
Find a publisher!Lots to choose from!
Consistent sets of hardware capabilities defined by Microsoft
Windows Phone 7 Hardware
ResolutionTouch InputCPU / GPURAM
Hardware keyboard is optional
User Experience Frameworks
Modern XAML/event-driven application UI frameworkRapid creation of visually rich appsHTML/JavascriptMature, robust, widely deployed technology
High performance game frameworkRapid creation of multi-screen 2D and 3D games Rich content pipelineMature, robust, widely adopted technology spanning Xbox, Windows, and Zune
GAMES(and applications)
APPLICATIONS(and games)
Powerful
Productive
Portable
XNA Game StudioMakes 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
Creating Games
XNA Game Studio 4.0
Develop for
Windows Phone 7 Simplified
graphics APIs
Visual Studio 2010 integration
Enhanced audio
support
New configurable
effects
Powerful
Uses the .NET platform
Managed Code for Game Development
Windows Phone 7
Managed code platform, no unsafe code
XNA Game Studio 4.0 is C# exclusive
800+ managed code games on XBLA/XBLIG
Windows games published
through portals
.NET/XNA is used for games today!
Frameworks designed
for performance
Addressing Performance Head-on
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
Math libraries optimized
Efficient APIs with tuned transitions to native code
Three + years of profiling
and investment
We’ve built for performance on Windows
Phone 7
http://xbox.com/phone
Productive
Windows Phone Microsoft confidential.
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 Windows Phone Microsoft confidential.
Content PipelineSimplify Your Content Usage!
Importers for common game data formats
Manage assets in Visual Studio
Optimize data into binary format for
efficient loading Fully extensible
Content projects external in XNA Game
Studio 4.0
18
Simplifying Game Development
XNA Framework
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’sMost 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
Bridging the Gap
XNA Framework Game Loop Example
System integration with Windows Phone 7 best practices
Translated to existing XNA Framework concepts
Traditional update/draw/present frame loop
Core programming model consistent with previous releasesChanges implemented yield better power performance on devices
XNA Framework Game Loop protected override void Update(GameTime
gameTime){ // 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);}
protected override void Draw(GameTime gameTime){ GraphicsDevice.Clear(Color.CornflowerBlue);
// TODO: Add your drawing code here
base.Draw(gameTime);}
Start simple and customize!
24
Graphics
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
Configurable Effects
New configurable effect
classes on all platforms
BasicEffect
SkinnedEffect
EnvironmentMapEffect
DualTextureEffect
AlphaTestEffect
Custom effects not available on Windows
Phone 7
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 performanceTrade off performance for “crispness” and shade fewer pixels800x480 = 384,000 pixels, 480x320 = 153,600 pixels
Upsample an arbitrary back buffer to native device resolutionFar higher quality than bilinear filteringAllows for easier porting from other platforms
Scaling/Rotation comes for “free” from Hardware
Demo: Effects
29
Can you hear me now?
Audio & Media
Audio Capture Example
Audio public void EventDrivenCapture(){ mic = Microphone.Default; buffer = new byte[mic.GetSampleSizeInBytes(mic.BufferDuration)]; mic.BufferReady += new EventHandler(OnBufferReady); DynamicPlayback = new DynamicSoundEffectInstance(mic.SampleRate, AudioChannels.Mono);}
public void OnBufferReady(object sender, EventArgs args){ // 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.Media types on Windows Phone 7
Microphone/Bluetooth SupportPlayback through headset
Capture through mic or headset
Audio Playback Example// Load a sound effect from a raw streamSoundEffect effect1 = SoundEffect.FromStream(GetStreamFromTheWeb("http://url.wav"));effect1.Play();
// Create dynamic audio on the flybyte[] fluteSound = GetFluteNote();effect2 = new SoundEffect(fluteSound, SampleRate, AudioChannels.Stereo);SoundEffectInstance instance = effect2.CreateInstance();instance.Pan = -1; instance.Pitch = 1.5f;instance.Play();
URI Song Playback Example
Retrieve Image Data
Music Enumeration and Playback
Media – Music/Photos/Video// Constructs a song from a URI
Uri mediaStreamUri = new Uri("http://song.asx");Song streamedSong = Song.FromUri("Song",
mediaStreamUri);
// Play the songMediaPlayer.Play(streamedSong);
MediaLibrary media = new MediaLibrary();
// Get the JPEG image dataStream myJpegImage = ReadAndModifyPicture(somePicture);
// Save texture to Media Library media.SavePicture("Awesome", myJpegImage);
Picture Enumeration and Playback
Video Playback
Control and enumerate users’ media within a game
Ability to play songs from URI/URL (i.e. music app)
Supports photo picking/editing/publishing
Uses standard video player API
Show/Hide controls
Demo: Sound
33
Interacting with games gets easier!
Input / Touch
Touch Input Handling
Cross Platform Input API
Touch API
Xbox 360 Controllers (Xbox/Windows)
Keyboard (Xbox/Windows/Windows Phone 7)
Available across platforms for portability (fewer #ifdefs)
Multipoint on Windows Phone 7 and Windows
Orientation and resolution aware
Developer can override
Input Overview
var touchCollection = TouchPanel.GetState();
//...
foreach (var touchLocation in touchCollection){ if (touchLocation.State == TouchLocationState.Released) { //... }}
35
For Silverlight and XNA Framework
Sensors
Accelerometer Example
VibrationExample
Leverage Platform Features on Windows Phone 7
Location
Accelerometer
Vibration
Sensor Overview
Accelerometer accelerometer = new Accelerometer();
accelerometer.ReadingChanged +=
AccelerometerReadingChanged;
accelerometer.Start();
VibrateController rumbler;rumbler.Start(TimeSpan.FromSeconds(2));
Demo: Touch
38
Xbox LIVE
Connectivity at a GlanceWindows Phone 7 OS
Xbox LIVE
Gamer Services
HTTP
Invites
ProfileAchieve-ments
Leader-boards
TrialMode
Push
Avatars
Windows Phone Microsoft confidential.
Profile Your Identity in the Cloud
Your phone knows you by your Windows Live ID
Link to your Gamertag
ProfileRead a Player’s Profile
// Profile accessSignedInGamer gamer = Gamer.SignedInGamers[0];
// Get the player's GamerTag to displaystring gamerTag = gamer.Gamertag;
// A SignedInGamer has a ProfileGamerProfile profile = gamer.GetProfile();
// Get the player's current GamerScoreint gamerScore = profile.GamerScore;
// get the gamer picture (PNG file stream)Stream gamerPictureStream = profile.GamerPicture;
Achievements Award an Achievement
// Award an achievementSignedInGamer gamer = Gamer.SignedInGamers[0];gamer.AwardAchievement("Attended TechEd 2010");
Read Achievements// Get achievementsAchievementCollection achievements = gamer.GetAchievements();
// walk through achievementsforeach (Achievement a in achievements){
string name = a.Name;string description = a.Description;bool earned = a.IsEarned;int score = a.GamerScore;
Stream icon = a.Picture; }
Real achieventments Real gamerscore Up to 20 awards,
200G total Dead simple API,
deep game design
Leaderboards Write to a Leaderboard
// Create leaderboard identity with game mode 1LeaderboardIdentity id = LeaderboardIdentity.Create(LeaderboardKey.BestScoreLifeTime, 1);
// get the leaderboard writer from the signed in gamerLeaderboardWriter writer = gamer.LeaderboardWriter;
// get the leaderboard entry for the identityLeaderboardEntry entry = writer.GetLeaderboard(id);
// write new leaderboard dataentry.Rating = 1000;entry.columns.SetValue("Outcome", LeaderboardOutcome.Win);
Read From a Leaderboard// Read from leaderboard with page size of 10LeaderboardReader reader = LeaderboardReader.Read(id, gamer, 10);
foreach (LeaderboardEntry e in reader.Entries){
// score or time, as defined by identity. Rating determines rank.long rating = e.Rating;// read additional column datalong wins = e.Columns.GetValueInt64("Wins");Stream blob = e.Columns.GetValueStream("Blob");
}
reader.PageDown();
Compete withFriends
Score- or Time-based
Fixed columns 10k blob data Pivot on gamer
Trial Mode
Trial ModeGuide.SimulateTrialMode = true;
// if we are in trial mode, show a marketplace offeringif (Guide.IsTrialMode){
PlayerIndex playerIndex = Gamer.SignedInGamers[0].PlayerIndex;Guide.ShowMarketplace(playerIndex);
}
Simple check Simulate for testing Send user to your Marketplace offer
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
47
Portable
XNA Framework designed to be cross platform
Smaller time investment and target more sockets
Project synchronization between platforms
Target Three Screens
XNA Framework ProfilesCreate a clear development environmentTarget broadly or platform showcases
HiDef
Reach Designed for compatibility across screens/devicesThis profile includes Windows Phone 7
Platform showcase featuresXbox 360/Windows Only
SummaryPowerful
Productive
Portable
Great managed code games, working todayWindows Phone provides a powerful platform for gaming
Focus on being a game developerGreat tools make you more productive
Target more platforms easilyFocus on your game differences, not the technology
Call to ActionDownload the Windows Phone Developer Tools
http://developer.windowsphone.com
Create awesome games!
Additional Resources
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!)
Email: [email protected]
On the web: http://developer.windowsphone.com
Peer Support @ http://forums.xna.com
BlogsContact
Microsoft
Q&A
© 2010 Microsoft Corporation. All rights reserved. Microsoft, Windows, Windows Vista and other product names are or may be registered trademarks and/or trademarks in the U.S. and/or other countries.
The information herein is for informational purposes only and represents the current view of Microsoft Corporation as of the date of this presentation. Because Microsoft must respond to changing market conditions, it should not be interpreted to be a commitment on the part of Microsoft, and Microsoft cannot guarantee the accuracy of any information provided after the date of this presentation.
MICROSOFT MAKES NO WARRANTIES, EXPRESS, IMPLIED OR STATUTORY, AS TO THE INFORMATION IN THIS PRESENTATION.