@@ -762,29 +762,32 @@ Phaser.BitmapData.prototype = {
762762 */
763763 blit : function ( image , source , dest , alpha , transform , blendMode ) {
764764
765+ var setAlpha = false ;
766+
765767 if ( typeof image === 'string' )
766768 {
767769 image = this . game . cache . getImage ( image ) ;
768770 }
769771
770- if ( typeof transform === 'undefined ' )
772+ if ( typeof alpha === 'number ' )
771773 {
772- var transform = { scaleX : 1 , skewX : 0 , skewY : 0 , scaleY : 1 , translateX : 0 , translateY : 0 } ;
773- }
774+ if ( alpha <= 0 )
775+ {
776+ // No point doing anything if alpha is zero
777+ return ;
778+ }
779+ else if ( alpha > 1 )
780+ {
781+ // Sanity cap
782+ alpha = 1 ;
783+ }
774784
775- if ( typeof alpha === 'undefined' )
776- {
777- alpha = null ;
778- }
779- else if ( alpha <= 0 )
780- {
781- // No point doing anything if alpha is zero
782- return ;
785+ setAlpha = true ;
783786 }
784- else if ( alpha > 1 )
787+
788+ if ( typeof transform === 'undefined' || transform === null )
785789 {
786- // Sanity cap
787- alpha = 1 ;
790+ var transform = Phaser . BitmapData . getTransform ( ) ;
788791 }
789792
790793 if ( typeof blendMode === 'undefined' )
@@ -811,23 +814,30 @@ Phaser.BitmapData.prototype = {
811814 }
812815 }
813816
814- if ( alpha )
817+ this . context . save ( ) ;
818+
819+ if ( setAlpha )
815820 {
816821 var prevAlpha = this . context . globalAlpha ;
817822 this . context . globalAlpha = alpha ;
818823 }
819824
820- // this.context.globalCompositeOperation = blendMode;
825+ var comp = this . context . globalCompositeOperation ;
826+ this . context . globalCompositeOperation = blendMode ;
821827
822828 this . context . setTransform ( transform . scaleX , transform . skewX , transform . skewY , transform . scaleY , transform . translateX , transform . translateY ) ;
823829
824830 this . context . drawImage ( src , sx + source . x , sy + source . y , source . width , source . height , dest . x , dest . y , dest . width , dest . height ) ;
825831
826- if ( alpha )
832+ this . context . restore ( ) ;
833+
834+ if ( setAlpha )
827835 {
828836 this . context . globalAlpha = prevAlpha ;
829837 }
830838
839+ this . context . globalCompositeOperation = comp ;
840+
831841 this . dirty = true ;
832842
833843 } ,
@@ -1122,4 +1132,29 @@ Phaser.BitmapData.prototype = {
11221132
11231133} ;
11241134
1135+ /**
1136+ * Gets a JavaScript object that has 6 properties set that are used by BitmapData in a transform.
1137+ *
1138+ * @method Phaser.BitmapData.getTransform
1139+ * @param {number } translateX - The x translate value.
1140+ * @param {number } translateY - The y translate value.
1141+ * @param {number } scaleX - The scale x value.
1142+ * @param {number } scaleY - The scale y value.
1143+ * @param {number } skewX - The skew x value.
1144+ * @param {number } skewY - The skew y value.
1145+ * @return {Object } A JavaScript object containing all of the properties BitmapData needs for transforms.
1146+ */
1147+ Phaser . BitmapData . getTransform = function ( translateX , translateY , scaleX , scaleY , skewX , skewY ) {
1148+
1149+ if ( typeof translateX !== 'number' ) { translateX = 0 ; }
1150+ if ( typeof translateY !== 'number' ) { translateY = 0 ; }
1151+ if ( typeof scaleX !== 'number' ) { scaleX = 1 ; }
1152+ if ( typeof scaleY !== 'number' ) { scaleY = 1 ; }
1153+ if ( typeof skewX !== 'number' ) { skewX = 0 ; }
1154+ if ( typeof skewY !== 'number' ) { skewY = 0 ; }
1155+
1156+ return { sx : scaleX , sy : scaleY , scaleX : scaleX , scaleY : scaleY , skewX : skewX , skewY : skewY , translateX : translateX , translateY : translateY , tx : translateX , ty : translateY } ;
1157+
1158+ } ;
1159+
11251160Phaser . BitmapData . prototype . constructor = Phaser . BitmapData ;
0 commit comments