Designed for iOS
Sparrow was designed from ground up for iOS. It's a first class citizen of UIKit that lives in a custom-built view controller; all APIs were designed to mimic those provided by Apple. This makes it easy to integrate it with native APIs like GameCenter or iAds and allows you to benefit from native performance.
Warp 9.1 Performance
Layered on top of OpenGL ES 2.0, you'll get the best out of any any iOS device. Together with countless hours of performance optimizations, this means that you don't have to worry about performance: create your game and let Sparrow do the rest.
// besides automatic optimizations, you can optimize static content like this:
SPSprite *containter = [self createComplexContainer];
[container flatten];
Hierarchical Display Tree
Organize your objects in hierarchical trees with parent-child relationships. This provides an intuitive and powerful way to build your game from concrete blocks.
SPSprite *parent = [SPSprite sprite];
SPImage *child = [SPImage imageWithContentsOfFile:@"texture.png"];
child.x = 25;
[parent addChild:child];
Powerful Event System
Use the same display tree to fire events like player touches up and down the tree. Rely on your experience: The Sparrow event system works like the well-known ActionScript event system.
[button addEventListenerForType:@"triggered" block:^(id event)
    NSLog(@"Hello Button!");
Particles, Particles, Particles
A particle system is the basis for the jaw-dropping effects in your game. Let your hero wander through heavy snowfall, annihilate enemy ships in mighty explosions or create a cosy fireplace.
SXParticleSystem *fire = [[SXParticleSystem alloc] initWithContentsOfFile:@"fire.pex"];
[fire start];
Nifty Texture Support
Texture handling can't get any simpler than in Sparrow. You can load a bunch of different formats (including the compressed PVR format), create SubTextures, transform texture coordinates, or even tint with colors.
SPTexture *texture = [[SPTexture alloc] initWithContentsOfFile:@"hero.pvr"];
SPImage *image = [[SPImage alloc] initWithTexture:texture];
[self addChild:image];
Display Resolution Awareness
Write your game once, and deploy it to all available iOS devices (iPhone/iPad, with or without retina). Sparrow will choose the optimal set of textures at run-time.
// -> on retina devices, this will load "texture@2x.png"
// -> on an iPad, it will also look for "texture~ipad.png"
SPTexture *texture = [[SPTexture alloc] initWithContentsOfFile:@"texture.png"];
Texture Atlases
Also know as "sprite sheets", texture atlases combine many small textures into one big texture, which greatly accelerates rendering on typical GPU architectures. Sparrow supports them transparently.
SPTextureAtlas *atlas = [[SPTextureAtlas alloc] initWithContentsOfFile:@"atlas.xml"];
SPTexture *texture = [atlas textureByName:@"hero"];
SPImage *image = [[SPImage alloc] initWithTexture:texture];
Blend Modes
Use different blend modes to create special effects, like glowing fire or dynamic highlights.
SPImage *image = [[SPImage alloc] initWithTexture:texture];
image.blendMode = SP_BLEND_MODE_SCREEN;
Sparrow contains its own, powerful tweening system. It allows you animate your objects properties with different transition curves. You can even group animations, using the innovative "Juggler" system.
SPTween *tween = [[SPTween alloc] init];
[tween moveToX:10 y:20];
[tween animateProperty:@"health" targetValue:1.0];
[Sparrow.juggler addObject:tween];
Sparrow associates touch input intuitively with the corresponding display objects. Multitouch is baked right into the engine.
- (void)onTouch:(SPTouchEvent *)event
    // get all moving touches
    NSSet *touches = [event touchesWithTarget:self andPhase:SPTouchPhaseMoved];
Bitmap Fonts
Sparrow supports classic TrueType fonts and Bitmap Fonts. Those provide the best performance you can get with GPU text rendering. They also make it easy to style your text with outlines, shadows, etc.
[SPTextField registerBitmapFontFromFile:@"bacon.fnt"];
SPTextField *textField = [[SPTextField alloc] initWithText:@"Hello Font World"];
textField.fontName = "Bacon";
Render Textures
Whatever you draw on screen can be rendered directly to a texture. This is extremely fast and allows for great special effects like footprints in the snow and bullet holes in the wall.
SPRenderTexture *canvas = [[SPRenderTexture alloc] init];
[canvas drawObject:footPrint];
SPImage *image = [[SPImage alloc] initWithTexture:canvas];
Sparrow was built from the ground up to be easy to understand, modify and extend. Write custom display objects, plug in your own fragment and vertex shaders, or use Sparrow in any other way we have never even thought of.
- (void)render:(SPRenderSupport *)support
    /* Your OpenGL code */