All notable changes to this project will be documented in this file. This project adheres to Semantic Versioning.
- Excalibur user documentation has now moved to excaliburjs.com/docs
- Excalibur will now prompt for user input before starting the game to be inline with the new webaudio requirments from chrome/mobile browsers (#1031)
- Fixed issue where pointer events do not work in mobile (#1044)
- Fixed issue where iOS was not loading by including the right polyfills (#1043)
- Fixed issue where sprites do not work in Firefox (#980)
- Fixed issue where collision pairs could sometimes be incorrect (#975)
- Fixed box collision velocity resolution so that objects resting on a surface do not accumulate velocity (#986)
0.18.0 - 2018-08-04
Sound.setVolume()
replaced withSound.volume
Sound.setLoop()
replaced withSound.loop
- Add
Scene.isActorInDrawTree
method to determine if an actor is in the scene's draw tree.
- Fixed missing
exitviewport/enterviewport
events on Actors.on/once/off signatures (#978) - Fix issue where Actors would not be properly added to a scene if they were removed from that scene during the same frame (#979)
0.17.0 - 2018-06-04
- Property scope
Pointer.actorsUnderPointer
changed to private; Sprite.sx
replaced withSprite.x
Sprite.sy
replaced withSprite.y
Sprite.swidth
replaced withSprite.width
Sprite.sheight
replaced withSprite.height
- Allow timers to limit repeats to a finite number of times (#957)
- Convenience method on Scene to determine whether it is the current scene. Scene.isCurrentScene() (#982)
- New
PointerEvent.stopPropagation()
method added. Works the same way as (https://developer.mozilla.org/en-US/docs/Web/API/Event/stopPropagation
) (#912) - New
Actor.getAncestors()
method, which retreives full array of current Actor ancestors - Static
Actor.defaults
prop, which implementsIActorDefaults
. - Native sound events now exposed
volumechange
- on playing sound volume change;pause
- on playback pause;stop
- on playback stop;emptied
- on data cleanup(f.e. when setting new data);resume
- on playback resume;playbackstart
- on playback start;playbackend
- on playback end;
- Added
Sound.instances
getter, which returns active tracks. Playing or paused; - Added
Sound.getTrackId(track: [[AudioInstance]])
method. Which returns id of track provided, if it is in list of active tracks.
- Refactored Easing functions to be reversable (#944)
- Now at creation every
Actor.anchor
prop is set to defaultActor.defaults.anchor
. - Scene.remove(Actor) now starts the Actor.Kill event cycle.(#981)
CapturePointer.update()
method now doesn't propagate event to actor, just verifies pointer events for actor.- Added
Sound.volume
&Sound.loop
properties as a replacement forSound.setVolume()
andSound.setLoop()
. The methodssetVolume
andsetLoop
have been marked obsolete.
- Added missing variable assignments to TileMapImpl constructor (#957)
- Correct setting audio volume level from
value
tosetValueAtTime
to comply with deprecation warning in Chrome 59 (#953) - Force HiDPI scaling to always be at least 1 to prevent visual artifacts in some browsers
- Recalculate physics geometry when width/height change on Actor (#948)
- Fix camera move chaining (#944)
- Fix
pickSet(allowDuplicates: true)
now returns the proper length array with correct elements (#977) Index
export order to preventalmond.js
from creation of corrupted modules loading order.Sound.pause()
now saves correct timings.- Fix
ex.Vector.isValid
edgecase atInfinity
(#1006)
0.16.0 - 2018-03-31
- New typesafe and override safe event lifecycle overriding, all
onEventName
handlers will no longer be dangerous to override (#582)- New lifecycle event
onPreKill
andonPostKill
- New lifecycle event
- SpriteSheets can now produce animations from bespoke sprite coordinates
SpriteSheet.getAnimationByCoords(engine, coords[], speed)
(#918) - Added drag and drop support for Actors (#134)
- New Event
enter
- New Event
leave
- New Event
pointerenter
- New Event
pointerleave
- New Event
pointerdragstart
- New Event
pointerdragend
- New Event
pointerdragmove
- New Event
pointerdragenter
- New Event
pointerdragleave
- New Class
PointerDragEvent
which extendsPointerEvent
- New Class
GlobalCoordinates
that contains Vectors for the world, the page, and the screen. - Added property
ICapturePointerConfig.captureDragEvents
which controls whether to emit drag events to the actor - Added property
PointerEvent.pointer
which equals the original pointer object
- New Event
Sprite.sx
,Sprite.sy
,Sprite.swidth
,Sprite.sheight
has be deprecated in favor ofSprite.x
,Sprite.y
,Sprite.width
,Sprite.height
(#918)
- Added missing lifecycle event handlers on Actors, Triggers, Scenes, Engine, and Camera (#582)
- Tile Maps now correctly render negative x-axis coordinates (#904)
- Offscreen culling in HiDPI mode (#949)
- Correct bounds check to check drawWidth/drawHeight for HiDPI
- suppressHiDPIScaling now also suppresses pixel ratio based scaling
- Extract and separate Sprite width/height from drawWidth/drawHeight to prevent context corruption (#951)
0.15.0 - 2018-02-16
LockedCamera
replaced withBaseCamera.strategy.lockToActor
SideCamera
replaced withBaseCamera.strategy.lockToActorAxis
Body.wasTouching
replaced with event typeCollisionEnd
- Option bag constructors have been added for commonly-used classes (see Constructors.md) (#410)
0.14.0 - 2017-12-02
- Triggers now have a new option bag constructor using the
ITriggerOptions
interface. (#863). update
event replaced withpostupdate
eventCollisionEvent
replaced byPreCollisionEvent
getDrawWidth()
andgetDrawHeight()
replaced with the gettersdrawWidth
anddrawHeight
PointerEvent.x
andPointerEvent.y
replaced withPointerEvent.pos
- Automatic HiDPI screen detection and scaling in excalibur internals to correct blurry bitmap rendering on HiDPI screens. This feature can optionally be suppressed with
IEngineOptions.suppressHiDPIScaling
. - Added new line utility
Line.normal()
andLine.distanceToPoint
(#703) - Added new PolygonArea utility
PolygonArea.getClosestFace(point)
(#703) - Triggers now fire an
EnterTriggerEvent
when an actor enters the trigger, and anExitTriggerEvent
when an actor exits the trigger. (#863) - Actors have a new events
CollisionStart
which when 2 actors first start colliding andCollisionEnd
when 2 actors are no longer colliding. (#863) - New camera strategies implementation for following targets in a scene. Allows for custom strategies to be implemented on top of some prebuilt
LockCameraToActorStrategy
which behaves likeLockedCamera
and can be switched on withCamera.strategy.lockToActor(actor)
.LockCameraToActorAxisStrategy
which behaves likeSideCamera
and can be switched on withCamera.strategy.lockToActorAxis(actor, ex.Axis.X)
ElasticToActorStrategy
which is a new strategy that elastically moves the camera to an actor and can be switched on withCamera.strategy.elasticToActor(actor, cameraElasticity, cameraFriction)
CircleAroundActorStrategy
which is a new strategy that will follow an actor when a certain radius from the camera focus and can be switched on withCamera.strategy.circleAroundActor(actor)
- Trigger have been rebuilt to provide a better experience. The trigger
action
only fires when an actor enters the designated area instead of every frame of collision. (#863) - Triggers can now draw like other Actors, but are still not visible by default (#863)
Body.wasTouching
has been deprecated in favor of a new event typeCollisionEnd
(#863)SideCamera
andLockedCamera
are deprecated in favor of camera strategies
- Fixed odd jumping behavior when polygons collided with the end of an edge (#703)
0.13.0 - 2017-10-07
Scene.children
replaced withScene.actors
- Convenience getters implemented
halfDrawWidth
,halfDrawHeight
,halfCanvasWidth
,halfCanvasHeight
,canvasWidth
, andcanvasHeight
. - New pause/unpause feature for timers to help with more robust pausing (#885)
- New event listening feature to listen to events only
.once(...)
then unsubscribe automatically (#745) - New collision event
postcollision
to indicate if collision resolution occured (#880)
PointerEvent.x
andPointerEvent.y
, in favor ofPointerEvent.pos
(#612)CollisionEvent
has been deprecated in favor of the more clearPreCollisionEvent
(#880)getDrawWidth()
andgetDrawHeight()
have been marked obsolete and changed into the gettersdrawWidth
anddrawHeight
respectively in order to progressively make getters/setters consistent (#861)
- Fixed same instance of color potentially being shared, and thus mutated, between instance actors (#840)
- Fixed bug where active and passive type collisions would resolve when they shouldn't when in rigid body mode (#880)
0.12.0 2017-08-12
CollisionType.Elastic
has been removedPromises.wrap
has been replaced withPromise.resolve
- Added new hsl and hex format options in Color.toString(format) using rgb as the default to maintain backwards compatibility (#852)
Animation.loop
property now to set totrue
by default (#583)- Added backgroundColor to engine options as part of Engine constructor (#846)
ex.Scene.children
is nowex.Scene.actors
(#796)
0.11.0 2017-06-10
- Renamed Utils.removeItemToArray() to Utils.removeItemFromArray() (#798)
- Added optional volume argument to
Sound.play(volume?: number)
, which will play the Audio file at anywhere from mute (volume
is 0.0) to full volume (volume
is 1.0). (#801) - Added another DisplayMode option:
DisplayMode.Position
. When this is selected as the displayMode type, the user must specify a newposition
option (#781) - Added a static method
distance
to theVector
class (#517) - Added
WheelEvent
event type for thewheel
browser event, Excalibur now supports scroll wheel (#808)
- Camera zoom over time now returns a promise that resolves on completion (#800)
- Edge builds have more descriptive versions now containing build number and Git commit hash (e.g.
0.10.0-alpha.105#commit
) (#777)
- Fixed camera zoom over time, before it did not work at all (#800)
- Fixed semi-colon key not being detected on Firefox and Opera. (#789)
0.10.0 2017-04-07
- Rename
Engine.width
andEngine.height
to beEngine.canvasWidth
andEngine.canvasHeight
(#591) - Rename
Engine.getWidth
andEngine.getHeight
to beEngine.getDrawWidth
andEngine.getDrawHeight
(#591) - Changed
GameEvent
to be a generic type for TypeScript, allowing strongly typing thetarget
property. (#724) - Removed
Body.useEdgeCollision()
parametercenter
(#724)
- Added
Engine.isPaused
to retrieve the running status of Engine (#750) - Added
Engine.getWorldBounds
to provide a quick way to get the top left corner and bottom right corner of the screen (#729) - Added predraw and postdraw events to
Engine
class. These events happen when prior to and after a draw (#744) - Added Perlin noise generation helper
ex.PerlinGenerator
for 1d, 2d, and 3d noise, along with drawing utilities (#491) - Added font styles support for normal, italic, and oblique in addition to bold text support (#563)
- Update project to use TypeScript 2.2.2 (#762)
- Changed
Util.extend
to includeObject.assign
functionality (#763)
- Update the order of the affine transformations to fix bug when scaling and rotating Actors (#770)
0.9.0 2017-02-09
- Added
preupdate
,postupdate
,predraw
,postdraw
events to TileMap - Added
ex.Random
with seed support via Mersenne Twister algorithm (#538) - Added extended feature detection and reporting to
ex.Detector
(#707)ex.Detector.getBrowserFeatures()
to retrieve the support matrix of the current browserex.Detector.logBrowserFeatures()
to log the support matrix to the console (runs at startup when in Debug mode)
- Added @obsolete decorator to help give greater visibility to deprecated methods (#684)
- Added better support for module loaders and TypeScript importing. See Installation docs for more info. (#606)
- Added new Excalibur example project templates (#706, #733):
- Added
Pointer.lastPagePos
,Pointer.lastScreenPos
andPointer.lastWorldPos
that store the last pointer move coordinates (#509)
- Fixed Scene/Actor activation and initialization order, actors were not being initialized before scene activation causing bugs (#661)
- Fixed bug with Excalibur where it would not load if a loader was provided without any resources (#565)
- Fixed bug where an Actor/UIActor/TileMap added during a Timer callback would not initialize before running
draw
loop. (#584) - Fixed bug where on slower systems a Sprite may not be drawn on the first
draw
frame (#748)
0.8.0 2016-12-04
ex.Vector.magnitude
alias that callsex.Vector.distance()
to get magnitude of Vector (#663)- Added new
ex.Line
utilities (#662):ex.Line.slope
for the raw slope (m) valueex.Line.intercept
for the Y intercept (b) valueex.Line.findPoint(x?, y?)
to find a point given an X or a Y valueex.Line.hasPoint(x, y, threshold)
to determine if given point lies on the line
- Added
Vector.One
andVector.Half
constants (#649) - Added
Vector.isValid
to check for null, undefined, Infinity, or NaN vectors method as part of (#665) - Added
ex.Promise.resolve
andex.Promise.reject
static methods (#501) - PhantomJS based testing infrastructure to accurately test browser features such as image diffs on canvas drawing (#521)
- Added some basic debug stat collection to Excalibur (#97):
- Added
ex.Engine.stats
to hold frame statistic information - Added
ex.Engine.debug
to hold debug flags and current frame stats - Added
preframe
andpostframe
events toEngine
as hooks - Added ex.Physics statistics to the Excalibur statistics collection
- Added
- Added new fast body collision detection to Excalibur to prevent fast moving objects from tunneling through other objects (#665)
- Added DynamicTree raycast to query the scene for bounds that intersect a ray
- Added fast BoundingBox raycast test
- Internal physics names refactored to be more readable and to use names more in line with game engine terminology (explicit broadphase and narrowphase called out)
ex.Promise.wrap
(#501)
- Fix
Actor.oldPos
andActor.oldVel
values on update (#666) - Fix
Label.getTextWidth
returns incorrect result (#679) - Fix semi-transparent PNGs appear garbled (#687)
- Fix incorrect code coverage metrics, previously our test process was reporting higher than actual code coverage (#521)
- Fix
Actor.getBounds()
andActor.getRelativeBounds()
to return accurate bounding boxes based on the scale and rotation of actors. (#692)
0.7.1 - 2016-10-03
- Refactored and modified Sound API (#644)
Sound.setData
now returns a Promise which differs from previous API- Removed internal
FallbackAudio
andSound
classes and replaced with singleSound
class - Added
AudioTagInstance
andWebAudioInstance
internal classes
ex.Promise.join(Promise[])
support (in addition to...promises
support) (#642)- Moved build artifacts to separate excalibur-dist repository (#648)
ex.Events
namespace and typed event handler.on(...)
overloads for default events on core excalibur objects (#639)Engine.timescale
property (default: 1.0) to add time-scaling to the engine for time-based movements (#543)- Two new parameters to
ex.Util.DrawUtil.line
that accept a line thickness and end-cap style (#658)
Actor.actions.fade
properly supporting fading between 0 and 1 and vice versa (#640)- Fix issues with audio offset tracking and muting while game is invisible (#644)
Actor.getHeight()
andActor.getWidth()
now take into account parent scaling (#645)Actor.debugDraw
now works properly for child actors (#505, #645)- Sprite culling was double scaling calculations (#646)
- Fix negative zoom sprite culling (#539)
- Fix Actor updates happening more than once per frame, causing multiple pointer events to trigger (#643)
- Fix
Actor.on('pointerup')
capturePointer events opt-in on event handler. The opt-in was triggering correctly for handlers on 'pointerdown' and 'pointermove', but not 'pointerup'.
0.7.0 - 2016-08-29
- Code marked 'Obsolete' has been removed (#625, #603)
Actor
addEventListener
getWorldX
,getWorldY
clearActions
,easeTo
,moveTo
,moveBy
,rotateTo
,rotateBy
,scaleTo
,scaleBy
,blink
,fade
,delay
,die
,callMethod
,asPromise
,repeat
,repeatForever
,follow
,meet
Class
addEventListener
,removeEventListener
Engine
- parameterized constructor
addChild
,removeChild
UpdateEvent
removed
Scene.addChild
andScene.removeChild
are now protected- Removed ex.Template and ex.Binding (#627)
- New physics system, physical properties for Actors (#557, #472)
- Read The Docs support for documentation (#558)
- Continuous integration builds unstable packages and publishes them (#567)
- Sound and Texture resources can now process data (#574)
- Actors now throw an event when they are killed (#585)
- "Tap to Play" button for iOS to fulfill platform audio requirements (#262)
- Generic lerp/easing functions (#320)
- Whitespace checking for conditional statements (#634)
- Initial support for Yeoman generator (#578)
- Upgraded Jasmine testing framework to version 2.4 (#126)
- Updated TypeScript to 1.8 (#596)
- Improved contributing document (#560)
- Improved local and global coordinate tracking for Actors (#60)
- Updated loader image to match new logo and theme (#615)
- Ignored additional files for Bower publishing (#614)
- Actions on the action context threw an error (#564)
- Actor
getLeft()
,getTop()
,getBottom()
andgetRight()
did not respect anchors (#568) - Actor.actions.rotateTo and rotateBy were missing RotationType (#575)
- Actors didn't behave correctly when killed and re-added to game (#586)
- Default fontFamily for Label didn't work with custom FontSize or FontUnit (#471)
- Fixed issues with testing sandbox (#609)
- Issue with camera lerp (#555)
- Issue setting initial opacity on Actors (#511)
- Children were not being updated by their parent Actors (#616)
- Center-anchored Actors were not drawn at the correct canvas coordinates when scaled (#618)
0.6.0 - 2016-01-19
- GamePads now have a connection event (#473)
- Unit circle drawing for debug mode (#467)
- Engine now fails gracefully in unsupported browsers (#386)
- Global fatal error catching (#381)
- MockEngine for testing (#360)
- Code coverage reports via Coveralls (#169)
- SpriteFonts now support different target colors (#148)
- Cameras now have position, velocity, and acceleration properties (#490)
Actor.addChild()
changed toActor.add()
(#519)Actor.removeChild()
changed toActor.remove()
(#519)- Documentation is only deployed on changes to the master git branch (#483)
- A warning message is now displayed if no supported audio format is provided for a browser (#476)
- Updated TSLint directory scanning (#442, #443, #447)
- Deprecated older methods (#399)
- Changed API for Key events (#502)
- Actors now properly collide with TileMaps (#541)
- Gamepad detection is fixed (#460, #518)
- Actor scale now correctly occurs after translation (#514)
- Actors now respect the
visible
property of their children (#513) - Fixed centered sprite drawing on Actors (#507)
- Animation
freezeframe
is now properly set to last Animation frame by default (#506) - It is no longer possible to add the same Actor to a scene multiple times (#504)
- Text alignment on SpriteFonts with Labels is fixed (#484)
- Engine pointer events properly fire when a camera is zoomed (#480)
- Fixed a small bug in rotateTo (#469)
- Setting Label colors now works (#468)
- Labels now respect set font (#372)
- UIActor now respects visibility (#368)
- Solid color Actors now respect opacity (#364)
- TileMap culling uses proper width and height values (#293)
- Font API changed while fixing font size issue
0.5.1 - 2015-06-26
- Actors can now recursively check the containment of their children (#453)
RotateTo
andRotateBy
now support ShortestPath, LongestPath, Clockwise, and Counterclockwise rotation (#461)
Actor.contains()
did not work for child actors (#147)- Unexpected placement occasionally occurred for Actors with certain collision types (#319)
- Velocity wasn’t updating properly when fixed and active Actors collided (#454)
- Actors removed with actor.kill() were not being removed from the draw tree (#458)
RotateTo
andRotateBy
weren’t using the shortest angle by default (#282)- Sprite width and height didn’t take scaling into account (#437)
- Fixed error message when calling
Actor.setDrawing()
on a non-existent key (#456)
0.5.0 - 2015-06-03
- resource cache busting (#280)
- HTML5 Gamepad API support (#15)
- Browserify support (#312)
- ‘blur’ and ‘visible’ events to detect when the browser window a game is in has focus (#385)
- Z-index support for Actors, allowing for specific ordered drawing (#356)
- unlocked drawing for UI elements (#354)
Promise.join()
to return a new promise when promises passed to it have been resolved (#341, #340)- ability to skip a frame in an animation (#313)
- You can now remove effects from
IDrawable
objects (#303) - generic
Resource
type to allow for XHR loading (#297) - gray
Color
constants (#209)
- Renamed
engine.addChild()
toengine.add()
(#288) - Renamed
setSpriteTransformationPoint()
tosetAnchor()
(#269) - Renamed
TopCamera
toLockedCamera
(#184) - Renamed
Actor.pipeline
toActor.traits
(#351) - Actor anchoring now uses center origin by default (#299)
- Actor updates (movement, collision, etc.) now use a pipeline (#330)
- Organized classes, files, and project structure (#182, #347)
- Improvements to collision detection (#345, #332)
- Loop optimizations for performance improvements (#296)
- Updated to TypeScript 1.4 (#393)
- Improved pointer event handling so touch and mouse events can be captured together (#334)
- Improved
Point
andVector
methods and rotation (#323, #302) Color
is now treated as a vector to allow for changes (#298)- Cleaned up event type consistency (#273)
- There is now a default instance of a
Camera
(#270) - TSLint now used to enforce code quality
- A Sprite’s dimensions weren’t validated against the size of its texture (#318)
- Improved sprite drawing performance issues (#316)
- Actors were sometimes throwing duplicate collision events (#284)
- Actors were not setting their initial opacity correctly (#307)
- Particle emitters couldn’t emit less than 60 particles per second (#301)
- Fixed issue with TileMap collisions (#286)
- Animations with duplicate frames weren’t being created correctly (#283)
- Separated drawing and collision logic for CollisionMaps (now TileMap) (#285)
- Errors in promises were being swallowed if no error callback was supplied (#337)
- A null promise was being returned if no loader was given to
Engine.start()
(#335) - Changed default collisionType to ‘PreventCollision’ (#324)
- Color didn’t handle alpha = 0 correctly (#257)
- Blink action usage was confusing (#279)
- Couldn’t use the
width
andheight
properties of a Texture after it loaded (#355) - Using
on(‘pointerdown’)
would not automatically enable pointer capturing (#398) - Unsubscribing from an event sometimes removed other event handlers (#366)
Actor.setCenterDrawing()
was hard-coded to true (#375)- Console was undefined in IE9. (#378)
- Pointers were not handling mobile Safari touch events (#382)
- Fixed debug mode drawing (#274)
- Flipping a sprite didn’t factor in scaling (#401)
- Sound continued to play when the game was paused (#383)
UIActor.kill()
didn’t remove the actor (#373)- Passing an empty array to
ex.Promise.join
resulted in unresolved promises (#365) - MouseUp / TouchEnd events weren’t capture correctly if outside of canvas (#374)
- Clearing actions from an empty action queue caused problems (#409)
Scene.onActivate()
was being called before Scene.onInitialize() (#418)- New z-indexing wasn’t cleaning up after itself (#433)
- Fixed issue with world / screen coordinates in UIActors (#371)
- Fade action didn’t work for text (#261)
- Fade action didn’t work for plain-color actors (#256)
- Collision events weren’t being published for both collision participants (#254)
- The loading bar was misrepresenting the time taken to decode audio files (#106)
actor.getCenter()
wasn’t returning the correct value (#438)- Cameras were on the engine instead of the scene, resulting in scene transition problems (#277)
- Actors with sprites larger than the actor would disappear prematurely from the screen (#287)
- Derived classes can now use offscreen culling (#294)
- Fixed issue with TileMap culling (#444)
0.2.2 - 2014-04-15
- Removed extra declarations file from package that was causing visual studio build problems
0.2.0 - 2014-04-09
- Visual Studio 2013 template support (#139)
- Collision Map for building large static collidable levels (#33)
- Redundant fallback sound sources for cross browser support (#125)
- Particle Emitter implementation (#52)
- Trigger implementation (#91)
- Timer implementation (#76)
- Camera Effects: zoom, shake (#55)
- Polygon IDrawable (#93)
- Alias 'on' and 'off' for 'addEventListener' and 'removeEventListener' (#229)
- Optimized draw so only on screen elements are drawn (#239)
- Support Scale in the x and y directions for actors (#118)
- Added notion of collision grouping (#100)
- New Events like 'enterviewport', 'exitviewport', and 'initialize' (#215, #224)
- Textures allow direct pixel manipulation (#155)
- Static Logger improvements with '.debug()', '.info()', '.warn()' and '.error()' (#81)
- Added callMethod() action to actor (#244)
- Added fade() action to actor (#104)
- Added follow() and meet() action to actor (#77)
- 'engine.goToScene()' replaces push and pop (#168)
- More intuitive starting workflow (#149)
- Collisions are now more concrete on actors with CollisionType (#241)
- Namespace all types with 'ex' to prevent Excalibur from polluting the global (#87)
- Refactor SceneNode to Scene (#135)
- Refactor keys (#115)
- Build system with Grunt (#92)
- Collision event was firing after other actor has been killed (#228)
- Additional actor was killed when actor.kill() is called (#226)
- Fixed loading bar (#195)
- ex.Color.Yellow constant was wrong (#122)
- removeEventListener did not exist off of engine (#175)
- Excalibur promises should not swallow exceptions in promise callbacks (#176)
- Actor.extend did not work on actor subclasses (#103)
0.1.1 - 2013-12-19
- Actor based paradigm for managing game objects
- Built-in scripting for actors, allowing objects to move, rotate, blink, scale, and repeat actions
- Entity-entity collision detection
- Event support to react to events happening in the game
- Camera abstraction to easily think about the view port
- Multiple display modes including fixed size, full screen, and dynamic container
- Scene stack support to create multiple game levels
- Sprite sheet and animation support
- Simple sound library for game audio, supporting the Web Audio API and the HTML Audio API
- Promise implementation for managing asynchronous behavior
- Resource loading with optional custom progress bars