mirror of
https://github.com/photonstorm/phaser
synced 2025-02-20 07:58:31 +00:00
Loads more Cache optimisations and tweaks.
This commit is contained in:
parent
81b553d8ee
commit
f52b553eaf
2 changed files with 99 additions and 63 deletions
|
@ -88,16 +88,18 @@ Phaser.Component.LoadTexture.prototype = {
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
if (key === null || typeof key === 'undefined')
|
if (key === null || key === undefined)
|
||||||
{
|
{
|
||||||
this.key = '__default';
|
this.key = '__default';
|
||||||
this.setTexture(PIXI.TextureCache[this.key]);
|
// this.setTexture(PIXI.TextureCache[this.key]);
|
||||||
|
this.setTexture(cache.getTexture(this.key));
|
||||||
}
|
}
|
||||||
else if (typeof key === 'string' && !cache.checkImageKey(key))
|
else if (typeof key === 'string' && !cache.checkImageKey(key))
|
||||||
{
|
{
|
||||||
console.warn("Texture with key '" + key + "' not found.");
|
console.warn("Texture with key '" + key + "' not found.");
|
||||||
this.key = '__missing';
|
this.key = '__missing';
|
||||||
this.setTexture(PIXI.TextureCache[this.key]);
|
// this.setTexture(PIXI.TextureCache[this.key]);
|
||||||
|
this.setTexture(cache.getTexture(this.key));
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
|
|
|
@ -243,15 +243,19 @@ Phaser.Cache.prototype = {
|
||||||
this.removeImage(key);
|
this.removeImage(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
this._cache.image[key] = { url: url, data: data };
|
var img = {
|
||||||
|
url: url,
|
||||||
|
data: data,
|
||||||
|
base: new PIXI.BaseTexture(data),
|
||||||
|
frame: new Phaser.Frame(0, 0, 0, data.width, data.height, key),
|
||||||
|
frameData: new Phaser.FrameData()
|
||||||
|
};
|
||||||
|
|
||||||
this._cache.image[key].frame = new Phaser.Frame(0, 0, 0, data.width, data.height, key);
|
img.frameData.addFrame(new Phaser.Frame(0, 0, 0, data.width, data.height, url);
|
||||||
this._cache.image[key].frameData = new Phaser.FrameData();
|
|
||||||
this._cache.image[key].frameData.addFrame(new Phaser.Frame(0, 0, 0, data.width, data.height, url));
|
|
||||||
|
|
||||||
PIXI.BaseTextureCache[key] = new PIXI.BaseTexture(data);
|
this._cache.image[key] = img;
|
||||||
|
|
||||||
this._resolveURL(url, this._cache.image[key]);
|
this._resolveURL(url, img);
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -264,15 +268,10 @@ Phaser.Cache.prototype = {
|
||||||
addDefaultImage: function () {
|
addDefaultImage: function () {
|
||||||
|
|
||||||
var img = new Image();
|
var img = new Image();
|
||||||
|
|
||||||
img.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgAQMAAABJtOi3AAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAABVJREFUeF7NwIEAAAAAgKD9qdeocAMAoAABm3DkcAAAAABJRU5ErkJggg==";
|
img.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgAQMAAABJtOi3AAAAA1BMVEX///+nxBvIAAAAAXRSTlMAQObYZgAAABVJREFUeF7NwIEAAAAAgKD9qdeocAMAoAABm3DkcAAAAABJRU5ErkJggg==";
|
||||||
|
|
||||||
this._cache.image['__default'] = { url: null, data: img };
|
this.addImage('__default', null, img);
|
||||||
this._cache.image['__default'].frame = new Phaser.Frame(0, 0, 0, 32, 32, '', '');
|
|
||||||
this._cache.image['__default'].frameData = new Phaser.FrameData();
|
|
||||||
this._cache.image['__default'].frameData.addFrame(new Phaser.Frame(0, 0, 0, 32, 32, null));
|
|
||||||
|
|
||||||
PIXI.BaseTextureCache['__default'] = new PIXI.BaseTexture(img);
|
|
||||||
PIXI.TextureCache['__default'] = new PIXI.Texture(PIXI.BaseTextureCache['__default']);
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -285,15 +284,10 @@ Phaser.Cache.prototype = {
|
||||||
addMissingImage: function () {
|
addMissingImage: function () {
|
||||||
|
|
||||||
var img = new Image();
|
var img = new Image();
|
||||||
|
|
||||||
img.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ9JREFUeNq01ssOwyAMRFG46v//Mt1ESmgh+DFmE2GPOBARKb2NVjo+17PXLD8a1+pl5+A+wSgFygymWYHBb0FtsKhJDdZlncG2IzJ4ayoMDv20wTmSMzClEgbWYNTAkQ0Z+OJ+A/eWnAaR9+oxCF4Os0H8htsMUp+pwcgBBiMNnAwF8GqIgL2hAzaGFFgZauDPKABmowZ4GL369/0rwACp2yA/ttmvsQAAAABJRU5ErkJggg==";
|
img.src = "data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAACAAAAAgCAIAAAD8GO2jAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAAJ9JREFUeNq01ssOwyAMRFG46v//Mt1ESmgh+DFmE2GPOBARKb2NVjo+17PXLD8a1+pl5+A+wSgFygymWYHBb0FtsKhJDdZlncG2IzJ4ayoMDv20wTmSMzClEgbWYNTAkQ0Z+OJ+A/eWnAaR9+oxCF4Os0H8htsMUp+pwcgBBiMNnAwF8GqIgL2hAzaGFFgZauDPKABmowZ4GL369/0rwACp2yA/ttmvsQAAAABJRU5ErkJggg==";
|
||||||
|
|
||||||
this._cache.image['__missing'] = { url: null, data: img };
|
this.addImage('__missing', null, img);
|
||||||
this._cache.image['__missing'].frame = new Phaser.Frame(0, 0, 0, 32, 32, '', '');
|
|
||||||
this._cache.image['__missing'].frameData = new Phaser.FrameData();
|
|
||||||
this._cache.image['__missing'].frameData.addFrame(new Phaser.Frame(0, 0, 0, 32, 32, null));
|
|
||||||
|
|
||||||
PIXI.BaseTextureCache['__missing'] = new PIXI.BaseTexture(img);
|
|
||||||
PIXI.TextureCache['__missing'] = new PIXI.Texture(PIXI.BaseTextureCache['__missing']);
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -309,8 +303,8 @@ Phaser.Cache.prototype = {
|
||||||
*/
|
*/
|
||||||
addSound: function (key, url, data, webAudio, audioTag) {
|
addSound: function (key, url, data, webAudio, audioTag) {
|
||||||
|
|
||||||
webAudio = webAudio || true;
|
if (webAudio === undefined) { webAudio = true; audioTag = false; }
|
||||||
audioTag = audioTag || false;
|
if (audioTag === undefined) { webAudio = false; audioTag = true; }
|
||||||
|
|
||||||
var decoded = false;
|
var decoded = false;
|
||||||
|
|
||||||
|
@ -319,7 +313,15 @@ Phaser.Cache.prototype = {
|
||||||
decoded = true;
|
decoded = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
this._cache.sounds[key] = { url: url, data: data, isDecoding: false, decoded: decoded, webAudio: webAudio, audioTag: audioTag, locked: this.game.sound.touchLocked };
|
this._cache.sounds[key] = {
|
||||||
|
url: url,
|
||||||
|
data: data,
|
||||||
|
isDecoding: false,
|
||||||
|
decoded: decoded,
|
||||||
|
webAudio: webAudio,
|
||||||
|
audioTag: audioTag,
|
||||||
|
locked: this.game.sound.touchLocked
|
||||||
|
};
|
||||||
|
|
||||||
this._resolveURL(url, this._cache.sounds[key]);
|
this._resolveURL(url, this._cache.sounds[key]);
|
||||||
|
|
||||||
|
@ -426,14 +428,16 @@ Phaser.Cache.prototype = {
|
||||||
*/
|
*/
|
||||||
addBitmapFont: function (key, url, data, atlasData, atlasType, xSpacing, ySpacing) {
|
addBitmapFont: function (key, url, data, atlasData, atlasType, xSpacing, ySpacing) {
|
||||||
|
|
||||||
var entry = { url: url, data: data, font: null };
|
var obj = {
|
||||||
|
url: url,
|
||||||
// this._cache.bitmapFont[key] = { url: url, data: data };
|
data: data,
|
||||||
|
font: null,
|
||||||
PIXI.BaseTextureCache[key] = new PIXI.BaseTexture(data);
|
base: new PIXI.BaseTexture(data)
|
||||||
|
};
|
||||||
|
|
||||||
if (atlasType === 'json')
|
if (atlasType === 'json')
|
||||||
{
|
{
|
||||||
|
// TODO: These can return the object rather than add it to the PIXI Cache
|
||||||
Phaser.LoaderParser.jsonBitmapFont(this.game, atlasData, key, xSpacing, ySpacing);
|
Phaser.LoaderParser.jsonBitmapFont(this.game, atlasData, key, xSpacing, ySpacing);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
|
@ -441,13 +445,11 @@ Phaser.Cache.prototype = {
|
||||||
Phaser.LoaderParser.xmlBitmapFont(this.game, atlasData, key, xSpacing, ySpacing);
|
Phaser.LoaderParser.xmlBitmapFont(this.game, atlasData, key, xSpacing, ySpacing);
|
||||||
}
|
}
|
||||||
|
|
||||||
entry.font = PIXI.BitmapText.fonts[key];;
|
obj.font = PIXI.BitmapText.fonts[key];;
|
||||||
|
|
||||||
// this._cache.bitmapFont[key] = PIXI.BitmapText.fonts[key];
|
this._cache.bitmapFont[key] = obj;
|
||||||
|
|
||||||
this._cache.bitmapFont[key] = entry;
|
this._resolveURL(url, obj);
|
||||||
|
|
||||||
this._resolveURL(url, this._cache.bitmapFont[key]);
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -544,13 +546,20 @@ Phaser.Cache.prototype = {
|
||||||
*/
|
*/
|
||||||
addSpriteSheet: function (key, url, data, frameWidth, frameHeight, frameMax, margin, spacing) {
|
addSpriteSheet: function (key, url, data, frameWidth, frameHeight, frameMax, margin, spacing) {
|
||||||
|
|
||||||
this._cache.spriteSheet[key] = { url: url, data: data, frameWidth: frameWidth, frameHeight: frameHeight, margin: margin, spacing: spacing };
|
var obj = {
|
||||||
|
url: url,
|
||||||
|
data: data,
|
||||||
|
frameWidth: frameWidth,
|
||||||
|
frameHeight: frameHeight,
|
||||||
|
margin: margin,
|
||||||
|
spacing: spacing,
|
||||||
|
base: new PIXI.BaseTexture(data),
|
||||||
|
frameData: Phaser.AnimationParser.spriteSheet(this.game, key, frameWidth, frameHeight, frameMax, margin, spacing)
|
||||||
|
};
|
||||||
|
|
||||||
PIXI.BaseTextureCache[key] = new PIXI.BaseTexture(data);
|
this._cache.spriteSheet[key] = obj;
|
||||||
|
|
||||||
this._cache.spriteSheet[key].frameData = Phaser.AnimationParser.spriteSheet(this.game, key, frameWidth, frameHeight, frameMax, margin, spacing);
|
this._resolveURL(url, obj);
|
||||||
|
|
||||||
this._resolveURL(url, this._cache.spriteSheet[key]);
|
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -566,28 +575,28 @@ Phaser.Cache.prototype = {
|
||||||
*/
|
*/
|
||||||
addTextureAtlas: function (key, url, data, atlasData, format) {
|
addTextureAtlas: function (key, url, data, atlasData, format) {
|
||||||
|
|
||||||
this._cache.atlas[key] = { url: url, data: data };
|
var obj = { url: url, data: data, base: new PIXI.BaseTexture(data) };
|
||||||
|
|
||||||
PIXI.BaseTextureCache[key] = new PIXI.BaseTexture(data);
|
|
||||||
|
|
||||||
if (format == Phaser.Loader.TEXTURE_ATLAS_XML_STARLING)
|
if (format == Phaser.Loader.TEXTURE_ATLAS_XML_STARLING)
|
||||||
{
|
{
|
||||||
this._cache.atlas[key].frameData = Phaser.AnimationParser.XMLData(this.game, atlasData, key);
|
obj.frameData = Phaser.AnimationParser.XMLData(this.game, atlasData, key);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
// Let's just work it out from the frames array
|
// Let's just work it out from the frames array
|
||||||
if (Array.isArray(atlasData.frames))
|
if (Array.isArray(atlasData.frames))
|
||||||
{
|
{
|
||||||
this._cache.atlas[key].frameData = Phaser.AnimationParser.JSONData(this.game, atlasData, key);
|
obj.frameData = Phaser.AnimationParser.JSONData(this.game, atlasData, key);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
this._cache.atlas[key].frameData = Phaser.AnimationParser.JSONDataHash(this.game, atlasData, key);
|
obj.frameData = Phaser.AnimationParser.JSONDataHash(this.game, atlasData, key);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
this._resolveURL(url, this._cache.atlas[key]);
|
this._cache.atlas[key] = obj;
|
||||||
|
|
||||||
|
this._resolveURL(url, obj);
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -605,16 +614,19 @@ Phaser.Cache.prototype = {
|
||||||
|
|
||||||
var _this = this;
|
var _this = this;
|
||||||
|
|
||||||
if (this._cache.sound[key])
|
var sound = this.getSound(key);
|
||||||
{
|
|
||||||
this._cache.sound[key].data.src = this._cache.sound[key].url;
|
|
||||||
|
|
||||||
this._cache.sound[key].data.addEventListener('canplaythrough', function () {
|
if (sound)
|
||||||
|
{
|
||||||
|
sound.data.src = sound.url;
|
||||||
|
|
||||||
|
sound.data.addEventListener('canplaythrough', function () {
|
||||||
return _this.reloadSoundComplete(key);
|
return _this.reloadSoundComplete(key);
|
||||||
}, false);
|
}, false);
|
||||||
|
|
||||||
this._cache.sound[key].data.load();
|
sound.data.load();
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
@ -625,9 +637,11 @@ Phaser.Cache.prototype = {
|
||||||
*/
|
*/
|
||||||
reloadSoundComplete: function (key) {
|
reloadSoundComplete: function (key) {
|
||||||
|
|
||||||
if (this._cache.sound[key])
|
var sound = this.getSound(key);
|
||||||
|
|
||||||
|
if (sound)
|
||||||
{
|
{
|
||||||
this._cache.sound[key].locked = false;
|
sound.locked = false;
|
||||||
this.onSoundUnlock.dispatch(key);
|
this.onSoundUnlock.dispatch(key);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -641,9 +655,11 @@ Phaser.Cache.prototype = {
|
||||||
*/
|
*/
|
||||||
updateSound: function (key, property, value) {
|
updateSound: function (key, property, value) {
|
||||||
|
|
||||||
if (this._cache.sound[key])
|
var sound = this.getSound(key);
|
||||||
|
|
||||||
|
if (sound)
|
||||||
{
|
{
|
||||||
this._cache.sound[key][property] = value;
|
sound[property] = value;
|
||||||
}
|
}
|
||||||
|
|
||||||
},
|
},
|
||||||
|
@ -657,9 +673,11 @@ Phaser.Cache.prototype = {
|
||||||
*/
|
*/
|
||||||
decodedSound: function (key, data) {
|
decodedSound: function (key, data) {
|
||||||
|
|
||||||
this._cache.sound[key].data = data;
|
var sound = this.getSound(key);
|
||||||
this._cache.sound[key].decoded = true;
|
|
||||||
this._cache.sound[key].isDecoding = false;
|
sound.data = data;
|
||||||
|
sound.decoded = true;
|
||||||
|
sound.isDecoding = false;
|
||||||
|
|
||||||
},
|
},
|
||||||
|
|
||||||
|
@ -707,13 +725,13 @@ Phaser.Cache.prototype = {
|
||||||
* Checks if a key for the given cache object type exists.
|
* Checks if a key for the given cache object type exists.
|
||||||
*
|
*
|
||||||
* @method Phaser.Cache#checkKey
|
* @method Phaser.Cache#checkKey
|
||||||
* @param {number} type - The Cache type to check against. I.e. Phaser.Cache.CANVAS, Phaser.Cache.IMAGE, Phaser.Cache.JSON, etc.
|
* @param {number} cache - The Cache to check against. I.e. Phaser.Cache.CANVAS, Phaser.Cache.IMAGE, Phaser.Cache.JSON, etc.
|
||||||
* @param {string} key - Asset key of the image to check is in the Cache.
|
* @param {string} key - Asset key of the image to check is in the Cache.
|
||||||
* @return {boolean} True if the key exists, otherwise false.
|
* @return {boolean} True if the key exists, otherwise false.
|
||||||
*/
|
*/
|
||||||
checkKey: function (type, key) {
|
checkKey: function (cache, key) {
|
||||||
|
|
||||||
if (this._cacheMap[type][key])
|
if (this._cacheMap[cache][key])
|
||||||
{
|
{
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -1289,6 +1307,22 @@ Phaser.Cache.prototype = {
|
||||||
// Frame Related Methods //
|
// Frame Related Methods //
|
||||||
////////////////////////////
|
////////////////////////////
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets a PIXI.BaseTexture by key from the given Cache.
|
||||||
|
*
|
||||||
|
* @method Phaser.Cache#getBaseTexture
|
||||||
|
* @param {string} key - Asset key of the image for which you want the BaseTexture for.
|
||||||
|
* @param {integer} [cache=Phaser.Cache.IMAGE] - The cache to search for the item in.
|
||||||
|
* @return {PIXI.BaseTexture} The BaseTexture object.
|
||||||
|
*/
|
||||||
|
getBaseTexture: function (key, cache) {
|
||||||
|
|
||||||
|
if (cache === undefined) { cache = Phaser.Cache.IMAGE; }
|
||||||
|
|
||||||
|
return this.getItem(key, cache, 'getBaseTexture', 'base');
|
||||||
|
|
||||||
|
},
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Get a single frame by key. You'd only do this to get the default Frame created for a non-atlas/spritesheet image.
|
* Get a single frame by key. You'd only do this to get the default Frame created for a non-atlas/spritesheet image.
|
||||||
*
|
*
|
||||||
|
|
Loading…
Add table
Reference in a new issue