Skip to content

Commit fdc1f3c

Browse files
committed
Added canvas roundPixels support for Text, Particles and TileSprites
1 parent 2c10ac3 commit fdc1f3c

3 files changed

Lines changed: 51 additions & 4 deletions

File tree

src/gameobjects/particles/ParticleManagerCanvasRenderer.js

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -53,6 +53,8 @@ var ParticleManagerCanvasRenderer = function (renderer, emitterManager, interpol
5353
ctx.globalCompositeOperation = renderer.blendModes[emitter.blendMode];
5454
}
5555

56+
var roundPixels = renderer.config.roundPixels;
57+
5658
for (var index = 0; index < length; ++index)
5759
{
5860
var particle = particles[index];
@@ -74,13 +76,27 @@ var ParticleManagerCanvasRenderer = function (renderer, emitterManager, interpol
7476
var x = -ox;
7577
var y = -oy;
7678

79+
var tx = particle.x - cameraScrollX * particle.scrollFactorX;
80+
var ty = particle.y - cameraScrollY * particle.scrollFactorY;
81+
82+
if (roundPixels)
83+
{
84+
tx |= 0;
85+
ty |= 0;
86+
}
87+
7788
ctx.globalAlpha = alpha;
7889

7990
ctx.save();
80-
ctx.translate(particle.x - cameraScrollX * particle.scrollFactorX, particle.y - cameraScrollY * particle.scrollFactorY);
91+
92+
ctx.translate(tx, ty);
93+
8194
ctx.rotate(particle.rotation);
95+
8296
ctx.scale(particle.scaleX, particle.scaleY);
97+
8398
ctx.drawImage(frame.source.image, cd.sx, cd.sy, cd.sWidth, cd.sHeight, x, y, cd.dWidth, cd.dHeight);
99+
84100
ctx.restore();
85101
}
86102

src/gameobjects/text/static/TextCanvasRenderer.js

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -55,13 +55,27 @@ var TextCanvasRenderer = function (renderer, src, interpolationPercentage, camer
5555

5656
ctx.save();
5757

58-
// ctx.scale(1.0 / resolution, 1.0 / resolution);
59-
ctx.translate(src.x - camera.scrollX * src.scrollFactorX, src.y - camera.scrollY * src.scrollFactorY);
58+
var tx = src.x - camera.scrollX * src.scrollFactorX;
59+
var ty = src.y - camera.scrollY * src.scrollFactorY;
60+
61+
if (renderer.config.roundPixels)
62+
{
63+
tx |= 0;
64+
ty |= 0;
65+
}
66+
67+
ctx.translate(tx, ty);
68+
6069
ctx.rotate(src.rotation);
70+
6171
ctx.scale(src.scaleX, src.scaleY);
72+
6273
ctx.translate(canvas.width * (src.flipX ? 1 : 0), canvas.height * (src.flipY ? 1 : 0));
74+
6375
ctx.scale(src.flipX ? -1 : 1, src.flipY ? -1 : 1);
76+
6477
ctx.drawImage(canvas, 0, 0, canvas.width, canvas.height, -src.displayOriginX, -src.displayOriginY, canvas.width, canvas.height);
78+
6579
ctx.restore();
6680
};
6781

src/gameobjects/tilesprite/TileSpriteCanvasRenderer.js

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,29 @@ var TileSpriteCanvasRenderer = function (renderer, src, interpolationPercentage,
5858
var dx = frame.x - (src.originX * src.width);
5959
var dy = frame.y - (src.originY * src.height);
6060

61+
var tx = src.x - camera.scrollX * src.scrollFactorX;
62+
var ty = src.y - camera.scrollY * src.scrollFactorY;
63+
64+
if (renderer.config.roundPixels)
65+
{
66+
dx |= 0;
67+
dy |= 0;
68+
tx |= 0;
69+
ty |= 0;
70+
}
71+
6172
ctx.save();
73+
6274
ctx.translate(dx, dy);
63-
ctx.translate(src.x - camera.scrollX * src.scrollFactorX, src.y - camera.scrollY * src.scrollFactorY);
75+
76+
ctx.translate(tx, ty);
77+
6478
ctx.fillStyle = src.canvasPattern;
79+
6580
ctx.translate(-this.tilePositionX, -this.tilePositionY);
81+
6682
ctx.fillRect(this.tilePositionX, this.tilePositionY, src.width, src.height);
83+
6784
ctx.restore();
6885
};
6986

0 commit comments

Comments
 (0)