@@ -30,93 +30,111 @@ var ParticleManagerCanvasRenderer = function (renderer, emitterManager, interpol
3030 }
3131
3232 var camMatrix = renderer . _tempMatrix1 . copyFrom ( camera . matrix ) ;
33- var managerMatrix = renderer . _tempMatrix2 . applyITRS ( emitterManager . x , emitterManager . y , emitterManager . rotation , emitterManager . scaleX , emitterManager . scaleY ) ;
33+ var calcMatrix = renderer . _tempMatrix2 ;
34+ var particleMatrix = renderer . _tempMatrix3 ;
35+ var managerMatrix = renderer . _tempMatrix4 . applyITRS ( emitterManager . x , emitterManager . y , emitterManager . rotation , emitterManager . scaleX , emitterManager . scaleY ) ;
3436
3537 camMatrix . multiply ( managerMatrix ) ;
3638
39+ var roundPixels = camera . roundPixels ;
40+
3741 var ctx = renderer . currentContext ;
38- var matrix = camMatrix . matrix ;
3942
4043 ctx . save ( ) ;
4144
42- ctx . transform ( matrix [ 0 ] , matrix [ 1 ] , matrix [ 2 ] , matrix [ 3 ] , matrix [ 4 ] , matrix [ 5 ] ) ;
43-
44- if ( parentMatrix !== undefined )
45+ for ( var e = 0 ; e < emittersLength ; e ++ )
4546 {
46- matrix = parentMatrix . matrix ;
47-
48- ctx . transform ( matrix [ 0 ] , matrix [ 1 ] , matrix [ 2 ] , matrix [ 3 ] , matrix [ 4 ] , matrix [ 5 ] ) ;
49- }
50-
51- for ( var i = 0 ; i < emittersLength ; i ++ )
52- {
53- var emitter = emitters [ i ] ;
54-
47+ var emitter = emitters [ e ] ;
5548 var particles = emitter . alive ;
56- var length = particles . length ;
49+ var particleCount = particles . length ;
5750
58- if ( ! emitter . visible || length === 0 )
51+ if ( ! emitter . visible || particleCount === 0 )
5952 {
6053 continue ;
6154 }
6255
63- var lastAlpha = ctx . globalAlpha ;
56+ var scrollX = camera . scrollX * emitter . scrollFactorX ;
57+ var scrollY = camera . scrollY * emitter . scrollFactorY ;
6458
65- var cameraScrollX = camera . scrollX * emitter . scrollFactorX ;
66- var cameraScrollY = camera . scrollY * emitter . scrollFactorY ;
59+ if ( parentMatrix )
60+ {
61+ // Multiply the camera by the parent matrix
62+ camMatrix . multiplyWithOffset ( parentMatrix , - scrollX , - scrollY ) ;
63+
64+ scrollX = 0 ;
65+ scrollY = 0 ;
66+ }
6767
6868 if ( renderer . currentBlendMode !== emitter . blendMode )
6969 {
7070 renderer . currentBlendMode = emitter . blendMode ;
7171 ctx . globalCompositeOperation = renderer . blendModes [ emitter . blendMode ] ;
7272 }
7373
74- for ( var index = 0 ; index < length ; ++ index )
74+ for ( var i = 0 ; i < particleCount ; i ++ )
7575 {
76- var particle = particles [ index ] ;
76+ var particle = particles [ i ] ;
7777
78- var particleAlpha = camera . alpha * ( ( particle . color >> 24 ) & 0xFF ) / 255 ;
78+ var alpha = particle . alpha * camera . alpha ;
7979
80- if ( particleAlpha <= 0 )
80+ if ( alpha <= 0 )
8181 {
8282 continue ;
8383 }
8484
8585 var frame = particle . frame ;
86- var width = frame . width ;
87- var height = frame . height ;
88- var ox = width * 0.5 ;
89- var oy = height * 0.5 ;
90- var cd = frame . canvasData ;
9186
92- var x = - ox ;
93- var y = - oy ;
87+ var x = - ( frame . halfWidth ) ;
88+ var y = - ( frame . halfHeight ) ;
9489
95- var tx = particle . x - cameraScrollX ;
96- var ty = particle . y - cameraScrollY ;
90+ // var width = frame.width;
91+ // var height = frame.height;
92+ // var ox = width * 0.5;
93+ // var oy = height * 0.5;
9794
98- if ( camera . roundPixels )
99- {
100- tx |= 0 ;
101- ty |= 0 ;
102- }
95+ particleMatrix . applyITRS ( 0 , 0 , particle . rotation , particle . scaleX , particle . scaleY ) ;
10396
104- ctx . globalAlpha = particleAlpha ;
97+ particleMatrix . e = particle . x - scrollX ;
98+ particleMatrix . f = particle . y - scrollY ;
99+
100+ camMatrix . multiply ( particleMatrix , calcMatrix ) ;
101+
102+ // var x = -ox;
103+ // var y = -oy;
104+
105+ // var tx = particle.x - cameraScrollX;
106+ // var ty = particle.y - cameraScrollY;
107+
108+ // if (camera.roundPixels)
109+ // {
110+ // tx |= 0;
111+ // ty |= 0;
112+ // }
113+
114+ ctx . globalAlpha = alpha ;
105115
106116 ctx . save ( ) ;
107117
108- ctx . translate ( tx , ty ) ;
118+ calcMatrix . copyToContext ( ctx ) ;
119+
120+ if ( roundPixels )
121+ {
122+ x |= 0 ;
123+ y |= 0 ;
124+ }
125+
126+ // ctx.translate(tx, ty);
109127
110- ctx . rotate ( particle . rotation ) ;
128+ // ctx.rotate(particle.rotation);
111129
112- ctx . scale ( particle . scaleX , particle . scaleY ) ;
130+ // ctx.scale(particle.scaleX, particle.scaleY);
131+
132+ var cd = frame . canvasData ;
113133
114134 ctx . drawImage ( frame . source . image , cd . x , cd . y , cd . width , cd . height , x , y , cd . width , cd . height ) ;
115135
116136 ctx . restore ( ) ;
117137 }
118-
119- ctx . globalAlpha = lastAlpha ;
120138 }
121139
122140 ctx . restore ( ) ;
0 commit comments