iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match...
Transcript of iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match...
![Page 1: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/1.jpg)
iOS Game Development with UIKit
Martin Grider
@livingtech
http://abstractpuzzle.com/ ~ http://chesstris.com/
September 30, 2015
![Page 2: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/2.jpg)
Overview
• Who am I?
• Apple native game technologies
• UIKit Game Opinions
• Me & UIKit Games
• About GenericGameModel
![Page 3: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/3.jpg)
Who am I?Martin Grider
@livingtech
http://abstractpuzzle.com/
game developer iOS contract / freelance
![Page 4: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/4.jpg)
IGDATC
• International Game Developer’s Association (Twin Cities)
• http://igdatc.org/
![Page 5: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/5.jpg)
Why UIKit? Got to have the Skillz to Pay the Bills!• My Business:
I specialize in all native iOS development!
• Definitely Not: Android, Phone Gap, Java, PHP
• …and now not: Swift (maybe someday?!?)
• Quality: 10,000 hours to mastery (maybe debunked*)
• Enjoyment: I do what I love.
* http://www.popsci.com/article/science/practice-not-important-thought-success-study-says
![Page 6: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/6.jpg)
I ❤ UIKit ..?• Yes! Maybe.
• Maybe I’m just lazy.
• But it is very fast to prototype some games in UIKit.
• Also: UIKit is the oldest iOS API. Examples are easy to come by, and it’s relatively stable and easy to learn.
![Page 7: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/7.jpg)
Apple Native Game Technologies
![Page 8: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/8.jpg)
Metal
• Hardware-specific graphics API
• Introduced in iOS 8
• Closest to the “metal” (CPU / GPU)
• Uses a custom shader language
• Best performance possible in iOS
![Page 9: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/9.jpg)
Open GL (ES)
• Open Graphics Library (for Embedded Systems)
• Cross-platform(this is what ran underneath iOS before Metal)
• Also extremely low-level
![Page 10: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/10.jpg)
Metal / OpenGL ES
• Both are fundamentally similar
• Useful to know how these work, because they are running “underneath” most game frameworks
• But these are APIs for the framework developers (probably not you)
![Page 11: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/11.jpg)
SpriteKit
• A 2D framework for drawing images (sprites)
• (You can also draw text, path-based shapes, and video.)
• Probably loosely based on Cocos2D (without nearly as many features)
• Physics
![Page 12: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/12.jpg)
SceneKit
• 3D framework for drawing 3D models (also to an OpenGL view)
• New to iOS in 8
• Some really nice debugging tools
![Page 13: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/13.jpg)
SpriteKit & SceneKit• Main advantage to these is flexibility /
interoperation with other iOS APIs (Core Image, Core Animation, etc.)
• So if ^^^ is not you, there are other more flexible options.Note that I will be arguing later, weakly, in favor of UIKit instead of SpriteKit. (It is not a replacement for 3D, however. Unity or Unreal are a better fit there.)
![Page 14: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/14.jpg)
GameKit, aka Game Center
• Leaderboards
• Achievements
• Challenges
• Multiplayer (real-time and asynchronous)
• iCloud saved games as of iOS 8
![Page 15: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/15.jpg)
Game Center• Leaderboards & Achievements
• Great “Extrinsic motivators”
• Game Center app —>
• Also availablein your app
• Also available as data via the API.
![Page 16: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/16.jpg)
Game Center• Challenges
SPAM!
![Page 17: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/17.jpg)
Game Center• Multiplayer options:
• Real-time match making
• helps with making the multiplayer connection, (local or internet)
• Asynchronous game match making
• game data stored in Game Center
• All options are very flexible for how many players are allowed, and allow “segmenting” so you can invite a particular subset of players, or specific Game Center Users.
• All options allow for either using some built-in View controllers, or doing the matchmaking programmatically.
![Page 18: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/18.jpg)
GCController
• Physical Controller API
• Supports iOS bluetooth controllers
• Supports Polling for state or change Events
• Will work with new Apple TV (including the remote!)
![Page 19: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/19.jpg)
GamePlayKit• New in iOS 9
• GameplayKit Programming Guide contains links to lots of sample code.
• New classes to help with:
• Entity / Component architecture
• State machines
• Rule Systems
• Minmax AI
• AI behaviors (agents/goals/pathfinding)
![Page 20: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/20.jpg)
ReplayKit
• Share gameplay videos with social media
• New in iOS 9
• (Not compatible with AVPlayer)
![Page 21: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/21.jpg)
UIKit• Highest level Drawing / UI API
• Includes many “built-in” controls (buttons, sliders, tables, etc.)
• Gesture Recognizers
• UIView animateWith… API for motion
• Doesn't preclude using Core Graphics / Quartz
![Page 22: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/22.jpg)
Core Graphics / Quartz• Basically interchangeable terms for the “layers” that back
UIView drawing
• All UIView objects have a CALayer .layer property
• Compossible Animations
• Path-based drawing
• Transformations
• Bitmap rendering — including offscreen!
• “easy” shadows, gradients, particles
![Page 23: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/23.jpg)
CAEmitterLayer• Super simple particles for iOS
• Use Particle Playground (in the mac ap store) to prototype:
![Page 24: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/24.jpg)
UIView Animations• animateWith… family of methods
• provide a way to animate view properties based on a specific amount of time(can animate the following: frame, bounds, center, transform, alpha, backgroundColor, contentStretch)
• Block-based callbacks for completion
• Dynamics: provide some “juiciness” via simple physics
• Pro tip: When things start jumping around check the options
• Note: you can also animate constraints (if that’s your thing)
• Lots of “helpers” out there…
![Page 25: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/25.jpg)
UIView Animation Helpers• JazzHands — from If This Then That
• keyframes & combining animations
• can “lock” animations to a scroll view (or your own property/counter!)
• JHChainableAnimations — for readable animations!
• POP — from Facebook
• Also see AGGeometryKit+POP
• AHEasing — Awesome set of easing functions
• Squash — Brings traditional video animation techniques to UIView (https://github.com/Spaceman-Labs/Squash)
![Page 26: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/26.jpg)
Cocapods• ObjectAL-for-iPhone — everything audio
• GooglePlayGames — for Google Play leaderboards / achievements / etc.(There is even a “Game Center co-existence Guide” here: https://developers.google.com/games/services/ios/gameCenter)
• GenericGameModel — my own small lib for grid-based games (More about this later!)
• Others..?
![Page 27: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/27.jpg)
UIKit Game Opinions
![Page 28: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/28.jpg)
Why UIKit?• Actually: “Why not any of the previously
discussed API or frameworks?”
• Essentially, there are better alternatives, mostly
• For 3D: Unity, Unreal
• For 2D: Unity, HAXE, OpenFrameworks, Moai
• These are easier, more cross-platform, less half-assed
![Page 29: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/29.jpg)
Understand the Game Loop• Every game has a loop. Ideally, a loop runs 30-60
times a second, and handles:
• Update
• looks at events and input
• updates game state
• Draw
• renders from Game State
![Page 30: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/30.jpg)
Game Loop, Continued• Drawbacks:
• Need to handle the case where it isn’t exactly your target frame rate
• Need to be “smart” about what you do in the loop, it’s very easy to do everything (calculate and render) every frame, and this will heat up the device
• Without using some kind of animation manager, you need to manage animations yourself (Worth noting that SpriteKit and other frameworks do usually provide this sort of thing for you)
![Page 31: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/31.jpg)
Game Loop Alternative• Worth noting that iOS apps are already running in a “game
loop”, the run loop (NSRunLoop)
• In it, everything is event-based:
• Responding to touches
• Responding to button (UIResponder) events
• “Schedule” animations, Apple’s frameworks handle easing
• You can also “schedule” game updates, if you want / need to, using dispatch_async()
![Page 32: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/32.jpg)
UIKit Game Types
• Event driven — Turn-based, board games, simple puzzle games
• Data Driven — trivia or word games
• Location or Map-based games — typically using one of the map frameworks
• Others?
![Page 33: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/33.jpg)
Me & UIKit Games
![Page 34: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/34.jpg)
ActionChess
• My first app • Released Feb 2009
(For iPhone OS 2!!!) • All game logic in a single
UIView subclass (😁😰😭)
![Page 35: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/35.jpg)
For The Win
• My project after going contract / freelance
• For Tasty Minstrel Games • Released late 2012 • First collaboration with
Tysen Streib, AI Developer
![Page 36: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/36.jpg)
Oppo-Citrus
• Released late 2012 • Opposite of Tetris • First real collaboration with
anyone for one of my own applications
• Sound Effects made with REAL fruit!
![Page 37: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/37.jpg)
Enter GenericGameModel• Common themes in previous games:
• coordinate / grid-based games
• "stateful" grid elements
• minimal animations required
• Began work on GGM during the Overnight Game Jam at 360iDev in September 2012
![Page 38: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/38.jpg)
Generic Game Model
• Model
• Update
• GGM_BaseModel
• Handles game logic
• Stores state for each game coordinate
• View
• Draw
• GGM_UIView
• Handles touch input
• Translates pixel coordinates to model coordinates
Natural split felt like:
![Page 39: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/39.jpg)
Cloud Growth
• Unreleased game jam collaboration with fellow iOS developer Levi Brown
• First instance of a game using Generic Game Model (GGM)
![Page 40: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/40.jpg)
Henchmen
• Unreleased Ludum Dare game, December 2012
• Subclassed GGM_UIView
to support isometric • Only time the isometric
class was used, unfortunately.
![Page 41: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/41.jpg)
DrawCade
• Drawing app for the iCade • Jan 2013 — updated to
use GGM (in less than a day)
• Spent another 2 days making it Universal
![Page 42: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/42.jpg)
RE@L Match Games
• Educational counting apps for RE@L client
• 3 apps using similar codebase
• published Dec 2013 • Used GGM
![Page 43: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/43.jpg)
Root Down
• Original Board Game • Published December 2013 • Initial prototype in ~6 hours
(one evening) using GGM • App store version took
~4 more hours
![Page 44: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/44.jpg)
OFC Poker
• Client application built in ~6 weeks
• Feb/March 2014 • Collaboration with
Tysen Streib • Used GGM
![Page 45: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/45.jpg)
Memory Matters
• Grant funded client application
• Late 2014 • Used GGM
![Page 46: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/46.jpg)
Catchup
• Began project in Jan 2013 • Released August 2014 • Most commercially successful
app to date (with more than one
⭐⭐️⭐️⭐️⭐️ ️review)!
• Another collaboration with AI developer Tysen Streib
• First instance of GGM_HexView
![Page 47: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/47.jpg)
Other Misc GGM Stuff• I have “experimented” with porting GGM_UIView
to use SpriteKit
• Lost steam after discovering its poor performance in the iOS simulator
• Triangle games experiments
• Moving toward more “built-in” functionality
• Have removed its single dependency
![Page 48: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/48.jpg)
GGM Example
• Sample application
(included in Github GGM
repository) • Supports square, hex,
triangular grid types of
arbitrary size • Supports tap and drag
gestures
![Page 49: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/49.jpg)
What’s next for GGM?• More prototypes! (Obviously)
• Possibly more grid types
• More platforms
• possibly porting this to another framework (current front-runners are OpenFL or OpenFrameworks)
• tvOS
![Page 50: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/50.jpg)
ActionGo
• A port of my first game (pre-iOS)
• To iPhone, iPad • tvOS • And possibly
OSX
![Page 51: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/51.jpg)
Questions?
![Page 52: iOS Game Development with UIKit io… · Game Center • Multiplayer options: • Real-time match making • helps with making the multiplayer connection, (local or internet) •](https://reader033.fdocuments.in/reader033/viewer/2022060208/5f0406347e708231d40bf11b/html5/thumbnails/52.jpg)
References• http://developer.apple.com/metal
• http://developer.apple.com/spritekit
• http://developer.apple.com/scenekit
• https://developer.apple.com/library/ios/documentation/General/Conceptual/GameplayKit_Guide/ & https://developer.apple.com/library/prerelease/mac/documentation/GameplayKit/Reference/GameplayKit_Framework
• Particle Playground: https://itunes.apple.com/us/app/particle-playground/id600661093?mt=12
• Nice intro to SceneKit: https://www.objc.io/issues/18-games/scenekit/
• Generic Game Model: https://github.com/mgrider/GenericGameModel