(WITH A LITTLE CASUAL THROWN IN)
CGDD 4003
• Phone is always with you
• Predicted to exceed $16B by 2016
• Reaches a (much) wider demographic
• 50% of those under 40 play mobile games
• 20% of those over 40
• In-app purchases are exploding
• Currently 1/3 of mobile revenue (1/2 by 2016)
• Apple’s App Store: 300,000+ apps
• Has passed on $1B to developers
• Android Marketplace: 100,000+ apps
• Nokia’s Oki: 28,000+ apps
• Typically keep 70% of revenue
• Must we offer games for free?
• How do we get discovered?
http://www.mobileapptesting.com/power-up-massive-growth-in-mobile-gaming-ahead/2010/12/
• 57% of AT&T Wireless customers play games
• Why they play:
• 52% - distraction from daily life
• 40% - relaxation and stress relief
• 12% - improve mood
• Time:
• 91% of mobile sessions are < 30 minutes
• 62% are less than 15 minutes
• Women play for longer periods of time
• Most popular games
• Puzzle (66%), Card/Casino (51%), Board games (15%), Action/Adventure(11%)
* http://wirelessandmobilenews.com/2009/05/57-of-atters-play-mobile-games-tetris-most-popular.html?wpmp_switcher=mobile
• What IS the most popular mobile game of all time?
• What IS the most popular mobile game of all time?
100 million downloads…
• EA is investing in mobile and casual
• “Anyone who fails to recognize that shift will be left behind” – John Riccitiello (CEO) http://www.mobileapptesting.com/power-up-massive-growth-in-mobile-gaming-ahead/2010/12/
• Average “user” has 27 apps on their phone
• Up from 22 in 2009
• Games are most popular
• May listen or watch other media
• Casual gamers want:
• Quick
• Simple
• Non-committal
• No deep thought
• Small in scope (no MMORPG)
• Easy to learn (simple mechanics)
• Simple UI (prone to errors)
• Mobile context:
• Interruptible – user is a multi-tasker
• Can be played anywhere, any time
• Rely on mobile technology
(especially input)
• Non-explicit content
• Trend – evolving from 2D to 3D
• Respect user privacy!
Good site: http://www.developer.nokia.com/Resources/Library/Design_and_UX/index.html
• User should be able to start a new session (frequently) and reach goals quickly
• Design considerations for visuals
• Basic problem: small screen, yet need to convey information
• Characters 10-15% of screen
• 6 pieces of HUD or less!
• Touching the screen “blocks” it!
• Justify each visual element
• Keep the backlight on if possible
• General no-nos
• Chatting
• Complex input (multi-touch)
• It’s ok to be slow, but don’t give slow feedback
• Usually need to query for these (vary wildly)
• Input:
• no physical mouse/keyboard
• no joystick?
• Buttons?
• GPS
• Accelerometers/Gyroscopes
• Restricted memory
• Network
• server or peer-to-peer?
• Bluetooth?
• Limited CPU – GPU?
• AI?
• http://www.youtube.com/watch?v=z_vC0RLryuo
• An IDE: typically Eclipse
• Java
• The Android SDK
• The Android NDK?
• An Android phone?
• Normally no…
• If doing OpenGL ES, yes!
• Visual Studio (2010)
• Must have SP1 installed
• Win 7 SDK – it’s large
• http://www.microsoft.com/download/en/details.aspx?displaylang=en&id=27570
• Comes with an emulator
• You need a Mac! Or do you?
• Xcode
• Learn Objective-C and C++
• Good primer on Apple’s site
• Uses different kind of “messaging”
• Website
• http://developer.apple.com/devcenter/ios/index.action
• You’ll want to register… and probably buy an account
• Use the concept of call back functions
• Event-driven:
• Initialization
• Destruction
• Drawing
• Input events
• GPS
• Touch
• Normal widgets (mouse, textfields, etc…)
• We have several different versions of Android
• Not all phones have latest
SDK
• 2.2 is fairly safe
• It’s exactly the same skeleton as XNA!
• Multiple touch events
TouchPanelCapabilities tc = TouchPanel.GetCapabilities(); if (tc.IsConnected) { return tc.MaximumTouchCount;
}
TouchCollection fingers = TouchPanel.GetState(); foreach (TouchLocation finger in fingers) { if ((finger.State == TouchLocationState.Pressed) ||
(finger.State == TouchLocationState.Moved)) {
// Do what we gonna do!
}
}
• Gyroscope if (Gyroscope.IsSupported) {
//get current rotation rate, display happens in Draw()
GyroscopeReading gr = new GyroscopeReading();
Vector3 gyroReading = gr.RotationRate;
}
• For Accelerometer, see the documentation