Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.

Building Kick Ass Video Games for the Cloud


Published on

This is a presentation that covers how to use PlayN to build kick ass games for the cloud. It was delivered at GDC Online 2011, by Google Developer Advocate, Chris Schalk

Published in: Technology, News & Politics
  • Be the first to comment

Building Kick Ass Video Games for the Cloud

  1. 1. Christian Schalk Google Developer AdvocateHow to Build Kick Ass Games for theCloudGDC Online 2011Austin, Texas - October 10, 2011
  2. 2. About the Speaker Christian Schalk Day Job ● Developer Advocate for Googles Cloud Technology ○ App Engine, Google Storage, Prediction API, BigQuery ... ● Mostly Server-Side Java Background ○ "JavaServer Faces: The Complete Reference" Co-Author ● Havent developed video games since the Commodore-64! Yes, Im old school ;-)
  3. 3. Agenda ● PlayN Recap ● Google Cloud Tech Review ○ App Engine ○ Google Storage ○ ... ● Hands on with PlayN - Getting Started ● Deploying your game to the cloud ● Setting up an RPC mechanism
  4. 4. Lets start with a Demo!
  5. 5. Agenda ● PlayN Recap ● Google Cloud Tech Review ○ App Engine ○ Google Storage ○ ... ● Hands on with PlayN - Getting Started ● Deploying your game to the cloud ● Setting up an RPC mechanism
  6. 6. Reviewing PlayN!Formerly known as "ForPlay" ● An API for building cross-platform games ● Core game code can be platform agnostic ● Develop games in Java ○ Familiar language/toolset ● Leverages Google Web Toolkit ○ Compiles to JS/HTML5, (among other platforms) ● Free and Open Source (alpha) ○
  7. 7. Introducing PlayN!A GWT abstraction layer for games PlayN APIImplementations for Java, HTML5(GWT/JS), Android, Flash
  8. 8. Components of PlayN!Implements core.Game PlayN.*Fully generic gaming components. Core game logic is fully platformindependent!
  9. 9. PlayN Cross Platform Magic● Game uses core PlayN abstractions, is unaware of which platform is running● The only platform-specific code is in the entry point for each platform: MyGame()); MyGame());
  10. 10. Other PlayN Benefits● Built-in physics engine based on proven OpenSource technologies ● Box2D ○ C++ 2D Physics engine by Erin Catto ● JBox2D ○ A port of Box2D from C++ to Java ● GWTBox2D ○ A port of JBox2D from Java to JavaScript
  11. 11. Benefits of GWT Abstraction● GWT Compiler optimizes code for size ○ Removes unused code ○ Evaluates when possible at compile time ○ Inlines functions ○ Heavily obfuscated result code● Smaller compiled code - faster load time● Optimized caching, avoids unnecessary network IO
  12. 12. Benefits of HTML5 for Games● New HTML elements ○ 2D canvas ○ Audio, Video● Application Cache● 3D Canvas (WebGL) ○ Open GL ES 2.0 made JavaScript friendly● CSS3 ○ Supports hardware accelerated transforms
  13. 13. Agenda ● PlayN Recap ● Google Cloud Tech Review ○ App Engine ○ Google Storage ○ ... ● Hands on with PlayN - Getting Started ● Deploying your game to the cloud ● Setting up an RPC mechanism
  14. 14. Google App EngineBuild your Apps on Googles cloud
  15. 15. Introducing App EngineBuild and run your web apps on Google’s Cloud Infrastructure ● Easy to build ● Easy to maintain ● Easy to scale Focus on building your app, let us wear the pagers!
  16. 16. Cloud Development in a Box● Development SDK● Local development tools ○ DevServer, admin ○ Eclipse plugin● Language runtimes● Specialized API services● Cloud-based dashboard● Automatic scaling ○ Built-in fault tolerance ○ Automated load balancing● Continuously evolving...
  17. 17. Language Runtime Options GO Java Experimental
  18. 18. Specialized APIs/Services for the Sandbox Memcache Datastore URL Fetch Mail XMPP Task Queue Images Blobstore User Service
  19. 19. App Engine Evolution Through The Years 2008 2009 2010 2011 App Engine Batch write/read Java Task Queues Blobstore Multitenancy Hi-Replication Launch Https DB Import XMPP Appstats Instance Console Datastore Python Status- cron incoming email cursors Always On Channel API Datastore Dashboard Mapper hi-perf imag Files API Memcache 10 min tasks Remote API logs export Prosp Search
  20. 20. App Engine - By the Numbers 100,000+ Active developers per month 200,000+ Active apps per week
  21. 21. App Engine - By the Numbers1,500,000,000+Page views per day
  22. 22. Gaming - Share data Mobile or Web!
  23. 23. App Engine More Info
  24. 24. Google Storage for Developers Store your data in Googles cloud
  25. 25. What Is Google Storage? ● Store your data in Googles cloud ○ any format, any amount, any time ● You control access to your data ○ private, shared, or public ● Access via Google APIs or 3rd party tools/libraries
  26. 26. Sample Use Cases Static content hosting e.g. static html, images, music, video Backup and recovery e.g. personal data, business records Sharing e.g. share data with your customers Data storage for applications e.g. used as storage backend for Android, AppEngine, Cloud based apps Storage for Computation e.g. BigQuery, Prediction API
  27. 27. Google Storage Benefits High Performance and Scalability Backed by Google infrastructure Strong Security and Privacy Control access to your data Easy to Use Get started fast with Google & 3rd party tools
  28. 28. Google Storage Technical Details ● RESTful API ○ Verbs: GET, PUT, POST, HEAD, DELETE ○ Resources: identified by URI ○ Compatible with S3 ● Buckets ○ Flat containers ● Objects ○ Any type ○ Size: 100 GB / object ● Access Control for Google Accounts ○ For individuals and groups ● Two Ways to Authenticate Requests ○ Sign request using access keys ○ Web browser login
  29. 29. Demo● Tools: ○ GSUtil ○ GS Manager● Upload / Download
  30. 30. Google Storage More Info
  31. 31. Agenda ● PlayN Recap ● Google Cloud Tech Review ○ App Engine ○ Google Storage ○ ... ● Hands on with PlayN - Getting Started ● Deploying your game to the cloud ● Setting up an RPC mechanism
  32. 32. Requirements for getting started with PlayN ● Clone a copy of PlayN ○ git clone ● Core Requirements ○ Java 6 SDK ○ Apache Ant ○ Maven ○ App Engine SDK ○ Android SDK ● Requirements with Eclipse ○ Eclipse IDE Indigo 3.7 (Or earlier version w/ Maven) ○ Google Plugin for Eclipse ○ Android Plugin for Eclipse
  33. 33. Building/Installing PlayN ● After youve cloned a copy of PlayN ○ git clone ● And satisfied the core requirements, you can install via: ○ cd playn (directory where your copy is location) ○ mvn install (or ant install) ● Running showcase sample app with Mvn ○ cd playn/sample/showcase/core ○ mvn compile exec:java ● Running showcase sample app with Ant ○ cd playn/sample/showcase ○ ant run-java
  34. 34. Demo: How to get started w/ PlayN
  35. 35. Building a new project in PlayN● From the command line: ○ mvn archetype:generate -DarchetypeGroupId=com.googlecode.playn -DarchetypeArtifactId=playn-archetype ○ ...● From Eclipse ○ Select File → New → Other..., then select Maven → Maven Project in the dialog that pops up, then click Next. ■ Click Next again unless you wish to specify a custom workspace location. ■ Check Include snapshot archetypes in the dialog and then double click on the playn-archetype in the list of archetypes ○ ...
  36. 36. Demo: Building a new Game in PlayN
  37. 37. Agenda ● PlayN Recap ● Google Cloud Tech Review ○ App Engine ○ Google Storage ○ ... ● Hands on with PlayN - Getting Started ● Deploying your game to the cloud ● Setting up an RPC mechanism
  38. 38. Deploy your HTML project to the Cloud ● For Google App Engine Deployment, you can easily convert the project to an App Engine Project
  39. 39. Deploy your HTML project to the Cloud ● After converting your HTML project to an App Engine project you will have to do... ● Add a WEB-INF/lib/appengine-web.xml file ○ Note: Click Quick Fix in the Errors console of Eclipse ● Before deployment make sure your WEB-INF/lib has the necessary runtime App Engine jar files.
  40. 40. Agenda ● PlayN Recap ● Google Cloud Tech Review ○ App Engine ○ Google Storage ○ ... ● Hands on with PlayN - Getting Started ● Deploying your game to the cloud ● Setting up an RPC mechanism
  41. 41. Setting up an RPC mechanism ● Building Your Server ○ PlayN comes with a preliminary Server example code that uses Jetty ■ Is not needed if deploying to App Engine ■ Instead, you can implement your own server by adding an HttpServlet to your project ■ Have it implement the doPost() method ■ Can map it to url: /rpc in web.xml ● Building your client code ○ If Cloud is your main deployment, you can use GWTs RequestBuilder ■ You can build your HTTP Post to send data to your server
  42. 42. Setting up an RPC mechanism ● Example: A client method to persist a scoreprivate void submitScore(int score) { RequestBuilder rb = new RequestBuilder(RequestBuilder.POST, "/rpc"); rb.setHeader("Content-Type", "application/x-www-form-urlencoded"); try { rb.sendRequest("score="+score, new RequestCallback() { public void onError(Request request, Throwable exception) { requestFailed(exception); } public void onResponseReceived(Request request, Response response) {"Score sent and response received."); } }); } catch (RequestException ex) { requestFailed(ex); }}
  43. 43. Setting up an RPC mechanism ● Example: Server method to persist score sent from clientprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException { resp.setContentType("text/plain"); User user = UserServiceFactory.getUserService().getCurrentUser(); String id = null; if (user == null){ id = "Anonymous"; } else { id = user.getNickname(); } String score = req.getParameter("score"); if (score != null){ persistScore(score, id); } }private void persistScore(String score, String userid) {...}
  44. 44. New! Using the RPCService Wizard(As of version 2.4 of the Google Plugin for Eclipse)Select the project containing any Persistent classes, and then...File > New > Other > Google > RPC Service Generates CRUD stub code for all persistent classes
  45. 45. Demo: Introducing Cloud WarriorApp Engine Google StorageDatastore Game Assets (images/sounds) Game Scores Profile Data Game Play (PlayN)
  46. 46. PlayN Summary● Open source, cross-platform game abstraction layer ○ Core game logic is platform agnostic● ForPlay abstracts away the core components of a game ○ The game loop, I/O system, and asset management● Write in familiar Java, get performance on multiple platforms ○ Superior Java development/debug ○ GWT allows compilation to fast JavaScript/HTML5● Your assignment: ○ Download PlayN and build a game! ○
  47. 47. Announcements! Announcing the New PlayN Developer Site!
  48. 48. Announcements!Join us at New Game!Use coupon HTML5ROCKS for 15% off registration
  49. 49. Q&A@cschalk
  50. 50. Thank You! @cschalk