From c7485301ca2ccef2afa0b62c7bb4f8db422c9064 Mon Sep 17 00:00:00 2001 From: Richard Davey Date: Thu, 23 May 2013 03:08:57 +0100 Subject: [PATCH] Added Starling/Sparrow XML Texture Atlas format support. --- Phaser/Cache.ts | 14 +- Phaser/Loader.ts | 155 +++++++++++++--- Phaser/State.ts | 14 +- Phaser/system/animation/AnimationLoader.ts | 26 +++ Phaser/system/animation/Frame.ts | 11 +- README.md | 3 +- Tests/Tests.csproj | 4 + Tests/assets/sprites/shoebot.png | Bin 0 -> 119861 bytes Tests/assets/sprites/shoebot.xml | 18 ++ Tests/assets/sprites/shoebox.png | Bin 0 -> 17080 bytes Tests/assets/sprites/shoebox.xml | 11 ++ Tests/phaser.js | 204 +++++++++++++++------ Tests/sprites/starling texture atlas 1.js | 32 ++++ Tests/sprites/starling texture atlas 1.ts | 52 ++++++ build/phaser.d.ts | 37 ++-- build/phaser.js | 204 +++++++++++++++------ 16 files changed, 636 insertions(+), 149 deletions(-) create mode 100644 Tests/assets/sprites/shoebot.png create mode 100644 Tests/assets/sprites/shoebot.xml create mode 100644 Tests/assets/sprites/shoebox.png create mode 100644 Tests/assets/sprites/shoebox.xml create mode 100644 Tests/sprites/starling texture atlas 1.js create mode 100644 Tests/sprites/starling texture atlas 1.ts diff --git a/Phaser/Cache.ts b/Phaser/Cache.ts index d94577d9..88bb0942 100644 --- a/Phaser/Cache.ts +++ b/Phaser/Cache.ts @@ -84,12 +84,20 @@ module Phaser { * @param key {string} Asset key for the texture atlas. * @param url {string} URL of this texture atlas file. * @param data {object} Extra texture atlas data. - * @param data {object} Texture atlas frames data. + * @param atlasData {object} Texture atlas frames data. */ - public addTextureAtlas(key: string, url: string, data, jsonData) { + public addTextureAtlas(key: string, url: string, data, atlasData, format) { this._images[key] = { url: url, data: data, spriteSheet: true }; - this._images[key].frameData = AnimationLoader.parseJSONData(this._game, jsonData); + + if (format == Phaser.Loader.TEXTURE_ATLAS_JSON_ARRAY) + { + this._images[key].frameData = AnimationLoader.parseJSONData(this._game, atlasData); + } + else if (format == Phaser.Loader.TEXTURE_ATLAS_XML_STARLING) + { + this._images[key].frameData = AnimationLoader.parseXMLData(this._game, atlasData, format); + } } diff --git a/Phaser/Loader.ts b/Phaser/Loader.ts index 6b604c19..a698178c 100644 --- a/Phaser/Loader.ts +++ b/Phaser/Loader.ts @@ -82,6 +82,13 @@ module Phaser { */ public crossOrigin: string = ''; + /** + * TextureAtlas data format constants + */ + public static TEXTURE_ATLAS_JSON_ARRAY: number = 0; + public static TEXTURE_ATLAS_JSON_HASH: number = 1; + public static TEXTURE_ATLAS_XML_STARLING: number = 2; + /** * Reset loader, this will remove all loaded assets. */ @@ -133,44 +140,92 @@ module Phaser { /** * Add a new texture atlas loading request. * @param key {string} Unique asset key of the texture atlas file. - * @param url {string} URL of texture atlas file. - * @param [jsonURL] {string} url of JSON data file. - * @param [jsonData] {object} JSON data object. + * @param textureURL {string} The url of the texture atlas image file. + * @param [atlasURL] {string} The url of the texture atlas data file (json/xml) + * @param [atlasData] {object} A JSON or XML data object. + * @param [format] {number} A value describing the format of the data. */ - public addTextureAtlas(key: string, url: string, jsonURL?: string = null, jsonData? = null) { + public addTextureAtlas(key: string, textureURL: string, atlasURL?: string = null, atlasData? = null, format?:number = Loader.TEXTURE_ATLAS_JSON_ARRAY) { if (this.checkKeyExists(key) === false) { - if (jsonURL !== null) + if (atlasURL !== null) { - // A URL to a json file has been given + // A URL to a json/xml file has been given this._queueSize++; - this._fileList[key] = { type: 'textureatlas', key: key, url: url, data: null, jsonURL: jsonURL, jsonData: null, error: false, loaded: false }; + this._fileList[key] = { type: 'textureatlas', key: key, url: textureURL, atlasURL: atlasURL, data: null, format: format, error: false, loaded: false }; this._keys.push(key); } else { - // A json string or object has been given - if (typeof jsonData === 'string') + if (format == Loader.TEXTURE_ATLAS_JSON_ARRAY) { - var data = JSON.parse(jsonData); + // A json string or object has been given + if (typeof atlasData === 'string') + { + atlasData = JSON.parse(atlasData); + } + // Malformed? - if (data['frames']) + if (atlasData['frames']) { this._queueSize++; - this._fileList[key] = { type: 'textureatlas', key: key, url: url, data: null, jsonURL: null, jsonData: data['frames'], error: false, loaded: false }; + this._fileList[key] = { type: 'textureatlas', key: key, url: textureURL, data: null, atlasURL: null, atlasData: atlasData['frames'], format: format, error: false, loaded: false }; this._keys.push(key); } + else + { + throw new Error("Phaser.Loader. Invalid Texture Atlas JSON given, missing frames block"); + } } - else + else if (format == Loader.TEXTURE_ATLAS_XML_STARLING) { + // An xml string or object has been given + if (typeof atlasData === 'string') + { + var tmp; + var xml; + + try + { + if (window['DOMParser']) + { + tmp = new DOMParser(); + xml = tmp.parseFromString(atlasData, "text/xml"); + } + else + { + xml = new ActiveXObject("Microsoft.XMLDOM"); + xml.async = 'false'; + xml.loadXML(atlasData); + } + } + catch (e) + { + xml = undefined; + } + + if (!xml || !xml.documentElement || xml.getElementsByTagName("parsererror").length) + { + throw new Error("Phaser.Loader. Invalid Texture Atlas XML given"); + } + else + { + atlasData = xml; + } + } + // Malformed? - if (jsonData['frames']) + if (atlasData.getElementsByTagName('TextureAtlas')) { this._queueSize++; - this._fileList[key] = { type: 'textureatlas', key: key, url: url, data: null, jsonURL: null, jsonData: jsonData['frames'], error: false, loaded: false }; + this._fileList[key] = { type: 'textureatlas', key: key, url: textureURL, data: null, atlasURL: null, atlasData: atlasData, format: format, error: false, loaded: false }; this._keys.push(key); } + else + { + throw new Error("Phaser.Loader. Invalid Texture Atlas XML given, missing tag"); + } } } @@ -344,18 +399,27 @@ module Phaser { break; case 'textureatlas': - if (file.jsonURL == null) + if (file.atlasURL == null) { - this._game.cache.addTextureAtlas(file.key, file.url, file.data, file.jsonData); + this._game.cache.addTextureAtlas(file.key, file.url, file.data, file.atlasData, file.format); } else { - // Load the JSON before carrying on with the next file + // Load the JSON or XML before carrying on with the next file loadNext = false; - this._xhr.open("GET", file.jsonURL, true); + this._xhr.open("GET", file.atlasURL, true); this._xhr.responseType = "text"; - this._xhr.onload = () => this.jsonLoadComplete(file.key); - this._xhr.onerror = () => this.jsonLoadError(file.key); + + if (file.format == Loader.TEXTURE_ATLAS_JSON_ARRAY) + { + this._xhr.onload = () => this.jsonLoadComplete(file.key); + } + else if (file.format == Loader.TEXTURE_ATLAS_XML_STARLING) + { + this._xhr.onload = () => this.xmlLoadComplete(file.key); + } + + this._xhr.onerror = () => this.dataLoadError(file.key); this._xhr.send(); } break; @@ -390,7 +454,7 @@ module Phaser { if (data['frames']) { var file = this._fileList[key]; - this._game.cache.addTextureAtlas(file.key, file.url, file.data, data['frames']); + this._game.cache.addTextureAtlas(file.key, file.url, file.data, data['frames'], file.format); } this.nextFile(key, true); @@ -401,7 +465,7 @@ module Phaser { * Error occured when load a JSON. * @param key {string} Key of the error loading JSON file. */ - private jsonLoadError(key: string) { + private dataLoadError(key: string) { var file = this._fileList[key]; file.error = true; @@ -409,6 +473,51 @@ module Phaser { } + private xmlLoadComplete(key: string) { + + var atlasData = this._xhr.response; // xml? + var tmp; + var xml; + + try + { + if (window['DOMParser']) + { + tmp = new DOMParser(); + xml = tmp.parseFromString(atlasData, "text/xml"); + } + else + { + xml = new ActiveXObject("Microsoft.XMLDOM"); + xml.async = 'false'; + xml.loadXML(atlasData); + } + } + catch (e) + { + xml = undefined; + } + + if (!xml || !xml.documentElement || xml.getElementsByTagName("parsererror").length) + { + throw new Error("Phaser.Loader. Invalid Texture Atlas XML given"); + } + + // Malformed? + if (xml.getElementsByTagName('TextureAtlas')) + { + var file = this._fileList[key]; + this._game.cache.addTextureAtlas(file.key, file.url, file.data, xml, file.format); + } + else + { + throw new Error("Phaser.Loader. Invalid Texture Atlas XML given, missing tag"); + } + + this.nextFile(key, true); + + } + /** * Handle loading next file. * @param previousKey {string} Key of previous loaded asset. diff --git a/Phaser/State.ts b/Phaser/State.ts index 99800280..8925dd7a 100644 --- a/Phaser/State.ts +++ b/Phaser/State.ts @@ -152,11 +152,17 @@ module Phaser { public destroy() { } /** - * Call this method to see if one object collids another. - * @return {boolean} Whether the given objects or groups collids. + * Checks for overlaps between two objects using the world QuadTree. Can be GameObject vs. GameObject, GameObject vs. Group or Group vs. Group. + * Note: Does not take the objects scrollFactor into account. All overlaps are check in world space. + * @param object1 The first GameObject or Group to check. If null the world.group is used. + * @param object2 The second GameObject or Group to check. + * @param notifyCallback A callback function that is called if the objects overlap. The two objects will be passed to this function in the same order in which you passed them to Collision.overlap. + * @param processCallback A callback function that lets you perform additional checks against the two objects if they overlap. If this is set then notifyCallback will only be called if processCallback returns true. + * @param context The context in which the callbacks will be called + * @returns {boolean} true if the objects overlap, otherwise false. */ - public collide(ObjectOrGroup1: Basic = null, ObjectOrGroup2: Basic = null, NotifyCallback = null): bool { - return this.collision.overlap(ObjectOrGroup1, ObjectOrGroup2, NotifyCallback, Collision.separate); + public collide(objectOrGroup1: Basic = null, objectOrGroup2: Basic = null, notifyCallback = null, context? = this.game.callbackContext): bool { + return this.collision.overlap(objectOrGroup1, objectOrGroup2, notifyCallback, Collision.separate, context); } } diff --git a/Phaser/system/animation/AnimationLoader.ts b/Phaser/system/animation/AnimationLoader.ts index f1bd19c9..51bb3c7f 100644 --- a/Phaser/system/animation/AnimationLoader.ts +++ b/Phaser/system/animation/AnimationLoader.ts @@ -96,6 +96,32 @@ module Phaser { } + public static parseXMLData(game: Game, xml, format: number): FrameData { + + // Let's create some frames then + var data: FrameData = new FrameData(); + + var frames = xml.getElementsByTagName('SubTexture'); + + var newFrame: Frame; + + for (var i = 0; i < frames.length; i++) + { + var frame = frames[i].attributes; + + newFrame = data.addFrame(new Frame(frame.x.nodeValue, frame.y.nodeValue, frame.width.nodeValue, frame.height.nodeValue, frame.name.nodeValue)); + + // Trimmed? + if (frame.frameX.nodeValue != '-0' || frame.frameY.nodeValue != '-0') + { + newFrame.setTrim(true, frame.width.nodeValue, frame.height.nodeValue, Math.abs(frame.frameX.nodeValue), Math.abs(frame.frameY.nodeValue), frame.frameWidth.nodeValue, frame.frameHeight.nodeValue); + } + + } + + return data; + } + } } \ No newline at end of file diff --git a/Phaser/system/animation/Frame.ts b/Phaser/system/animation/Frame.ts index 9d4b4d2a..2a46f754 100644 --- a/Phaser/system/animation/Frame.ts +++ b/Phaser/system/animation/Frame.ts @@ -38,16 +38,19 @@ module Phaser { * @type {number} */ public x: number; + /** * Y position within the image to cut from. * @type {number} */ public y: number; + /** * Width of the frame. * @type {number} */ public width: number; + /** * Height of the frame. * @type {number} @@ -82,31 +85,37 @@ module Phaser { public trimmed: bool; // The coordinates of the trimmed sprite inside the original sprite + /** * Width of the original sprite. * @type {number} */ public sourceSizeW: number; + /** * Height of the original sprite. * @type {number} */ public sourceSizeH: number; + /** * X position of the trimmed sprite inside original sprite. * @type {number} */ public spriteSourceSizeX: number; + /** * Y position of the trimmed sprite inside original sprite. * @type {number} */ public spriteSourceSizeY: number; + /** * Width of the trimmed sprite. * @type {number} */ public spriteSourceSizeW: number; + /** * Height of the trimmed sprite. * @type {number} @@ -130,7 +139,7 @@ module Phaser { * @param destWidth {number} Destiny draw width. * @param destHeight {number} Destiny draw height. */ - public setTrim(trimmed: bool, actualWidth, actualHeight, destX, destY, destWidth, destHeight, ) { + public setTrim(trimmed: bool, actualWidth: number, actualHeight: number, destX: number, destY: number, destWidth: number, destHeight: number) { this.trimmed = trimmed; diff --git a/README.md b/README.md index 142085d2..6bbaa15b 100644 --- a/README.md +++ b/README.md @@ -106,11 +106,12 @@ V0.9.6 * Added the GameObjectFactory to Game. You now make Sprites like this: game.add.sprite(). Much better separation of game object creation methods now. But you'll have to update ALL code, sorry! * Added GameObjectFactory methods to add existing objects to the game world, such as existingSprite(), existingTween(), etc. * Added the GameObjectFactory to Phaser.State +* Added new format parameter to Loader.addTextureAtlas defining the format. Currently supported: JSON Array and Starling/Sparrow XML. * TODO: Check that tween pausing works with the new performance.now * TODO: Game.Time should monitor pause duration * TODO: Investigate bug re: tilemap collision and animation frames -* TODO: Update tests that use arrow keys and include touch/mouse support +* TODO: Update tests that use arrow keys and include touch/mouse support (FlxControlHandler style) * TODO: GameObject.clipRect * TODO: Polygon geom primitive * TODO: Move GameObject transforms to a single matrix diff --git a/Tests/Tests.csproj b/Tests/Tests.csproj index 71198992..769ebab5 100644 --- a/Tests/Tests.csproj +++ b/Tests/Tests.csproj @@ -239,6 +239,10 @@ + + + starling texture atlas 1.ts + collide with tile.ts diff --git a/Tests/assets/sprites/shoebot.png b/Tests/assets/sprites/shoebot.png new file mode 100644 index 0000000000000000000000000000000000000000..9521ddeb40bb4792fad4f96a1330a07c1e0e21ca GIT binary patch literal 119861 zcmX6^Wn7e9(_dn#C6-zm3F!qzx?xG_5LmiPxAIaec-;A)&u0$vYFL$w9&Uq#kNu`vC=JS9e) zu2fDeH^56kdqVto`Ekaw7Ms9tO*V3J3iNC+oVOd8UDr01S@z}1Y$V*~!`v~Q%fEv@ zcUx@w{6vBS07;=Uw$~>4wVybqodNKsPm3ZS7OTimO=+s1tT(7m&g^SD`o=z;J@EZ_ zqW`ky2>g!*o@&sMc45>~_gDlv;CJCae+n!O`fT0xBri9!;@6l1!17P#2RV=Cp6zyE z{zm|amY#M_YL3V#$D!hMNqQVhLepQFFnxjE`9M_{=N~pd<+q6V--l*R^ZdpgPdj6k zy~}DA6xz=_Xx+V}&K!bZhFuj`+K6S$r8928Yy5P7pC-0*lZ_d&=f%L!e=JUCj31n5 zQD6K|zD@==ceJ#tgX-g%n=^99SH_nA_zWT%$f-?FHarzL{BpY8PZ&4$J1~j*fz@1q zQ{V52vJtQR{w`h9+fY4t2LG)d0w(^m@fxK~-;b z7P)oiu~JKuEAu}|I-@d-<&Ez6rpJr+C@U~tjmKR>F7Bv;qg`xk zn1hq8Y{!X9B<*n^`K*`SS^voZV2&nT>ilp(BrXV61tshUoN3cuE&7aE2xlH2-|xr7 zgEK$J`c4`Xwc61TXb5utk4Em-M}JdC@A!qIU;$l0LX1-NjBDBC@oby!E>7X-;ERu> zR^0+eBNdB`lc@g@tO~sNO3GyuaUi+t*7WdjRT=bnyA$-ZlN0nf6GTJv;Q4&1_I!D< zBk_E@bMpLjLa!f8@_WD~xp?*EHD~geiwj5Rr4_iAXPg^FfG9Pm_wEvDBdHJ<52TU)cA)4TcObJ?q3bmcISeZL! zX-qn(Z=`EGrNRHP3NHC`&@xT9Up%And`j>PmMKBtdA%<=(KZVM@_(N@$nHmeN{dCE z*1zm*sDw$F68Rt1>agVp$0?s^Qo}w%>5_3LP`)zyR;#IsVnEx8cA3jkNBAGGi+Y6z zAaz31dyeRx-+x4z=^~|f4^_naUJ|%5c!$la{y0yqdIuND^#Cr*=;mOqe2wT8eDU>@>gRY+S=|mB0fWv!TV|IP3jT0QH z?wfmCGR*XNaufF+c?|O*#zB?G-v8(H57sri<>!$t{LFotJGCw7sW{VleY~FvY z0bg|Q`$ml~MvD>U(ctuxLs zR9ZLkG5xl)5;#0Rt2_gSY~~-&jjNOk<6YyL6_6}fOI&ng%)13I-ZHj8jMH3&Qu0=q z$h{%B!=p6Ncj52t2P-W&I0+}ZZQbv}l&H|R^R-5gzMDt5IxnDi=H3z-eUMBNI2Q5P zHYa$m$9ujUF;S#F1pJ>W5Uhqc7)=Jf2c|5>XCgxs)V`ck)27t|kh z1TJl;Ot#7`)Js?l%%oY}vd_H<^PyP>0?wQa=R55t;Bvzm4Kn&%NUQ{g2JT#jgBg6! zg87SWgGSS+{)zqia{CTGMaf7E=SU23zs$u@u;``dUs^+ii{Nk&jE+Grd#Cofs3kbEu0)ktsd?&+eM=^*m~$_^fa*ufCIU&m}d5+0w31 zi!`gEh4qh0_~AY-j$FzQ8xl_zHioM@Ej9xYgQT8`NMuPIxDs(mkd6dDe)&+l8s7DX zKVwV?sS8O#@?>D-_DunmQ2_%eTk6Uls?>utgpR-S+Jn9Tef>U zwD;oH-)Pm-DE_Z3Fa!J^3xZ_bIlX8IlVt}z|7(fGaK5{?_H0j*jAGvR3|uPA1E%LoA^<3fuUFREWHnkVY`m~P;Vu6>oe_CMz3i@^1&@nxJRt>%Cv0D1 zU30@>HFc(EKB5?}JiLs^$(pr)m&v2nDr)DX#W!r*-9=2%yr)Ah6r354mRu&0sN96n z`p8AFb_M&P8oS7hrSYQdH-04i=&hcusW-Zab-MqHn!jxP!lo#PWwu7Bz*qu*I3+`P zQl&wl%Eh=g_4-n`4CisF7y9b#Dh=L)_k%k3jJt51Kq9tgYW8|#0®P!{sc4^ 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

Y*pt<}Dhltv&J#zYx_IM;z;x37 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 + + + + + + + + + + + + + + \ No newline at end of file diff --git a/Tests/assets/sprites/shoebox.png b/Tests/assets/sprites/shoebox.png new file mode 100644 index 0000000000000000000000000000000000000000..0297797b2c6680aa56afdf017ee3ef32aa6059aa GIT binary patch literal 17080 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 + + + + + + + \ No newline at end of file diff --git a/Tests/phaser.js b/Tests/phaser.js index e4136383..82bbd8e6 100644 --- a/Tests/phaser.js +++ b/Tests/phaser.js @@ -2379,6 +2379,21 @@ var Phaser; } return data; }; + AnimationLoader.parseXMLData = function parseXMLData(game, xml, format) { + // Let's create some frames then + var data = new Phaser.FrameData(); + var frames = xml.getElementsByTagName('SubTexture'); + var newFrame; + for(var i = 0; i < frames.length; i++) { + var frame = frames[i].attributes; + newFrame = data.addFrame(new Phaser.Frame(frame.x.nodeValue, frame.y.nodeValue, frame.width.nodeValue, frame.height.nodeValue, frame.name.nodeValue)); + // Trimmed? + if(frame.frameX.nodeValue != '-0' || frame.frameY.nodeValue != '-0') { + newFrame.setTrim(true, frame.width.nodeValue, frame.height.nodeValue, Math.abs(frame.frameX.nodeValue), Math.abs(frame.frameY.nodeValue), frame.frameWidth.nodeValue, frame.frameHeight.nodeValue); + } + } + return data; + }; return AnimationLoader; })(); Phaser.AnimationLoader = AnimationLoader; @@ -2440,6 +2455,7 @@ var Phaser; * @param destHeight {number} Destiny draw height. */ function (trimmed, actualWidth, actualHeight, destX, destY, destWidth, destHeight) { + console.log('setTrim', actualWidth, actualHeight, destX, destY, destWidth, destHeight); this.trimmed = trimmed; this.sourceSizeW = actualWidth; this.sourceSizeH = actualHeight; @@ -2844,15 +2860,19 @@ var Phaser; * @param key {string} Asset key for the texture atlas. * @param url {string} URL of this texture atlas file. * @param data {object} Extra texture atlas data. - * @param data {object} Texture atlas frames data. + * @param atlasData {object} Texture atlas frames data. */ - function (key, url, data, jsonData) { + function (key, url, data, atlasData, format) { this._images[key] = { url: url, data: data, spriteSheet: true }; - this._images[key].frameData = Phaser.AnimationLoader.parseJSONData(this._game, jsonData); + if(format == Phaser.Loader.TEXTURE_ATLAS_JSON_ARRAY) { + this._images[key].frameData = Phaser.AnimationLoader.parseJSONData(this._game, atlasData); + } else if(format == Phaser.Loader.TEXTURE_ATLAS_XML_STARLING) { + this._images[key].frameData = Phaser.AnimationLoader.parseXMLData(this._game, atlasData, format); + } }; Cache.prototype.addImage = /** * Add a new image. @@ -9039,6 +9059,9 @@ var Phaser; this._xhr = new XMLHttpRequest(); this._queueSize = 0; } + Loader.TEXTURE_ATLAS_JSON_ARRAY = 0; + Loader.TEXTURE_ATLAS_JSON_HASH = 1; + Loader.TEXTURE_ATLAS_XML_STARLING = 2; Loader.prototype.reset = /** * Reset loader, this will remove all loaded assets. */ @@ -9100,62 +9123,95 @@ var Phaser; Loader.prototype.addTextureAtlas = /** * Add a new texture atlas loading request. * @param key {string} Unique asset key of the texture atlas file. - * @param url {string} URL of texture atlas file. - * @param [jsonURL] {string} url of JSON data file. - * @param [jsonData] {object} JSON data object. + * @param textureURL {string} The url of the texture atlas image file. + * @param [atlasURL] {string} The url of the texture atlas data file (json/xml) + * @param [atlasData] {object} A JSON or XML data object. + * @param [format] {number} A value describing the format of the data. */ - function (key, url, jsonURL, jsonData) { - if (typeof jsonURL === "undefined") { jsonURL = null; } - if (typeof jsonData === "undefined") { jsonData = null; } + function (key, textureURL, atlasURL, atlasData, format) { + if (typeof atlasURL === "undefined") { atlasURL = null; } + if (typeof atlasData === "undefined") { atlasData = null; } + if (typeof format === "undefined") { format = Loader.TEXTURE_ATLAS_JSON_ARRAY; } + console.log('addTextureAtlas', key, textureURL, atlasURL, atlasData, format); if(this.checkKeyExists(key) === false) { - if(jsonURL !== null) { - // A URL to a json file has been given + if(atlasURL !== null) { + // A URL to a json/xml file has been given this._queueSize++; this._fileList[key] = { type: 'textureatlas', key: key, - url: url, + url: textureURL, + atlasURL: atlasURL, data: null, - jsonURL: jsonURL, - jsonData: null, + format: format, error: false, loaded: false }; this._keys.push(key); } else { - // A json string or object has been given - if(typeof jsonData === 'string') { - var data = JSON.parse(jsonData); - // Malformed? - if(data['frames']) { - this._queueSize++; - this._fileList[key] = { - type: 'textureatlas', - key: key, - url: url, - data: null, - jsonURL: null, - jsonData: data['frames'], - error: false, - loaded: false - }; - this._keys.push(key); + if(format == Loader.TEXTURE_ATLAS_JSON_ARRAY) { + // A json string or object has been given + if(typeof atlasData === 'string') { + atlasData = JSON.parse(atlasData); } - } else { // Malformed? - if(jsonData['frames']) { + if(atlasData['frames']) { this._queueSize++; this._fileList[key] = { type: 'textureatlas', key: key, - url: url, + url: textureURL, data: null, - jsonURL: null, - jsonData: jsonData['frames'], + atlasURL: null, + atlasData: atlasData['frames'], + format: format, error: false, loaded: false }; this._keys.push(key); + } else { + throw new Error("Phaser.Loader. Invalid Texture Atlas JSON given, missing frames block"); + } + } else if(format == Loader.TEXTURE_ATLAS_XML_STARLING) { + // An xml string or object has been given + if(typeof atlasData === 'string') { + var tmp; + var xml; + try { + if(window['DOMParser']) { + tmp = new DOMParser(); + xml = tmp.parseFromString(atlasData, "text/xml"); + } else { + xml = new ActiveXObject("Microsoft.XMLDOM"); + xml.async = 'false'; + xml.loadXML(atlasData); + } + } catch (e) { + xml = undefined; + } + if(!xml || !xml.documentElement || xml.getElementsByTagName("parsererror").length) { + throw new Error("Phaser.Loader. Invalid Texture Atlas XML given"); + } else { + atlasData = xml; + } + } + // Malformed? + if(atlasData.getElementsByTagName('TextureAtlas')) { + this._queueSize++; + this._fileList[key] = { + type: 'textureatlas', + key: key, + url: textureURL, + data: null, + atlasURL: null, + atlasData: atlasData, + format: format, + error: false, + loaded: false + }; + this._keys.push(key); + } else { + throw new Error("Phaser.Loader. Invalid Texture Atlas XML given, missing tag"); } } } @@ -9313,18 +9369,24 @@ var Phaser; this._game.cache.addSpriteSheet(file.key, file.url, file.data, file.frameWidth, file.frameHeight, file.frameMax); break; case 'textureatlas': - if(file.jsonURL == null) { - this._game.cache.addTextureAtlas(file.key, file.url, file.data, file.jsonData); + if(file.atlasURL == null) { + this._game.cache.addTextureAtlas(file.key, file.url, file.data, file.atlasData, file.format); } else { - // Load the JSON before carrying on with the next file + // Load the JSON or XML before carrying on with the next file loadNext = false; - this._xhr.open("GET", file.jsonURL, true); + this._xhr.open("GET", file.atlasURL, true); this._xhr.responseType = "text"; - this._xhr.onload = function () { - return _this.jsonLoadComplete(file.key); - }; + if(file.format == Loader.TEXTURE_ATLAS_JSON_ARRAY) { + this._xhr.onload = function () { + return _this.jsonLoadComplete(file.key); + }; + } else if(file.format == Loader.TEXTURE_ATLAS_XML_STARLING) { + this._xhr.onload = function () { + return _this.xmlLoadComplete(file.key); + }; + } this._xhr.onerror = function () { - return _this.jsonLoadError(file.key); + return _this.dataLoadError(file.key); }; this._xhr.send(); } @@ -9351,11 +9413,11 @@ var Phaser; // Malformed? if(data['frames']) { var file = this._fileList[key]; - this._game.cache.addTextureAtlas(file.key, file.url, file.data, data['frames']); + this._game.cache.addTextureAtlas(file.key, file.url, file.data, data['frames'], file.format); } this.nextFile(key, true); }; - Loader.prototype.jsonLoadError = /** + Loader.prototype.dataLoadError = /** * Error occured when load a JSON. * @param key {string} Key of the error loading JSON file. */ @@ -9364,6 +9426,35 @@ var Phaser; file.error = true; this.nextFile(key, true); }; + Loader.prototype.xmlLoadComplete = function (key) { + var atlasData = this._xhr.response;// xml? + + var tmp; + var xml; + try { + if(window['DOMParser']) { + tmp = new DOMParser(); + xml = tmp.parseFromString(atlasData, "text/xml"); + } else { + xml = new ActiveXObject("Microsoft.XMLDOM"); + xml.async = 'false'; + xml.loadXML(atlasData); + } + } catch (e) { + xml = undefined; + } + if(!xml || !xml.documentElement || xml.getElementsByTagName("parsererror").length) { + throw new Error("Phaser.Loader. Invalid Texture Atlas XML given"); + } + // Malformed? + if(xml.getElementsByTagName('TextureAtlas')) { + var file = this._fileList[key]; + this._game.cache.addTextureAtlas(file.key, file.url, file.data, xml, file.format); + } else { + throw new Error("Phaser.Loader. Invalid Texture Atlas XML given, missing tag"); + } + this.nextFile(key, true); + }; Loader.prototype.nextFile = /** * Handle loading next file. * @param previousKey {string} Key of previous loaded asset. @@ -17375,14 +17466,21 @@ var Phaser; function () { }; State.prototype.collide = /** - * Call this method to see if one object collids another. - * @return {boolean} Whether the given objects or groups collids. + * Checks for overlaps between two objects using the world QuadTree. Can be GameObject vs. GameObject, GameObject vs. Group or Group vs. Group. + * Note: Does not take the objects scrollFactor into account. All overlaps are check in world space. + * @param object1 The first GameObject or Group to check. If null the world.group is used. + * @param object2 The second GameObject or Group to check. + * @param notifyCallback A callback function that is called if the objects overlap. The two objects will be passed to this function in the same order in which you passed them to Collision.overlap. + * @param processCallback A callback function that lets you perform additional checks against the two objects if they overlap. If this is set then notifyCallback will only be called if processCallback returns true. + * @param context The context in which the callbacks will be called + * @returns {boolean} true if the objects overlap, otherwise false. */ - function (ObjectOrGroup1, ObjectOrGroup2, NotifyCallback) { - if (typeof ObjectOrGroup1 === "undefined") { ObjectOrGroup1 = null; } - if (typeof ObjectOrGroup2 === "undefined") { ObjectOrGroup2 = null; } - if (typeof NotifyCallback === "undefined") { NotifyCallback = null; } - return this.collision.overlap(ObjectOrGroup1, ObjectOrGroup2, NotifyCallback, Phaser.Collision.separate); + function (objectOrGroup1, objectOrGroup2, notifyCallback, context) { + if (typeof objectOrGroup1 === "undefined") { objectOrGroup1 = null; } + if (typeof objectOrGroup2 === "undefined") { objectOrGroup2 = null; } + if (typeof notifyCallback === "undefined") { notifyCallback = null; } + if (typeof context === "undefined") { context = this.game.callbackContext; } + return this.collision.overlap(objectOrGroup1, objectOrGroup2, notifyCallback, Phaser.Collision.separate, context); }; return State; })(); diff --git a/Tests/sprites/starling texture atlas 1.js b/Tests/sprites/starling texture atlas 1.js new file mode 100644 index 00000000..fc7cdeee --- /dev/null +++ b/Tests/sprites/starling texture atlas 1.js @@ -0,0 +1,32 @@ +/// +(function () { + var myGame = new Phaser.Game(this, 'game', 800, 600, init, create, update); + function init() { + // Starling/Sparrow XML Texture Atlas Method 1 + // + // In this example we assume that the XML data is stored in an external file + myGame.loader.addTextureAtlas('bits', 'assets/sprites/shoebox.png', 'assets/sprites/shoebox.xml', null, Phaser.Loader.TEXTURE_ATLAS_XML_STARLING); + myGame.loader.addTextureAtlas('bot', 'assets/sprites/shoebot.png', 'assets/sprites/shoebot.xml', null, Phaser.Loader.TEXTURE_ATLAS_XML_STARLING); + myGame.loader.load(); + } + var bits; + var bot; + function create() { + bot = myGame.add.sprite(800, 200, 'bot'); + bot.animations.add('run'); + bot.animations.play('run', 10, true); + bits = myGame.add.sprite(200, 200, 'bits'); + bits.frame = 0; + bot.velocity.x = -300; + } + function update() { + if(bot.x < -bot.width) { + bot.x = myGame.stage.width; + bits.frame++; + console.log(bits.frame, bits.animations.frameTotal); + if(bits.frame == bits.animations.frameTotal - 1) { + bits.frame = 0; + } + } + } +})(); diff --git a/Tests/sprites/starling texture atlas 1.ts b/Tests/sprites/starling texture atlas 1.ts new file mode 100644 index 00000000..c6dc0d8f --- /dev/null +++ b/Tests/sprites/starling texture atlas 1.ts @@ -0,0 +1,52 @@ +/// + +(function () { + + var myGame = new Phaser.Game(this, 'game', 800, 600, init, create, update); + + function init() { + + // Starling/Sparrow XML Texture Atlas Method 1 + // + // In this example we assume that the XML data is stored in an external file + myGame.loader.addTextureAtlas('bits', 'assets/sprites/shoebox.png', 'assets/sprites/shoebox.xml', null, Phaser.Loader.TEXTURE_ATLAS_XML_STARLING); + myGame.loader.addTextureAtlas('bot', 'assets/sprites/shoebot.png', 'assets/sprites/shoebot.xml', null, Phaser.Loader.TEXTURE_ATLAS_XML_STARLING); + + myGame.loader.load(); + + } + + var bits: Phaser.Sprite; + var bot: Phaser.Sprite; + + function create() { + + bot = myGame.add.sprite(800, 200, 'bot'); + bot.animations.add('run'); + bot.animations.play('run', 10, true); + + bits = myGame.add.sprite(200, 200, 'bits'); + bits.frame = 0; + + bot.velocity.x = -300; + + } + + function update() { + + if (bot.x < -bot.width) + { + bot.x = myGame.stage.width; + + bits.frame++; + console.log(bits.frame, bits.animations.frameTotal); + + if (bits.frame == bits.animations.frameTotal - 1) + { + bits.frame = 0; + } + } + + } + +})(); diff --git a/build/phaser.d.ts b/build/phaser.d.ts index d139098b..97e04558 100644 --- a/build/phaser.d.ts +++ b/build/phaser.d.ts @@ -1427,6 +1427,7 @@ module Phaser { * @return {FrameData} Generated FrameData object. */ static parseJSONData(game: Game, json): FrameData; + static parseXMLData(game: Game, xml, format: number): FrameData; } } /** @@ -1533,7 +1534,7 @@ module Phaser { * @param destWidth {number} Destiny draw width. * @param destHeight {number} Destiny draw height. */ - public setTrim(trimmed: bool, actualWidth, actualHeight, destX, destY, destWidth, destHeight): void; + public setTrim(trimmed: bool, actualWidth: number, actualHeight: number, destX: number, destY: number, destWidth: number, destHeight: number): void; } } /** @@ -1764,9 +1765,9 @@ module Phaser { * @param key {string} Asset key for the texture atlas. * @param url {string} URL of this texture atlas file. * @param data {object} Extra texture atlas data. - * @param data {object} Texture atlas frames data. + * @param atlasData {object} Texture atlas frames data. */ - public addTextureAtlas(key: string, url: string, data, jsonData): void; + public addTextureAtlas(key: string, url: string, data, atlasData, format): void; /** * Add a new image. * @param key {string} Asset key for the image. @@ -5192,6 +5193,12 @@ module Phaser { */ public crossOrigin: string; /** + * TextureAtlas data format constants + */ + static TEXTURE_ATLAS_JSON_ARRAY: number; + static TEXTURE_ATLAS_JSON_HASH: number; + static TEXTURE_ATLAS_XML_STARLING: number; + /** * Reset loader, this will remove all loaded assets. */ public reset(): void; @@ -5214,11 +5221,12 @@ module Phaser { /** * Add a new texture atlas loading request. * @param key {string} Unique asset key of the texture atlas file. - * @param url {string} URL of texture atlas file. - * @param [jsonURL] {string} url of JSON data file. - * @param [jsonData] {object} JSON data object. + * @param textureURL {string} The url of the texture atlas image file. + * @param [atlasURL] {string} The url of the texture atlas data file (json/xml) + * @param [atlasData] {object} A JSON or XML data object. + * @param [format] {number} A value describing the format of the data. */ - public addTextureAtlas(key: string, url: string, jsonURL?: string, jsonData?): void; + public addTextureAtlas(key: string, textureURL: string, atlasURL?: string, atlasData?, format?: number): void; /** * Add a new audio file loading request. * @param key {string} Unique asset key of the audio file. @@ -5269,7 +5277,8 @@ module Phaser { * Error occured when load a JSON. * @param key {string} Key of the error loading JSON file. */ - private jsonLoadError(key); + private dataLoadError(key); + private xmlLoadComplete(key); /** * Handle loading next file. * @param previousKey {string} Key of previous loaded asset. @@ -9783,9 +9792,15 @@ module Phaser { */ public destroy(): void; /** - * Call this method to see if one object collids another. - * @return {boolean} Whether the given objects or groups collids. + * Checks for overlaps between two objects using the world QuadTree. Can be GameObject vs. GameObject, GameObject vs. Group or Group vs. Group. + * Note: Does not take the objects scrollFactor into account. All overlaps are check in world space. + * @param object1 The first GameObject or Group to check. If null the world.group is used. + * @param object2 The second GameObject or Group to check. + * @param notifyCallback A callback function that is called if the objects overlap. The two objects will be passed to this function in the same order in which you passed them to Collision.overlap. + * @param processCallback A callback function that lets you perform additional checks against the two objects if they overlap. If this is set then notifyCallback will only be called if processCallback returns true. + * @param context The context in which the callbacks will be called + * @returns {boolean} true if the objects overlap, otherwise false. */ - public collide(ObjectOrGroup1?: Basic, ObjectOrGroup2?: Basic, NotifyCallback?): bool; + public collide(objectOrGroup1?: Basic, objectOrGroup2?: Basic, notifyCallback?, context?): bool; } } diff --git a/build/phaser.js b/build/phaser.js index e4136383..82bbd8e6 100644 --- a/build/phaser.js +++ b/build/phaser.js @@ -2379,6 +2379,21 @@ var Phaser; } return data; }; + AnimationLoader.parseXMLData = function parseXMLData(game, xml, format) { + // Let's create some frames then + var data = new Phaser.FrameData(); + var frames = xml.getElementsByTagName('SubTexture'); + var newFrame; + for(var i = 0; i < frames.length; i++) { + var frame = frames[i].attributes; + newFrame = data.addFrame(new Phaser.Frame(frame.x.nodeValue, frame.y.nodeValue, frame.width.nodeValue, frame.height.nodeValue, frame.name.nodeValue)); + // Trimmed? + if(frame.frameX.nodeValue != '-0' || frame.frameY.nodeValue != '-0') { + newFrame.setTrim(true, frame.width.nodeValue, frame.height.nodeValue, Math.abs(frame.frameX.nodeValue), Math.abs(frame.frameY.nodeValue), frame.frameWidth.nodeValue, frame.frameHeight.nodeValue); + } + } + return data; + }; return AnimationLoader; })(); Phaser.AnimationLoader = AnimationLoader; @@ -2440,6 +2455,7 @@ var Phaser; * @param destHeight {number} Destiny draw height. */ function (trimmed, actualWidth, actualHeight, destX, destY, destWidth, destHeight) { + console.log('setTrim', actualWidth, actualHeight, destX, destY, destWidth, destHeight); this.trimmed = trimmed; this.sourceSizeW = actualWidth; this.sourceSizeH = actualHeight; @@ -2844,15 +2860,19 @@ var Phaser; * @param key {string} Asset key for the texture atlas. * @param url {string} URL of this texture atlas file. * @param data {object} Extra texture atlas data. - * @param data {object} Texture atlas frames data. + * @param atlasData {object} Texture atlas frames data. */ - function (key, url, data, jsonData) { + function (key, url, data, atlasData, format) { this._images[key] = { url: url, data: data, spriteSheet: true }; - this._images[key].frameData = Phaser.AnimationLoader.parseJSONData(this._game, jsonData); + if(format == Phaser.Loader.TEXTURE_ATLAS_JSON_ARRAY) { + this._images[key].frameData = Phaser.AnimationLoader.parseJSONData(this._game, atlasData); + } else if(format == Phaser.Loader.TEXTURE_ATLAS_XML_STARLING) { + this._images[key].frameData = Phaser.AnimationLoader.parseXMLData(this._game, atlasData, format); + } }; Cache.prototype.addImage = /** * Add a new image. @@ -9039,6 +9059,9 @@ var Phaser; this._xhr = new XMLHttpRequest(); this._queueSize = 0; } + Loader.TEXTURE_ATLAS_JSON_ARRAY = 0; + Loader.TEXTURE_ATLAS_JSON_HASH = 1; + Loader.TEXTURE_ATLAS_XML_STARLING = 2; Loader.prototype.reset = /** * Reset loader, this will remove all loaded assets. */ @@ -9100,62 +9123,95 @@ var Phaser; Loader.prototype.addTextureAtlas = /** * Add a new texture atlas loading request. * @param key {string} Unique asset key of the texture atlas file. - * @param url {string} URL of texture atlas file. - * @param [jsonURL] {string} url of JSON data file. - * @param [jsonData] {object} JSON data object. + * @param textureURL {string} The url of the texture atlas image file. + * @param [atlasURL] {string} The url of the texture atlas data file (json/xml) + * @param [atlasData] {object} A JSON or XML data object. + * @param [format] {number} A value describing the format of the data. */ - function (key, url, jsonURL, jsonData) { - if (typeof jsonURL === "undefined") { jsonURL = null; } - if (typeof jsonData === "undefined") { jsonData = null; } + function (key, textureURL, atlasURL, atlasData, format) { + if (typeof atlasURL === "undefined") { atlasURL = null; } + if (typeof atlasData === "undefined") { atlasData = null; } + if (typeof format === "undefined") { format = Loader.TEXTURE_ATLAS_JSON_ARRAY; } + console.log('addTextureAtlas', key, textureURL, atlasURL, atlasData, format); if(this.checkKeyExists(key) === false) { - if(jsonURL !== null) { - // A URL to a json file has been given + if(atlasURL !== null) { + // A URL to a json/xml file has been given this._queueSize++; this._fileList[key] = { type: 'textureatlas', key: key, - url: url, + url: textureURL, + atlasURL: atlasURL, data: null, - jsonURL: jsonURL, - jsonData: null, + format: format, error: false, loaded: false }; this._keys.push(key); } else { - // A json string or object has been given - if(typeof jsonData === 'string') { - var data = JSON.parse(jsonData); - // Malformed? - if(data['frames']) { - this._queueSize++; - this._fileList[key] = { - type: 'textureatlas', - key: key, - url: url, - data: null, - jsonURL: null, - jsonData: data['frames'], - error: false, - loaded: false - }; - this._keys.push(key); + if(format == Loader.TEXTURE_ATLAS_JSON_ARRAY) { + // A json string or object has been given + if(typeof atlasData === 'string') { + atlasData = JSON.parse(atlasData); } - } else { // Malformed? - if(jsonData['frames']) { + if(atlasData['frames']) { this._queueSize++; this._fileList[key] = { type: 'textureatlas', key: key, - url: url, + url: textureURL, data: null, - jsonURL: null, - jsonData: jsonData['frames'], + atlasURL: null, + atlasData: atlasData['frames'], + format: format, error: false, loaded: false }; this._keys.push(key); + } else { + throw new Error("Phaser.Loader. Invalid Texture Atlas JSON given, missing frames block"); + } + } else if(format == Loader.TEXTURE_ATLAS_XML_STARLING) { + // An xml string or object has been given + if(typeof atlasData === 'string') { + var tmp; + var xml; + try { + if(window['DOMParser']) { + tmp = new DOMParser(); + xml = tmp.parseFromString(atlasData, "text/xml"); + } else { + xml = new ActiveXObject("Microsoft.XMLDOM"); + xml.async = 'false'; + xml.loadXML(atlasData); + } + } catch (e) { + xml = undefined; + } + if(!xml || !xml.documentElement || xml.getElementsByTagName("parsererror").length) { + throw new Error("Phaser.Loader. Invalid Texture Atlas XML given"); + } else { + atlasData = xml; + } + } + // Malformed? + if(atlasData.getElementsByTagName('TextureAtlas')) { + this._queueSize++; + this._fileList[key] = { + type: 'textureatlas', + key: key, + url: textureURL, + data: null, + atlasURL: null, + atlasData: atlasData, + format: format, + error: false, + loaded: false + }; + this._keys.push(key); + } else { + throw new Error("Phaser.Loader. Invalid Texture Atlas XML given, missing tag"); } } } @@ -9313,18 +9369,24 @@ var Phaser; this._game.cache.addSpriteSheet(file.key, file.url, file.data, file.frameWidth, file.frameHeight, file.frameMax); break; case 'textureatlas': - if(file.jsonURL == null) { - this._game.cache.addTextureAtlas(file.key, file.url, file.data, file.jsonData); + if(file.atlasURL == null) { + this._game.cache.addTextureAtlas(file.key, file.url, file.data, file.atlasData, file.format); } else { - // Load the JSON before carrying on with the next file + // Load the JSON or XML before carrying on with the next file loadNext = false; - this._xhr.open("GET", file.jsonURL, true); + this._xhr.open("GET", file.atlasURL, true); this._xhr.responseType = "text"; - this._xhr.onload = function () { - return _this.jsonLoadComplete(file.key); - }; + if(file.format == Loader.TEXTURE_ATLAS_JSON_ARRAY) { + this._xhr.onload = function () { + return _this.jsonLoadComplete(file.key); + }; + } else if(file.format == Loader.TEXTURE_ATLAS_XML_STARLING) { + this._xhr.onload = function () { + return _this.xmlLoadComplete(file.key); + }; + } this._xhr.onerror = function () { - return _this.jsonLoadError(file.key); + return _this.dataLoadError(file.key); }; this._xhr.send(); } @@ -9351,11 +9413,11 @@ var Phaser; // Malformed? if(data['frames']) { var file = this._fileList[key]; - this._game.cache.addTextureAtlas(file.key, file.url, file.data, data['frames']); + this._game.cache.addTextureAtlas(file.key, file.url, file.data, data['frames'], file.format); } this.nextFile(key, true); }; - Loader.prototype.jsonLoadError = /** + Loader.prototype.dataLoadError = /** * Error occured when load a JSON. * @param key {string} Key of the error loading JSON file. */ @@ -9364,6 +9426,35 @@ var Phaser; file.error = true; this.nextFile(key, true); }; + Loader.prototype.xmlLoadComplete = function (key) { + var atlasData = this._xhr.response;// xml? + + var tmp; + var xml; + try { + if(window['DOMParser']) { + tmp = new DOMParser(); + xml = tmp.parseFromString(atlasData, "text/xml"); + } else { + xml = new ActiveXObject("Microsoft.XMLDOM"); + xml.async = 'false'; + xml.loadXML(atlasData); + } + } catch (e) { + xml = undefined; + } + if(!xml || !xml.documentElement || xml.getElementsByTagName("parsererror").length) { + throw new Error("Phaser.Loader. Invalid Texture Atlas XML given"); + } + // Malformed? + if(xml.getElementsByTagName('TextureAtlas')) { + var file = this._fileList[key]; + this._game.cache.addTextureAtlas(file.key, file.url, file.data, xml, file.format); + } else { + throw new Error("Phaser.Loader. Invalid Texture Atlas XML given, missing tag"); + } + this.nextFile(key, true); + }; Loader.prototype.nextFile = /** * Handle loading next file. * @param previousKey {string} Key of previous loaded asset. @@ -17375,14 +17466,21 @@ var Phaser; function () { }; State.prototype.collide = /** - * Call this method to see if one object collids another. - * @return {boolean} Whether the given objects or groups collids. + * Checks for overlaps between two objects using the world QuadTree. Can be GameObject vs. GameObject, GameObject vs. Group or Group vs. Group. + * Note: Does not take the objects scrollFactor into account. All overlaps are check in world space. + * @param object1 The first GameObject or Group to check. If null the world.group is used. + * @param object2 The second GameObject or Group to check. + * @param notifyCallback A callback function that is called if the objects overlap. The two objects will be passed to this function in the same order in which you passed them to Collision.overlap. + * @param processCallback A callback function that lets you perform additional checks against the two objects if they overlap. If this is set then notifyCallback will only be called if processCallback returns true. + * @param context The context in which the callbacks will be called + * @returns {boolean} true if the objects overlap, otherwise false. */ - function (ObjectOrGroup1, ObjectOrGroup2, NotifyCallback) { - if (typeof ObjectOrGroup1 === "undefined") { ObjectOrGroup1 = null; } - if (typeof ObjectOrGroup2 === "undefined") { ObjectOrGroup2 = null; } - if (typeof NotifyCallback === "undefined") { NotifyCallback = null; } - return this.collision.overlap(ObjectOrGroup1, ObjectOrGroup2, NotifyCallback, Phaser.Collision.separate); + function (objectOrGroup1, objectOrGroup2, notifyCallback, context) { + if (typeof objectOrGroup1 === "undefined") { objectOrGroup1 = null; } + if (typeof objectOrGroup2 === "undefined") { objectOrGroup2 = null; } + if (typeof notifyCallback === "undefined") { notifyCallback = null; } + if (typeof context === "undefined") { context = this.game.callbackContext; } + return this.collision.overlap(objectOrGroup1, objectOrGroup2, notifyCallback, Phaser.Collision.separate, context); }; return State; })();