PIXI Drawing Boilderplate - David Komer
Fully working except bug with erase :\
HTML
<script src="http://code.jquery.com/jquery-2.1.3.min.js"></script>
<script src="http://hammerjs.github.io/dist/hammer.min.js"></script>
<script src="http://cdn.jsdelivr.net/pixi.js/2.2.0/pixi.js"></script>
<div id="sketchpad"></div>
<p/>
Erase Mode: <input type="checkbox" name="eraseMode" value="eraseMode" id="eraseMode" />
CSS
body {
margin: 0;
padding: 0;
background-color: #ccc;
}
#sketchpad {
background-color: #fff;
width: 800px;
height: 600px;
margin: 0 auto;
}
JavaScript
/*
Globals
*/
var stage;
var renderer;
var drawLayer;
var targetWidth = 800;
var targetHeight = 600;
var externalBrushName = 'http://i.imgur.com/13BWFp8.png';
var externalBrushColor = 0xFF0000;
/*
Utils
*/
function globalToLocalPosition(globalPosition, element) { // see http://www.html5gamedevs.com/topic/11347-batch-rendertexturerender/?p=66365
var offset = getOffset(element);
return {
x: globalPosition.x - offset.left,
y: globalPosition.y - offset.top
};
}
function getOffset(el) {
var _x = 0;
var _y = 0;
while (el && !isNaN(el.offsetLeft) && !isNaN(el.offsetTop)) {
_x += el.offsetLeft - el.scrollLeft;
_y += el.offsetTop - el.scrollTop;
el = el.offsetParent;
}
return { left: _x, top: _y};
}
/*
Brush Pool
*/
function BrushPool(_brushName, _brushColor) {
this.brushName = _brushName;
this.brushColor = _brushColor;
this.sprites = [];
}
BrushPool.makeSprite = function(brushName, brushColor) {
var childSprite;
childSprite = new PIXI.Sprite(PIXI.TextureCache[brushName]);
childSprite.tint = brushColor;
childSprite.anchor.x = .5;
childSprite.anchor.y = .5;
return(childSprite);
}
BrushPool.prototype.grow = function(num) {
var idx;
for(idx = 0; idx < num; idx++) {
this.sprites.push(BrushPool.makeSprite(this.brushName, this.brushColor));
}
}
BrushPool.prototype.growTo = function(num) {
var diff = num - this.sprites.length;
if(diff > 0) {
this.grow(diff);
}
}
BrushPool.prototype.getBrush = function(idx, point) {
var spr = this.sprites[idx];
spr.x = point.x;
spr.y = point.y;
return(spr);
}
/*
Draw Layer - see http://www.html5gamedevs.com/topic/11347-batch-rendertexturerender/?p=66012
*/
DrawLayer.prototype = new PIXI.DisplayObjectContainer();
DrawLayer.prototype.constructor = DrawLayer;
function DrawLayer(width, height) {
PIXI.DisplayObjectContainer.call(this);
...