Skip to content

Commit cffc40b

Browse files
committed
Fixed flip on blitter game object. Added camera scrollFactor to blitter canvas renderer
1 parent 29f9675 commit cffc40b

3 files changed

Lines changed: 37 additions & 12 deletions

File tree

src/gameobjects/blitter/BlitterCanvasRenderer.js

Lines changed: 30 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -26,21 +26,46 @@ var BlitterCanvasRenderer = function (renderer, src, interpolationPercentage, ca
2626
renderer.setBlendMode(src.blendMode);
2727

2828
var ca = renderer.currentAlpha;
29+
var ctx = renderer.gameContext;
30+
var cameraScrollX = src.x - camera.scrollX * src.scrollFactorX;
31+
var cameraScrollY = src.y - camera.scrollY * src.scrollFactorY;
2932

3033
// Render bobs
3134
for (var i = 0; i < list.length; i++)
3235
{
3336
var bob = list[i];
37+
var flip = (bob.flipX || bob.flipY);
38+
var frame = bob.frame;
39+
var cd = frame.canvasData;
40+
var dx = frame.x;
41+
var dy = frame.y;
42+
var fx = 1;
43+
var fy = 1;
3444

35-
if (ca !== bob.alpha)
45+
if (!flip)
3646
{
37-
ca = renderer.setAlpha(bob.alpha);
47+
renderer.blitImage(dx + bob.x + cameraScrollX, dy + bob.y + cameraScrollY, bob.frame);
3848
}
49+
else
50+
{
51+
if (bob.flipX)
52+
{
53+
fx = -1;
54+
dx -= cd.dWidth;
55+
}
3956

40-
// var x = src.x + bob.x + frame.x - cameraScrollX + ((frame.width) * (bob.flipX ? 1 : 0));
41-
// var y = src.y + bob.y + frame.y - cameraScrollY + ((frame.height) * (bob.flipY ? 1 : 0));
57+
if (bob.flipY)
58+
{
59+
fy = -1;
60+
dy -= cd.dHeight;
61+
}
4262

43-
renderer.blitImage(src.x + bob.x, src.y + bob.y, bob.frame, camera);
63+
ctx.save();
64+
ctx.translate(bob.x + cameraScrollX, bob.y + cameraScrollY);
65+
ctx.scale(fx, fy);
66+
ctx.drawImage(frame.source.image, cd.sx, cd.sy, cd.sWidth, cd.sHeight, dx, dy, cd.dWidth, cd.dHeight);
67+
ctx.restore();
68+
}
4469
}
4570
};
4671

src/renderer/canvas/utils/BlitImage.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11

22
// No scaling, anchor, rotation or effects, literally draws the frame directly to the canvas
3-
var BlitImage = function (dx, dy, frame, camera)
3+
var BlitImage = function (dx, dy, frame)
44
{
55
var ctx = this.currentContext;
66
var cd = frame.canvasData;
@@ -11,8 +11,8 @@ var BlitImage = function (dx, dy, frame, camera)
1111
cd.sy,
1212
cd.sWidth,
1313
cd.sHeight,
14-
dx - camera.scrollX,
15-
dy - camera.scrollY,
14+
dx,
15+
dy,
1616
cd.dWidth,
1717
cd.dHeight
1818
);

src/renderer/webgl/pipelines/TextureTintPipeline.js

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -285,8 +285,8 @@ var TextureTintPipeline = new Class({
285285
var cameraScrollY = camera.scrollY * blitter.scrollFactorY;
286286
var batchCount = Math.ceil(length / this.maxQuads);
287287
var batchOffset = 0;
288-
var blitterX = blitter.x;
289-
var blitterY = blitter.y;
288+
var blitterX = blitter.x - cameraScrollX;
289+
var blitterY = blitter.y - cameraScrollY;
290290

291291
for (var batchIndex = 0; batchIndex < batchCount; ++batchIndex)
292292
{
@@ -305,8 +305,8 @@ var TextureTintPipeline = new Class({
305305
var flipY = bob.flipY;
306306
var width = frame.width * (flipX ? -1.0 : 1.0);
307307
var height = frame.height * (flipY ? -1.0 : 1.0);
308-
var x = blitterX + bob.x + frame.x - cameraScrollX + (width * ((flipX) ? 1.0 : 0.0));
309-
var y = blitterY + bob.y + frame.y - cameraScrollY + (height * ((flipY) ? 1.0 : 0.0));
308+
var x = blitterX + bob.x + frame.x + (frame.width * ((flipX) ? 1.0 : 0.0));
309+
var y = blitterY + bob.y + frame.y + (frame.height * ((flipY) ? 1.0 : 0.0));
310310
var xw = x + width;
311311
var yh = y + height;
312312
var tx0 = x * a + y * c + e;

0 commit comments

Comments
 (0)