- added Objective-C nullability support
- added Objective-C generics support
- added swift demo project
- added 'SPMatrix3D' and 'SPVector3D' classes for 3D math transformations
- added 'SPSprite3D' class for simple 3D transformations
- added 3D transformation methods to SPDisplayObject, SPRenderSupport classes
- added 3D camera properties to SPStage class ('fieldOfView', 'focalLength', 'projectionOffset')
- added 'is3D' property to SPDisplayObject class
- added 'hitTestObject:' method to SPDisplayObject class for hit testing object bounding boxes
- added 'hitTestPoint:forTouch:' to SPDisplayObject class, for better control over hit testing points that aren't touches
- added 'over' and 'disabled' states to SPButton class
- added 'overlay' property to SPButton class
- added 'readjustSize' method to SPButton class
- added 'alphaWhenDown' property to SPButton class
- added 'flattenIgnoringChildOrder:' to SPSprite
- added 'data' property to SPEventDispatcher
- added support for stencil masking of all display objects via new 'mask' property
- added 'SPIndexData' class for managing index data
- added 'SPPolygon' class for describing closed two-dimensional shapes
- added 'SPCanvas' class for basic vector drawing functionality (main use right now: masking)
- added 'reverseFrames' method to MovieClip class
- added 'leading' property to SPTextField class
- added 'bold' property to SPTextField class
- added 'italic' property to SPTextField class
- added utility methods to SPQuadBatch class
- added support for negative indices to '[SPDisplayObjectContainer childAtIndex:]'
- added 'SPBlendModeMask' and 'SPBlendModeBelow
- added SPTransitionBlock and 'transitionBlock' to SPTween class
- implemented 'NSCopying' for SPDisplayObject class and subclasses
- changed external 'int' parameters to 'NSInteger' for better interoperability with swift
- improved SPTextField native text rendering support
- improved SPContext coverage and support methods
- removed GLKViewController depencencies, added 'SPView' class
- added 'touchGroup' property to display object containers (similar to Flash's 'mouseChildren')
- added 'perpendicular' and 'truncateLength:' methods to 'SPPoint', normalize is now safe
- added 'randomFloat' method to SPUtils
- added 'color' property to 'SPButton'
- added uniform 'scale' property to display objects
- added GLKView convenience property to 'SPViewController'
- added Swift versions of Scaffold and Barebone projects (thanks to Dain Kaplan!)
- enhanced quality of displacement map filter on iPad 1
- deactivated OpenGL state cache for now, marked as 'experimental'
- fixed Xcode warning about XCTest migration
- fixed Xcode 6 beta incompatibilities / warnings
- fixed some analyzer warnings
- fixed some missing (auto)release calls
- fixed that already ended touch events were canceled
- fixed filter caching
- fixed that stats display could only be enabled after context was created
- fixed filter caching and implemented 'isCached' property
- fixed performance problem by disabling vertex attrib arrays after filter rendering
- fixed margin calculation in Blur Filter
Again, a HUGE thanks to Robert Carone for his support!
- this version is more than 250% faster than the previous release!
- switched back from ARC to MRC for maximum performance
- full 64 bit compatibility
- optimized broadcast of ENTER_FRAME event
- added OpenGL state caching
- optimized render state stack
- disabling blending completely on SPBlendModeNone
- optimized SPPoolObject and made it thread-safe
- lots and lots of other optimizations all over the place
- replaced literal string macros with NSString constants
- safer hash method for point, rectangle and matrix
- complete rewrite of texture loading, thus getting rid of GLKTextureLoader
- added 'SPFragmentFilter' base class for special effects
- added 'SPBlurFilter' for blur, drop shadow and glow
- added 'SPColorMatrixFilter' for color manipulations
- added 'SPDisplacementMapFilter' for pixel distortions
- added rectangular clipping support to SPSprite
- added 'SPContext' for managing native context, viewport, scissor rectangle, etc.
- added 'speed' property to SPJuggler
- added 'isDown' property to SPButton
- added 'physicsBody' property to display objects, to be used by physics libraries
- added 'inflateXBy:yBy:' method to SPRectangle
- added 'normalize' method to SPRectangle
- added 'nativeWidth' and 'nativeHeight' properties to texture classes
- added support for rotated atlas textures
- added 'angle', 'scaleX' and 'scaleY' properties to matrix class
- added 'alignPivotToCenter' and 'alignPivotX:pivotY:' methods to display objects
- added 'base' property to SPSubTexture & renamed 'baseTexture' to 'parent'
- added texture cache that becomes active when the same texture is loaded multiple times
- added helper function 'SPSign'
- finally got rid of linker flag requirements 'ObjC' and 'all_load'
- changed 'nativeTouch' method of SPTouch to 'touchID'
- deactivated mipmaps for TrueType textfields (for faster textfield creation)
- library project now creates ".framework" for easier integration in projects
- converted unit tests to XCTest
- fixed that new SPAVSoundChannel did not obey master volume
- fixed async texture scale in demo on iPad 3+
- fixed crash of sound channel when it couldn't be created
Thanks to Robert Carone for his MASSIVE help with this release! The majority of these changes were done by him; most importantly the MRC change.
- added compatibility with iOS 7
- added compatibility with 64 bit compilation
- added 'setCurrentController:' method to 'Sparrow' class
- added workaround for 'GLKTextureLoader' bug (caused exception when GL error flag was dirty)
- added 'texture' property to 'SPTextureAtlas'
- added 'regionByName:' and 'frameByName:' to 'SPTextureAtlas'
- fixed compiler warnings in Xcode 5
- fixed bug in SPDisplayObject that might prevent proper releasing of objects (thanks to Ariel!)
- optimized performance of async texture loading by using a shared texture loader
- optimized text handling of 'SPButton' (now removing textfield when its empty)
- optimized some matrix calculations
- added bubbling for TRIGGERED events of SPButton (for consistency with Sparrow)
- added runtime-check that pooled objects are not used from multiple threads (in DEBUG mode)
- added more convenience methods to 'SPVertexData'
- added an additional font registration method
- added 'Sparrow.root' method
- renamed 'SPQuadEffect' to 'SPBaseEffect'
- fixed initialization of SPViewController when 'initWithCoder:' is called (thanks Ariel!)
- fixed bug when SPProgram populates lists of uniforms (thanks Ariel!)
- fixed pivot point assignment in transformation matrix setter
- added 'SPViewController', which is now the starting point for all Sparrow games
- added asynchronous texture loading methods
- added blend modes to display objects
- added 'setAlpha:ofVertex' and 'alphaOfVertex:' to SPImage
- added 'SPProgram' class for shader programs
- added 'SPQuadEffect' class for simple quad rendering
- added 'SPQuadBatch' class for batched quad rendering
- added 'SPVertexData' class to simplify vertex buffer data handling
- added 'Sparrow' class for easy access of stage, juggler, contentScaleFactor, etc.
- added 'root' property to display objects, pointing to start-up object
- added 'base' property to display objects, pointing to top-most object
- added 'dispatchEventWith:(bubbles:)' method for quick event dispatching
- added block-based event listeners
- added 'repeatCount', 'repeatDelay' & 'reverse' properties to tween
- added more 'description' methods
- added render state stack to SPRenderSupport
- added 'mini' bitmap font
- added block-based XML parsing extension
- added methods to set all point and rectangle members simultaneously
- added 'autoScale' property to SPTextField
- added 'createSprite' method to SPBitmapFont
- added blocks to delayed invocation and juggler
- added workaround for audio interruption problems in new iOS versions
- added 'setTexCoordsWithX:y:' to SPImage
- added 'movementInSpace:' method to SPTouch
- added more access methods to SPTextureAtlas
- added transformation matrix setter in SPDisplayObject
- converted all Sparrow code to ARC
- converted all rendering code to OpenGL ES 2.0
- cleaned up 'SPMovieClip' methods
- changed 'SPAnimatable' interface: removed 'isComplete' and replacing it with event
- changed prefix of member variables from 'm' to '_' (underscore)
- now using the same matrix for both rendering and hit test logic
- now using SPQuadBatch for all quad rendering
- renamed SPTextureFilter to SPTextureSmoothing
- renamed 'bundleDrawCalls:' to 'drawBundled:' in SPRenderTexture
- renamed 'count' to 'numTextures' in SPTextureAtlas
- replaced MOVIE_COMPLETED and SOUND_COMPLETED with a shared COMPLETED event
- replaced tween events with callback blocks
- replaced SPCompiledSprite with new 'flatten'/'unflatten' methods in SPSprite
- updated scaffold project for new architecture
- updated factory methods to use 'self' instead of class and return 'id'
- updated texture loading to use GLKTextureLoader internally
- updated 'fileExistsAtPath:' of SPUtils to support relative paths
- optimized bitmap font rendering by using SPQuadBatch
- optimized output correctness of bitmap font rendering
- optimized quad bounds calculation
- removed deprecated methods
- removed clause 3 of license (now using a pure Simplified BSD license)
- modernized Objective-C syntax
- added 'readjustSize:' method to SPImage
- added 'fontName' parameter in 'registerBitmapFont' methods (thanks, tconkling!)
- added iOS 5 rotation code (thanks, Brian!)
- added support for iOS 6 in demo, scaffold, and barebone projects
- added support for fractions of SP_NATIVE_FONT_SIZE (e.g. *2, *0.5) for Bitmap Fonts
- removed override of default architecture for Xcode 4.5 compatibility (thanks, theyonibomber!)
- optimized 'containsChild:' method
- optimized matrix rotation method
- optimized 'removeChildAtIndex:' method (removed obsolete retain/release calls)
- optimized transformation matrix calculations (matrix is now cached)
- fixed leftover touches when app moves in background; existing touches are now canceled
- fixed several warnings that popped up in iOS 6 SDK
- fixed texture lookup: when 4x is requested but not available, 2x is tried before 1x
- fixed exception when bitmap text contained two (or more) line feeds
- fixed error caused by removal of sibling in REMOVED_FROM_STAGE event
- fixed letterbox code of scaffold so that it works on the retina iPad
- fixed hashing problems by renaming 'isEqual' to 'isEquivalent' in matrix, point, and rectangle classes
- added support for ARC (automatic reference counting)
- added support for device modifiers ('~iphone', '~ipad') in image filenames
- added support for device modifiers in 'scale_textures.rb' script
- added comprehensive new scaffold project featuring
- auto rotation of Sparrow content
- auto rotation of UIKit overlay (for iAds, etc.)
- very simple support for universal applications
- added 'BareBone' project, which replaces the old app scaffold
- added support for new PVR texture types: I8, A8, AI88, RGB888
- added 'sortChildren' method to SPDisplayObjectContainer
- added 'currentTime' property to SPTween
- added 'fadeTo' method to SPTween
- added 'SP_EVENT_TYPE_COMPILE', dispatched on children when a sprite is compiled
- added 'broadcastEvent' method to SPDisplayObject
- added 'setIndex:ofChild:' method to SPDisplayObjectContainer
- added 'SP_SWAP' macro
- added 'SP_CLAMP' macro
- added check for invalid display tree recursion (adding a parent as a child)
- added more utility methods to point, rectangle and matrix classes
- added 'stop' method to SPMovieClip
- updated license to require 'powered by Sparrow' information
- updated graphics of demo project with new bird style
- fixed object pooling for iOS 5
- fixed HD texture loading when SD texture is missing
- fixed tweening integers to a negative value
- fixed support of texture frames in bitmap fonts
- fixed bounds method of empty sprite
- fixed warnings that appeared in LLVM compiler
- fixed 'isPlaying' property of movie clip
- added pivotX- and pivotY-property to SPDisplayObject to allow manipulation of the origin point
- added support for GZip'ed PVR textures
- added support for texture frames aka trimmed textures
- added kerning to bitmap fonts (if the font file contains kerning information)
- added [SPStage mainStage] method for quick access to the stage
- added ability to choose between nearest neighbor, bilinear and trilinear texture filtering
- added 'moveToX:y' and 'scaleTo:' methods to SPTween
- added support for RGBA8888 texture format
- added support for tweening unsigned integers
- added events on each loop of an SPMovieClip
- added support for directories when loading resource files; in iOS 3.x, that did not work before.
- added color property to stage
- added [NSBundle appBundle] extension method. This method is now used throughout the framework instead of [NSBundle mainBundle]. That way, unit tests will find their resource files, too.
- updated button to behave just like a textfield: the text does not stretch any longer when width or height are changed
- updated projects for Xcode4
- updated xml parsing to work around memory leak
- fixed bounds-optimization of SPQuad, which might have failed in subclasses
- fixed path handling of bitmap font and atlas classes
- fixed that HD textures were only found within application bundle
- fixed texture binding problems of SPRenderTexture
- fixed generate_atlas.rb script to work with Ruby 1.9
- fixed looping behavior of tween and movie clip
- fixed wrong scale setting when loading bitmap font with custom texture
- fixed bug that caused Sparrow to treat new touch as if it was an existing one
- fixed name of random number method because of conflicting keyword 'and'
- fixed clearWithColor method
- Special thanks to
- Shilo White for the Pivot Point
- Ludometrics for Bitmap Font kerning
- Tadas Vilkeliskis for tweening of unsigned integers
- Jonathan Shieh for his fix that allows unit tests to load files
- Andreas Wålm for making generate_atlas.rb work with ruby 1.9
- numerous forum members for bug reports, suggestions and feedback!
- added SPRenderTexture
- added SPUtils class for easy random number generation (more to come)
- added support for looping and reversing tweens (thanks, Shilo!)
- added new transition method: 'randomize'
- added support for uncompressed PVR texture formats (565, 5551, 4444)
- added simple way to use HD textures on the iPad
- added support for creating dynamic texture atlases (add/remove regions on the fly)
- added methods to access the glyphs of SPBitmapFont directly
- added new init method to SPImage: 'initWithContentsOfImage:(UIImage *)image'
- added more factory methods to different classes
- added support for changing the fps of SPMovieClip at runtime (thanks Shilo!)
- added AppleDoc inline API documentation
- added bash script that generates API documentation
- updated SPView class to be more robust
- updated general rendering code (moved more OpenGL calls to SPRenderTexture)
- fixed bug with canceled touch events
- fixed bug that could cause a breakdown of the touch handling (thanks Kodi!)
- fixed 'isEqual' method of SPMatrix (thanks Matt!)
- fixed bug that could cut the outermost pixels of HD textures
- Special thanks to numerous forum members for bug reports, suggestions and feedback!
- added support for PVRTC-textures
- added new init method to SPTexture to allow simple use of Core Graphics drawings
- added new init method to SPMovieClip that uses an NSArray containing the frames
- added method 'childByName:' to SPDisplayObjectContainer
- added method 'texturesStartingWith:' to SPTextureAtlas
- added method 'scaleBy:' to SPPoint
- added method 'interpolateFromPoint:toPoint:ratio:' to SPPoint
- added property 'textBounds' to SPTextField
- added property 'name' to SPDisplayObject
- added workaround for unit test problem in Xcode 3.2.4
- updated SPCompiledSprite-class to be public
- updated texture utilities for sharper output
- updated scaffold so that it is easier to create an iPad application
- fixed bug that classes inheriting directly from SPQuad were not rendered
- fixed that last-moment changes were not displayed when pausing stage
- fixed bug that could lead to a white flash when textures were released
- Special thanks to numerous forum members for bug reports, suggestions and feedback!
- !!! interface change !!! The IDs of vertices in SPQuad and SPImage have changed. ("colorOfVertex:", "texCoordsOfVertex:") Before: 0 = top left, 1 = top right, 2 = bottom right, 3 = bottom left AFTER: 0 = top left, 1 = top right, 2 = bottom left, 3 = bottom right
- greatly improved rendering speed of SPTextField when used with bitmap fonts
- greatly improved performance of touch event analysis
- added Sparrow atlas generator (sparrow/util/atlas_generator)
- added Sparrow texture resizer (sparrow/util/texture_scaler)
- added support for high resolution screens (aka iPhone4's retina display)
- added support for high resolution textures ("texture@2x.png")
- added support for high resolution texture atlases ("atlas@2x.xml")
- added support for high resolution bitmap fonts ("font@2x.xml")
- added support for loading textures that are not inside the application bundle
- added support for loading sounds that are not inside the application bundle
- changed base SDK to iOS 4.0
- added new event: SP_EVENT_TYPE_MOVIE_COMPLETED in SPMovieClip class
- added experimental feature: SPCompiledSprite
- added some missing "@private" declarations
- fixed memory access violation when object was destroyed within an enter frame event listener
- fixed bug that alpha values were only used when a texture was active
- fixed bug that SPDelayedInvocation (aka SPJuggler::delayInvocationAtTarget) did not retain its arguments
- fixed bug that cancelled touch events would inhibit further user input
- code cleanup (especially concerning designated initializers)
- Special thanks to: Mike, Baike, Paolo, Jule and Alex_H for bug reports, suggestions and feedback!
- added audio classes
- added SPMovieClip class
- added new transition functions:
- easeInBack / easeOutBack / easeInOutBack / easeOutInBack
- easeInElastic / easeOutElastic / easeInOutElastic / easeOutInElastic
- easeInBounce / easeOutBounce / easeInOutBounce / easeOutInBounce
- added 'removeTweensWithTarget:'-method to juggler
- added 'removeAllChildren'-method to SPDisplayObjectContainer
- added new text-only constructor to SPTextField
- added NSXMLParserDelegate protocol statement for iPhone SDK 4+
- added packer2sparrow utility
- added hiero2sparrow utility
- changed transition function signature (removed delta)
- changed rotation handling: angles now clamped from -180 to +180 degrees. this should make most rotation tweens more intuitive.
- changed license text to allow easy AppStore distribution
- changed scaffold project to support audio
- changed demo project
- new design
- new scene: sound
- new scene: movie
- fixed touch issues when view size != stage size
- fixed exception that occurred when the same object was added to a container twice
- fixed flickering at application start
- fixed method signatures in SPTexture.m
- 'removeChild'-method in SPDisplayObjectContainer no longer throws an exception when the object is not a child, but now silently ignores the failure.
- the stage property is now accessible in the REMOVED_FROM_STAGE event
- disabled unit test execution in iPhone SDK < 3 (unit tests are only supported by iPhone SDK 3+)
- first public version