Upload
johan-lindfors
View
1.019
Download
1
Embed Size (px)
DESCRIPTION
Presenation från WP7 utvecklar-dagen på Microsoft 2011-05-26
Citation preview
Introduktion till
Johan Lindfors
windows phone för spel
• imponerande prestanda
• sensorer och ”touch”
• potentiellt xbox-live
• annonser och trials
harbor master
harvest
tiki towers
doodle fit
ilomilo
xna på 1 minut
• ett omfattande ramverk för spel
• integrerad hantering av innehåll
• spel med 2d och ”sprites”
• spel med 3d och ”meshes”
• gemensamma förmågor för pc, wp, xbox
Initialisera Uppdatera Rita
hantering av innehåll
• content pipeline
• importera vanliga filer
• optimeras till binärt format
• utbyggbart
demo
”hardware scaler”
• 800x480 = 384 000 pixlar
• 600x360 = 216 000 pixlar (56%)
• 400x240 = 96 000 pixlar (25%)
graphics.PreferredBackBufferHeight = 800; graphics.PreferredBackBufferWidth = 480;
generellt för prestanda
• gc är ”enklare” än på pc (för närvarande)
• allokera objekt tidigt, återanvänd
• håll reda på stack och heap
• använd inte foreach
• använd inte linq
och nu lite 3d
• x, y och z
• kameran beskrivs med matriser
• vy
• projektion
• världsmatriser transformerar relativa objekt
• förflyttning
• rotation
• skalning
demo
effekter - shaders
• konfigurerbara
• basic
• skinned
• environmentMap
• dualTexture
• alphaTest
ljud och musik
• soundEffect
• laddas som vanligt innehåll
• wp kan hantera upp till 64 samtidiga
• möjligt att förändra
• ”pitch”
• volym
• plats som ljudet spelas upp från
orientering
• grundinställningen är ”LandscapeLeft”
graphics.SupportedOrientations = DisplayOrientation.Portrait | DisplayOrientation.LandscapeLeft | DisplayOrientation.LandscapeRight;
orientering
Window.OrientationChanged += (s, e) => { switch (Window.CurrentOrientation) { case DisplayOrientation.Portrait: graphics.PreferredBackBufferHeight = 800; graphics.PreferredBackBufferWidth = 480; break; default: graphics.PreferredBackBufferHeight = 480; graphics.PreferredBackBufferWidth = 800; break; } graphics.ApplyChanges(); };
accelerometer
• mäter acceleration i X, Y och Z
• värden returneras mellan -1 och +1
• händelsebaserad
• läs värden i ”event”, lagra för användning
using Microsoft.Devices.Sensors;
Accelerometer accel; private void startAccelerometer() { accel = new Accelerometer(); accel.ReadingChanged += new EventHandler <AccelerometerReadingEventArgs> (accel_ReadingChanged); accel.Start(); }
starta accelerometern
Vector3 accelReading; void accel_ReadingChanged(object sender, AccelerometerReadingEventArgs e) { lock (this) { accelReading.X = (float)e.X; accelReading.Y = (float)e.Y; accelReading.Z = (float)e.Z; } }
läsa accelerometern
touch
• windows phone hanterar 4 punkter
• alla punkter har unika id’n
• pressed | moved | released
TouchCollection Touches; protected override void Update(GameTime gt) { Touches = TouchPanel.GetState(); ... }
gester
• wp kan också hantera gester
• tap | drag | hold | flick | pinch ...
TouchPanel.EnabledGestures = GestureType.Flick; while (TouchPanel.IsGestureAvailable) { GestureSample g = TouchPanel.ReadGesture(); if (g.GestureType == GestureType.Flick) { ... } }
nätverksåtkomst
• http, rest, xml...
void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) { if (e.Error == null) { mapImage = Texture2D.FromStream( graphics.GraphicsDevice, e.Result); } }
xbox live
• avatarer och “trials” för alla
• för utvecklare med kontrakt
• “profile”
• “invites”
• riktiga “achievements”
• “leaderboards”
• “gamerServices”
• kontakta: [email protected]
using Microsoft.Advertising.Mobile.Xna; ... AdManager adManager; Ad bannerAd;
trial mode
• var kreativ för att driva sälj
• anrop till IsTrialMode tar 60 ms, cacha!
#if DEBUG Guide.SimulateTrialMode = true; #endif bool isTrial = Guide.IsTrialMode; ... Guide.ShowMarketplace(PlayerIndex.One);
annonser
• istället för att användaren betalar
• finns inte för svenska applikationer ännu*
*sanning med modifikation, det finns alternativ
using Microsoft.Advertising.Mobile.Xna; ... AdManager adManager; Ad bannerAd;
marketplace
• testa, testa, testa
• lokal struktur
• uppdateringar
• auto-publicering
nyheter i och med mango
• silverlight + xna
• exekveringsmodellen
• profilering
• kombinerat api för rörelse
demo
tripeaks solitaire
• fabrication games
• äkta 3D
• all kod i objective-c
-(BOOL) animate { if([self animation] == nil) { [self draw]; return NO; } else { BOOL animationDone = [[self animation] animate]; [self draw]; if (animationDone) { x += [[self animation] currentX]; y += [[self animation] currentY]; z += [[self animation] currentZ]; rotation += [[self animation] currentRotation]; [animations removeObjectAtIndex:0]; } return animationDone; } }
public bool Animate() { if (this.Animation == null) { this.Draw(); return false; } else { bool animationDone = this.Animation.Animate(); this.Draw(); if (animationDone) { x += this.Animation.CurrentX; y += this.Animation.CurrentY; z += this.Animation.CurrentZ; rotation += this.Animation.CurrentRotation; animations.RemoveAt(0); } return animationDone; } }
public bool Animate(GraphicsDevice graphics, BasicEffect effect) { if (this.Animation == null) { this.Draw(graphics, effect); return false; } else { bool animationDone = this.Animation.Animate(); this.Draw(graphics, effect); if (animationDone) { x += this.Animation.CurrentX; y += this.Animation.CurrentY; z += this.Animation.CurrentZ; rotation += this.Animation.CurrentRotation; animations.RemoveAt(0); } return animationDone; } }
demo
så många resurser – så lite tid
• create.msdn.com
• jodegreef.wordpress.com - angry pigs
• www.xnaresources.com
• programmeramera.se
• www.infozone.se