mirror of
https://github.com/photonstorm/phaser
synced 2025-02-17 06:28:30 +00:00
Blitter support
This commit is contained in:
parent
b223627935
commit
f2c75c6243
5 changed files with 75 additions and 57 deletions
|
@ -1,4 +1,4 @@
|
|||
var CHECKSUM = {
|
||||
build: '07360840-e1c4-11e6-a539-73ab52eda7a7'
|
||||
build: '635b8da0-e234-11e6-9dac-3feadd6ebdbc'
|
||||
};
|
||||
module.exports = CHECKSUM;
|
|
@ -5,13 +5,19 @@
|
|||
*/
|
||||
|
||||
var CONST = require('../../const');
|
||||
var Bob = require('./Bob');
|
||||
var GameObject = require('../GameObject');
|
||||
var Children = require('../../components/Children');
|
||||
|
||||
/**
|
||||
* An Image is a light-weight object you can use to display anything that doesn't need physics or animation.
|
||||
* It can still rotate, scale, crop and receive input events. This makes it perfect for logos, backgrounds, simple buttons and other non-Sprite graphics.
|
||||
* A Blitter Game Object.
|
||||
*
|
||||
* @class Phaser.GameObject.Blitter
|
||||
* The Blitter Game Object is a special type of Container, that contains Blitter.Bob objects.
|
||||
* These objects can be thought of as just texture frames with a transform, and nothing more.
|
||||
* Bobs don't have any update methods, or the ability to have children, or any kind of special effects.
|
||||
* They are essentially just texture renderers, and the Blitter object creates and manages them.
|
||||
*
|
||||
* @class Blitter
|
||||
* @extends Phaser.GameObject
|
||||
* @constructor
|
||||
* @param {Phaser.Game} game - A reference to the currently running game.
|
||||
|
@ -28,48 +34,68 @@ var Blitter = function (state, x, y, key, frame)
|
|||
GameObject.call(this, state, x, y, _texture, _frame);
|
||||
|
||||
this.type = CONST.BLITTER;
|
||||
|
||||
this.children = new Children(this);
|
||||
};
|
||||
|
||||
Blitter.prototype = Object.create(GameObject.prototype);
|
||||
Blitter.prototype.constructor = Blitter;
|
||||
|
||||
Blitter.prototype.renderCanvas = require('./BlitterCanvasRenderer');
|
||||
// Blitter.prototype.renderCanvas = require('./BlitterCanvasRenderer');
|
||||
Blitter.prototype.renderWebGL = require('./BlitterWebGLRenderer');
|
||||
|
||||
Object.defineProperties(Blitter.prototype, {
|
||||
// frame MUST be part of the Blitter texture
|
||||
Blitter.prototype.create = function (x, y, frame, visible, index)
|
||||
{
|
||||
if (frame === undefined) { frame = this.frame; }
|
||||
if (visible === undefined) { visible = true; }
|
||||
if (index === undefined) { index = 0; }
|
||||
|
||||
width: {
|
||||
var bob = new Bob(this, x, y, frame, visible);
|
||||
|
||||
enumerable: true,
|
||||
this.children.addAt(bob, index, false);
|
||||
|
||||
get: function ()
|
||||
{
|
||||
return this.transform._scaleX * this.frame.realWidth;
|
||||
},
|
||||
return bob;
|
||||
};
|
||||
|
||||
set: function (value)
|
||||
{
|
||||
this.scaleX = value / this.frame.realWidth;
|
||||
}
|
||||
// frame MUST be part of the Blitter texture
|
||||
Blitter.prototype.createFromCallback = function (callback, quantity, frame, visible)
|
||||
{
|
||||
var bobs = this.createMultiple(quantity, key, frame, visible);
|
||||
|
||||
},
|
||||
|
||||
height: {
|
||||
|
||||
enumerable: true,
|
||||
|
||||
get: function ()
|
||||
{
|
||||
return this.transform._scaleY * this.frame.realHeight;
|
||||
},
|
||||
|
||||
set: function (value)
|
||||
{
|
||||
this.scaleY = value / this.frame.realHeight;
|
||||
}
|
||||
for (var i = 0; i < bobs.length; i++)
|
||||
{
|
||||
var bob = bobs[i];
|
||||
|
||||
callback.call(this, bob, i);
|
||||
}
|
||||
|
||||
});
|
||||
return bobs;
|
||||
};
|
||||
|
||||
// frame MUST be part of the Blitter texture
|
||||
Blitter.prototype.createMultiple = function (quantity, frame, visible)
|
||||
{
|
||||
if (frame === undefined) { frame = 0; }
|
||||
if (visible === undefined) { visible = true; }
|
||||
|
||||
if (!Array.isArray(frame))
|
||||
{
|
||||
frame = [ frame ];
|
||||
}
|
||||
|
||||
var bobs = [];
|
||||
var _this = this;
|
||||
|
||||
frame.forEach(function (singleFrame)
|
||||
{
|
||||
for (var i = 0; i < quantity; i++)
|
||||
{
|
||||
bobs.push(_this.create(0, 0, singleFrame, visible));
|
||||
}
|
||||
});
|
||||
|
||||
return bobs;
|
||||
};
|
||||
|
||||
module.exports = Blitter;
|
||||
|
|
|
@ -1,49 +1,29 @@
|
|||
|
||||
var BlitterWebGLRenderer = function (renderer, src, interpolationPercentage)
|
||||
{
|
||||
// var frame = src.frame;
|
||||
var worldAlpha = src.color.worldAlpha * 255 << 24;
|
||||
var len = src.children.list.length;
|
||||
|
||||
// Skip rendering?
|
||||
|
||||
if (src.skipRender || !src.visible || worldAlpha === 0)
|
||||
if (src.skipRender || !src.visible || worldAlpha === 0 || len === 0)
|
||||
{
|
||||
return;
|
||||
}
|
||||
|
||||
// var verts = src.transform.getVertexData(interpolationPercentage, renderer);
|
||||
// var index = src.frame.source.glTextureIndex;
|
||||
// var tint = src.color._glTint;
|
||||
// var bg = src.color._glBg;
|
||||
// renderer.batch.add(frame.source, src.blendMode, verts, frame.uvs, index, alpha, tint, bg);
|
||||
// var transform = src.transform;
|
||||
|
||||
// Render children
|
||||
for (var i = 0; i < src.children.list.length; i++)
|
||||
for (var i = 0; i < len; i++)
|
||||
{
|
||||
var bob = src.children.list[i];
|
||||
var frame = bob.frame;
|
||||
var alpha = (worldAlpha * bob.alpha) * 255 << 24;
|
||||
|
||||
if (!bob.visible || alpha === 0 || !frame.cutWidth || !frame.cutHeight)
|
||||
if (!bob.visible || !frame.cutWidth || !frame.cutHeight)
|
||||
{
|
||||
continue;
|
||||
}
|
||||
|
||||
var index = frame.source.glTextureIndex;
|
||||
var verts = bob.transform.getVertexData(interpolationPercentage);
|
||||
|
||||
// tint and bg values come from the parent Blitter object, not the Bob
|
||||
renderer.batch.add(frame.source, src.blendMode, verts, frame.uvs, index, alpha, tint, bg);
|
||||
renderer.blitterBatch.add(bob.x, bob.y, frame);
|
||||
}
|
||||
|
||||
// renderer.spriteBatch.add(
|
||||
// frame,
|
||||
// transform._pivotX, transform._pivotY,
|
||||
// transform.world.tx, transform.world.ty,
|
||||
// transform._worldScaleX, transform._worldScaleY,
|
||||
// transform._worldRotation
|
||||
// );
|
||||
};
|
||||
|
||||
module.exports = BlitterWebGLRenderer;
|
||||
|
|
11
v3/src/gameobjects/blitter/Bob.js
Normal file
11
v3/src/gameobjects/blitter/Bob.js
Normal file
|
@ -0,0 +1,11 @@
|
|||
var Bob = function (blitter, x, y, frame, visible)
|
||||
{
|
||||
this.parent = blitter;
|
||||
|
||||
this.x = x;
|
||||
this.y = y;
|
||||
this.frame = frame;
|
||||
this.visible = visible;
|
||||
};
|
||||
|
||||
module.exports = Bob;
|
|
@ -41,6 +41,7 @@ var Phaser = {
|
|||
|
||||
// Required, but don't need Phaser level exports
|
||||
|
||||
require('./gameobjects/blitter/BlitterFactory');
|
||||
require('./gameobjects/image/ImageFactory');
|
||||
require('./gameobjects/container/ContainerFactory');
|
||||
|
||||
|
|
Loading…
Add table
Reference in a new issue