Nine patch2
Introduction¶
Stretchable image. Has better performance than nine-patch.
- Author: Rex
 - Game object
 
Live demos¶
Usage¶
Install plugin¶
Load minify file¶
- Load plugin (minify file) in preload stage
    
scene.load.plugin('rexninepatch2plugin', 'https://raw.githubusercontent.com/rexrainbow/phaser3-rex-notes/master/dist/rexninepatch2plugin.min.js', true); - Add nine-patch object
    
var ninePatch = scene.add.rexNinePatch2(x, y, width, height, key, baseFrame, columns, rows, config); 
Import plugin¶
- Install rex plugins from npm
    
npm i phaser3-rex-plugins - Install plugin in configuration of game
    
import NinePatch2Plugin from 'phaser3-rex-plugins/plugins/ninepatch2-plugin.js'; var config = { // ... plugins: { global: [{ key: 'rexNinePatch2Plugin', plugin: NinePatch2Plugin, start: true }, // ... ] } // ... }; var game = new Phaser.Game(config); - Add nine-patch object
    
var ninePatch = scene.add.rexNinePatch2(x, y, width, height, key, baseFrame, columns, rows, config); 
Import class¶
- Install rex plugins from npm
    
npm i phaser3-rex-plugins - Import class
    
import NinePatch2 from 'phaser3-rex-plugins/plugins/ninepatch2.js'; - Add nine-patch object
    
var ninePatch = new NinePatch2(scene, x, y, width, height, key, baseFrame, columns, rows, config); scene.add.existing(ninePatch); 
Create instance¶
var ninePatch = scene.add.rexNinePatch2(x, y, width, height, key, baseFrame, columns, rows, {
    // preserveRatio: true,
    // maxFixedPartScale: 1,
    // stretchMode: 0,
    getFrameNameCallback: undefined
});
or
var ninePatch = scene.add.rexNinePatch2(x, y, width, height, key, columns, rows, {
    // preserveRatio: true,
    // maxFixedPartScale: 1,
    // stretchMode: 0,
    baseFrame: undefined,
    getFrameNameCallback: undefined
});
or
var ninePatch = scene.add.rexNinePatch2(x, y, width, height, key, {
    columns: undefined,
    rows: undefined,
    // preserveRatio: true,
    // maxFixedPartScale: 1,
    // stretchMode: 0,
    baseFrame: undefined,
    getFrameNameCallback: undefined
});
or
var ninePatch = scene.add.rexNinePatch2(x, y, width, height, {
    key: undefined,
    columns: undefined,
    rows: undefined,
    // preserveRatio: true,
    // maxFixedPartScale: 1,
    // stretchMode: 0,
    baseFrame: undefined,
    getFrameNameCallback: undefined
});
or
var ninePatch = scene.add.rexNinePatch2(x, y, {
    width: 1, height: 1,
    key: undefined,
    columns: undefined,
    rows: undefined,
    // preserveRatio: true,
    // maxFixedPartScale: 1,
    // stretchMode: 0,
    baseFrame: undefined,
    getFrameNameCallback: undefined
});
or
var ninePatch = scene.add.rexNinePatch2({
    x: 0, y: 0,
    width: 1, height: 1,
    key: undefined,
    columns: undefined,
    rows: undefined,
    // preserveRatio: true,
    // maxFixedPartScale: 1,
    // stretchMode: 0,
    baseFrame: undefined,
    getFrameNameCallback: undefined
});
x,y: Position of this object.width,height: Size of this object.key: Texture key of source image.baseFrame: Frame name of base texture.undefined: Use default base frame'__BASE'.
columns: Configuration of columns.- A number array, like 
[20, 20, 20], or[20, undefined, 20]: Width of each column.undefinedvalue will be replaced by remainder value from texture width.- Width of odd columns (column 
0, column2, ...) will be origin width. - Width of even columns (column 
1, column3, ...) will be stretched. 
 - Width of odd columns (column 
 
- A number array, like 
 rows: Configuration of rows.- A number array, like 
[20, 20, 20], or[20, undefined, 20]: Height of each row.undefinedvalue will be replaced by remainder value from texture width.- Height of odd rows (row 
0, row2, ...) will be origin height. - Height of odd rows (row 
1, row3, ...) will be stretched. 
 - Height of odd rows (row 
 
- A number array, like 
 preserveRatio: Preserve ratio of fixed parts (i.e. displaying in origin size). Default istrue.maxFixedPartScale: Max scale value of fixed-part.stretchMode: Stretch mode of edges and internal cells.- A number (
0, or1), or a string ('scale', or'repeat'):0, or'scale': Stretch each edge and internal cell by scaled image. Default value.1, or'repeat': Stretch each edge and internal cell by repeated image (tile-sprite).
 - An object : 
    
{ edge: 0, // 'scale', or 1, 'repeat' internal: 0, // 'scale', or 1, 'repeat' } 
- A number (
 getFrameNameCallback: Callback to get frame name of each cell.undefined: Use default callback.- If 
baseFrameis'__BASE': return${colIndex},${rowIndex} - Else : return 
${baseFrame}:${colIndex},${rowIndex} 
- If 
 - Function object : Return a string, or 
undefined.function(colIndex, rowIndex, baseFrame) { return `${colIndex},${rowIndex}`; } 
Custom class¶
- Define class
    
class MyNinePatch extends NinePatch2 { constructor(scene, x, y, width, height, key, baseFrame, columns, rows, config) { super(scene, x, y, width, height, key, baseFrame, columns, rows, config); // ... scene.add.existing(this); } // ... // preUpdate(time, delta) {} }scene.add.existing(gameObject): Adds an existing Game Object to this Scene.- If the Game Object renders, it will be added to the Display List.
 - If it has a 
preUpdatemethod, it will be added to the Update List. 
 - Create instance
    
var ninePatch = new MyNinePatch(scene, x, y, width, height, key, baseFrame, columns, rows, config); 
Resize¶
ninePatch.resize(width, height);
Will update texture
Tint¶
- Set tint
    
ninePatch.setTint(tint); - Clear tint
    
ninePatch.clearTint(); - Set tint fill
    
ninePatch.setTintFill(tint); - Get tint
    
var tint = ninePatch.tint; var tintFill = ninePatch.tintFill;tintFill:false: Solid tint + texture alphatrue: Solid tint, no texture
 
Set texture of source image¶
ninePatch.setBaseTexture(key, baseFrame, columns, rows);
// ninePatch.setBaseTexture(key, columns, rows);
key: Texture key of source image.baseFrame: Frame name of base texture.undefined: Use default base frame'__BASE'. Default value.
columns: Configuration of columns.- A number array, like 
[20, 20, 20]: Width of each column.- Width of odd columns (column 
0, column2, ...) will be origin width. - Width of even columns (column 
1, column3, ...) will be stretched. 
 - Width of odd columns (column 
 
- A number array, like 
 rows: Configuration of rows.- A number array, like 
[20, 20, 20]: Height of each row.- Height of odd rows (row 
0, row2, ...) will be origin height. - Height of odd rows (row 
1, row3, ...) will be stretched. 
 - Height of odd rows (row 
 
- A number array, like 
 
Will update texture
Set stretch mode¶
ninePatch.setStretchMode(mode);
mode:- A number (
0, or1), or a string ('scale', or'repeat'):0, or'scale': Stretch each edge and internal cell by scaled image. Default value.1, or'repeat': Stretch each edge and internal cell by repeated image (tile-sprite).
 - An object : 
    
{ edge: 0, // 'scale', or 1, 'repeat' internal: 0, // 'scale', or 1, 'repeat' } 
- A number (
 
Set get-frame-name callback¶
ninePatch.setGetFrameNameCallback(callback);
callback: Return a string, orundefined.function(colIndex, rowIndex, baseFrame) { return `${colIndex},${rowIndex}` }
Fixed-part scale¶
- Fixed-part scale
- Get
    
var scaleX = ninePatch.fixedPartScaleX; var scaleY = ninePatch.fixedPartScaleY; 
 - Get
    
 - Max fixed-part scale
- Get
    
var scaleX = ninePatch.maxFixedPartScaleX; var scaleY = ninePatch.maxFixedPartScaleY; - Set
    or
ninePatch.setMaxFixedPartScale(scale); // ninePatch.setMaxFixedPartScale(scaleX, scaleY);ninePatch.maxFixedPartScaleX = scaleX; ninePatch.maxFixedPartScaleY = scaleY; 
 - Get
    
 
Update texture¶
ninePatch.updateTexture();
Other properties¶
See game object
Create mask¶
var mask = ninePatch.createBitmapMask();
See mask
Shader effects¶
Support postFX effects
Note
No preFX effect support
Compare with nine-patch¶
- Nine-patch2 has better performance.
- Nine-patch extends from render-texture, which will create a new texture, then draw frames on it.
 - Nine-patch2 draws frames directly.
 
 - Nine-patch2 does not have 
flip,cropmethods. - Nine-patch2 can't apply custom spriteFx pipeline.