Phaser.AnimationParser = { spriteSheet: function (game, key, frameWidth, frameHeight, frameMax, margin, spacing, skipFrames){ var img = key; if (typeof key === 'string') { img = game.cache.getImage(key); } if (img === null ) { return null ; } var width = img.width; var height = img.height; if (frameWidth <= 0) { frameWidth = Math.floor(- width / Math.min(-1, frameWidth)); } if (frameHeight <= 0) { frameHeight = Math.floor(- height / Math.min(-1, frameHeight)); } var row = Math.floor((width - margin) / (frameWidth + spacing)); var column = Math.floor((height - margin) / (frameHeight + spacing)); var total = row * column; if (skipFrames > total || skipFrames < - total) { console.warn("Phaser.AnimationParser.spriteSheet: skipFrames = " + skipFrames.toString() + " is larger than total sprite number " + total.toString()); return null ; } if (skipFrames < 0) { skipFrames = total + skipFrames; } if (frameMax !== -1) { total = skipFrames + frameMax; } if (width === 0 || height === 0 || width < frameWidth || height < frameHeight || total === 0) { console.warn("Phaser.AnimationParser.spriteSheet: '" + key + "'s width/height zero or width/height < given frameWidth/frameHeight"); return null ; } var data = new Phaser.FrameData(); var x = margin; var y = margin; for (var i = 0; i < total; i++ ){ data.addFrame(new Phaser.Frame(i, x, y, frameWidth, frameHeight, '')); x += frameWidth + spacing; if (x + frameWidth > width) { x = margin; y += frameHeight + spacing; } } return data; } , JSONData: function (game, json){ if (!json.frames) { console.warn("Phaser.AnimationParser.JSONData: Invalid Texture Atlas JSON given, missing 'frames' array"); console.log(json); return ; } var data = new Phaser.FrameData(); var frames = json.frames; var newFrame; for (var i = 0; i < _AN_Read_length("length", frames); i++ ){ newFrame = data.addFrame(new Phaser.Frame(i, frames[i].frame.x, frames[i].frame.y, frames[i].frame.w, frames[i].frame.h, frames[i].filename)); if (frames[i].trimmed) { newFrame.setTrim(frames[i].trimmed, frames[i].sourceSize.w, frames[i].sourceSize.h, frames[i].spriteSourceSize.x, frames[i].spriteSourceSize.y, frames[i].spriteSourceSize.w, frames[i].spriteSourceSize.h); } if (frames[i].rotated) { newFrame.rotated = true ; } } return data; } , JSONDataPyxel: function (game, json){ var signature = ['layers', 'tilewidth', 'tileheight', 'tileswide', 'tileshigh'] ; signature.forEach(function (key){ if (!json[key]) { console.warn('Phaser.AnimationParser.JSONDataPyxel: Invalid Pyxel Tilemap JSON given, missing "' + key + '" key.'); console.log(json); return ; } } ); if (_AN_Read_length('length', json.layers) !== 1) { console.warn('Phaser.AnimationParser.JSONDataPyxel: Too many layers, this parser only supports flat Tilemaps.'); console.log(json); return ; } var data = new Phaser.FrameData(); var tileheight = json.tileheight; var tilewidth = json.tilewidth; var frames = json.layers[0].tiles; var newFrame; for (var i = 0; i < _AN_Read_length('length', frames); i++ ){ newFrame = data.addFrame(new Phaser.Frame(i, frames[i].x, frames[i].y, tilewidth, tileheight, "frame_" + i)); newFrame.setTrim(false ); } return data; } , JSONDataHash: function (game, json){ if (!json.frames) { console.warn("Phaser.AnimationParser.JSONDataHash: Invalid Texture Atlas JSON given, missing 'frames' object"); console.log(json); return ; } var data = new Phaser.FrameData(); var frames = json.frames; var newFrame; var i = 0; for (var key in frames){ newFrame = data.addFrame(new Phaser.Frame(i, frames[key].frame.x, frames[key].frame.y, frames[key].frame.w, frames[key].frame.h, key)); if (frames[key].trimmed) { newFrame.setTrim(frames[key].trimmed, frames[key].sourceSize.w, frames[key].sourceSize.h, frames[key].spriteSourceSize.x, frames[key].spriteSourceSize.y, frames[key].spriteSourceSize.w, frames[key].spriteSourceSize.h); } if (frames[key].rotated) { newFrame.rotated = true ; } i++ ; } return data; } , XMLData: function (game, xml){ if (!_AN_Call_getelementsbytagname("getElementsByTagName", xml, 'TextureAtlas')) { console.warn("Phaser.AnimationParser.XMLData: Invalid Texture Atlas XML given, missing tag"); return ; } var data = new Phaser.FrameData(); var frames = _AN_Call_getelementsbytagname("getElementsByTagName", xml, 'SubTexture'); var newFrame; var name; var frame; var x; var y; var width; var height; var frameX; var frameY; var frameWidth; var frameHeight; for (var i = 0; i < _AN_Read_length('length', frames); i++ ){ frame = frames[i].attributes; name = frame.name.value; x = parseInt(frame.x.value, 10); y = parseInt(frame.y.value, 10); width = parseInt(frame.width.value, 10); height = parseInt(frame.height.value, 10); frameX = null ; frameY = null ; if (frame.frameX) { frameX = Math.abs(parseInt(frame.frameX.value, 10)); frameY = Math.abs(parseInt(frame.frameY.value, 10)); frameWidth = parseInt(frame.frameWidth.value, 10); frameHeight = parseInt(frame.frameHeight.value, 10); } newFrame = data.addFrame(new Phaser.Frame(i, x, y, width, height, name)); if (frameX !== null || frameY !== null ) { newFrame.setTrim(true , width, height, frameX, frameY, frameWidth, frameHeight); } } return data; } } ;