@@ -583,6 +583,33 @@ cc.path = /** @lends cc.path# */{
583
583
* @see cc.loader
584
584
*/
585
585
586
+ var imagePool = {
587
+ _pool : new Array ( 10 ) ,
588
+ _MAX : 10 ,
589
+ _smallImg : "data:image/gif;base64,R0lGODlhAQABAAAAACwAAAAAAQABAAA=" ,
590
+
591
+ count : 0 ,
592
+ get : function ( ) {
593
+ if ( this . count > 0 ) {
594
+ this . count -- ;
595
+ var result = this . _pool [ this . count ] ;
596
+ this . _pool [ this . count ] = null ;
597
+ return result ;
598
+ }
599
+ else {
600
+ return new Image ( ) ;
601
+ }
602
+ } ,
603
+ put : function ( img ) {
604
+ var pool = this . _pool ;
605
+ if ( img instanceof HTMLImageElement && this . count < this . _MAX ) {
606
+ img . src = this . _smallImg ;
607
+ pool [ this . count ] = img ;
608
+ this . count ++ ;
609
+ }
610
+ }
611
+ } ;
612
+
586
613
/**
587
614
* Singleton instance of cc.Loader.
588
615
* @name cc.loader
@@ -867,7 +894,7 @@ cc.loader = (function () {
867
894
* @param {function } callback
868
895
* @returns {Image }
869
896
*/
870
- loadImg : function ( url , option , callback ) {
897
+ loadImg : function ( url , option , callback , img ) {
871
898
var opt = {
872
899
isCrossOrigin : true
873
900
} ;
@@ -876,10 +903,10 @@ cc.loader = (function () {
876
903
else if ( option !== undefined )
877
904
callback = option ;
878
905
879
- var img = this . getRes ( url ) ;
880
- if ( img ) {
881
- callback && callback ( null , img ) ;
882
- return img ;
906
+ var texture = this . getRes ( url ) ;
907
+ if ( texture ) {
908
+ callback && callback ( null , texture ) ;
909
+ return null ;
883
910
}
884
911
885
912
var queue = _queue [ url ] ;
@@ -888,18 +915,16 @@ cc.loader = (function () {
888
915
return queue . img ;
889
916
}
890
917
891
- img = new Image ( ) ;
918
+ img = img || imagePool . get ( ) ;
892
919
if ( opt . isCrossOrigin && location . origin !== "file://" )
893
920
img . crossOrigin = "Anonymous" ;
921
+ else
922
+ img . crossOrigin = null ;
894
923
895
924
var loadCallback = function ( ) {
896
925
this . removeEventListener ( 'load' , loadCallback , false ) ;
897
926
this . removeEventListener ( 'error' , errorCallback , false ) ;
898
927
899
- if ( ! _urlRegExp . test ( url ) ) {
900
- cc . loader . cache [ url ] = img ;
901
- }
902
-
903
928
var queue = _queue [ url ] ;
904
929
if ( queue ) {
905
930
var callbacks = queue . callbacks ;
@@ -912,16 +937,21 @@ cc.loader = (function () {
912
937
queue . img = null ;
913
938
delete _queue [ url ] ;
914
939
}
940
+
941
+ if ( cc . _renderType === cc . game . RENDER_TYPE_WEBGL ) {
942
+ imagePool . put ( img ) ;
943
+ }
915
944
} ;
916
945
917
946
var self = this ;
918
947
var errorCallback = function ( ) {
948
+ this . removeEventListener ( 'load' , loadCallback , false ) ;
919
949
this . removeEventListener ( 'error' , errorCallback , false ) ;
920
950
921
- if ( img . crossOrigin && img . crossOrigin . toLowerCase ( ) === "anonymous" ) {
951
+ if ( window . location . protocol !== 'https:' && img . crossOrigin && img . crossOrigin . toLowerCase ( ) === "anonymous" ) {
922
952
opt . isCrossOrigin = false ;
923
953
self . release ( url ) ;
924
- cc . loader . loadImg ( url , opt , callback ) ;
954
+ cc . loader . loadImg ( url , opt , callback , img ) ;
925
955
} else {
926
956
var queue = _queue [ url ] ;
927
957
if ( queue ) {
@@ -935,6 +965,10 @@ cc.loader = (function () {
935
965
queue . img = null ;
936
966
delete _queue [ url ] ;
937
967
}
968
+
969
+ if ( cc . _renderType === cc . game . RENDER_TYPE_WEBGL ) {
970
+ imagePool . put ( img ) ;
971
+ }
938
972
}
939
973
} ;
940
974
@@ -1610,6 +1644,7 @@ var _initSys = function () {
1610
1644
sys . BROWSER_TYPE_WECHAT = "wechat" ;
1611
1645
sys . BROWSER_TYPE_ANDROID = "androidbrowser" ;
1612
1646
sys . BROWSER_TYPE_IE = "ie" ;
1647
+ sys . BROWSER_TYPE_QQ_APP = "qq" ; // QQ App
1613
1648
sys . BROWSER_TYPE_QQ = "qqbrowser" ;
1614
1649
sys . BROWSER_TYPE_MOBILE_QQ = "mqqbrowser" ;
1615
1650
sys . BROWSER_TYPE_UC = "ucbrowser" ;
@@ -1727,13 +1762,13 @@ var _initSys = function () {
1727
1762
/* Determine the browser type */
1728
1763
( function ( ) {
1729
1764
var typeReg1 = / m i c r o m e s s e n g e r | m q q b r o w s e r | s o g o u | q z o n e | l i e b a o | u c b r o w s e r | 3 6 0 a p h o n e | 3 6 0 b r o w s e r | b a i d u b o x a p p | b a i d u b r o w s e r | m a x t h o n | m x b r o w s e r | t r i d e n t | m i u i b r o w s e r / i;
1730
- var typeReg2 = / q q b r o w s e r | c h r o m e | s a f a r i | f i r e f o x | o p r | o u p e n g | o p e r a / i;
1765
+ var typeReg2 = / q q b r o w s e r | q q | c h r o m e | s a f a r i | f i r e f o x | o p r | o u p e n g | o p e r a / i;
1731
1766
var browserTypes = typeReg1 . exec ( ua ) ;
1732
1767
if ( ! browserTypes ) browserTypes = typeReg2 . exec ( ua ) ;
1733
1768
var browserType = browserTypes ? browserTypes [ 0 ] : sys . BROWSER_TYPE_UNKNOWN ;
1734
1769
if ( browserType === 'micromessenger' )
1735
1770
browserType = sys . BROWSER_TYPE_WECHAT ;
1736
- else if ( browserType === "safari" && ( ua . match ( / a n d r o i d . * a p p l e w e b k i t / ) ) )
1771
+ else if ( browserType === "safari" && isAndroid )
1737
1772
browserType = sys . BROWSER_TYPE_ANDROID ;
1738
1773
else if ( browserType === "trident" )
1739
1774
browserType = sys . BROWSER_TYPE_IE ;
@@ -1756,8 +1791,8 @@ var _initSys = function () {
1756
1791
sys . browserVersion = "" ;
1757
1792
/* Determine the browser version number */
1758
1793
( function ( ) {
1759
- var versionReg1 = / ( m i c r o m e s s e n g e r | q q | m x | m a x t h o n | b a i d u | s o g o u ) ( m o b i l e ) ? ( b r o w s e r ) ? \/ ? ( [ \d . ] + ) / i;
1760
- var versionReg2 = / ( m s i e | r v : | f i r e f o x | c h r o m e | u c b r o w s e r | o u p e n g | o p e r a | o p r | s a f a r i | m i u i ) ( m o b i l e ) ? ( b r o w s e r ) ? \/ ? ( [ \d . ] + ) / i;
1794
+ var versionReg1 = / ( m q q b r o w s e r | m i c r o m e s s e n g e r | s o g o u | q z o n e | l i e b a o | m a x t h o n | m x b r o w s e r | b a i d u ) ( m o b i l e ) ? ( b r o w s e r ) ? \/ ? ( [ \d . ] + ) / i;
1795
+ var versionReg2 = / ( m s i e | r v : | f i r e f o x | c h r o m e | u c b r o w s e r | q q | o u p e n g | o p e r a | o p r | s a f a r i | m i u i ) ( m o b i l e ) ? ( b r o w s e r ) ? \/ ? ( [ \d . ] + ) / i;
1761
1796
var tmp = ua . match ( versionReg1 ) ;
1762
1797
if ( ! tmp ) tmp = ua . match ( versionReg2 ) ;
1763
1798
sys . browserVersion = tmp ? tmp [ 4 ] : "" ;
@@ -1843,7 +1878,7 @@ var _initSys = function () {
1843
1878
var tmpCanvas = document . createElement ( "CANVAS" ) ;
1844
1879
try {
1845
1880
var context = cc . create3DContext ( tmpCanvas ) ;
1846
- if ( context && context . getShaderPrecisionFormat ) {
1881
+ if ( context ) {
1847
1882
_supportWebGL = true ;
1848
1883
}
1849
1884
@@ -2329,6 +2364,7 @@ cc.game = /** @lends cc.game# */{
2329
2364
config [ CONFIG_KEY . frameRate ] = frameRate ;
2330
2365
if ( self . _intervalId )
2331
2366
window . cancelAnimationFrame ( self . _intervalId ) ;
2367
+ self . _intervalId = 0 ;
2332
2368
self . _paused = true ;
2333
2369
self . _setAnimFrame ( ) ;
2334
2370
self . _runMainLoop ( ) ;
@@ -2349,8 +2385,7 @@ cc.game = /** @lends cc.game# */{
2349
2385
this . _paused = true ;
2350
2386
// Pause audio engine
2351
2387
if ( cc . audioEngine ) {
2352
- cc . audioEngine . stopAllEffects ( ) ;
2353
- cc . audioEngine . pauseMusic ( ) ;
2388
+ cc . audioEngine . _pausePlaying ( ) ;
2354
2389
}
2355
2390
// Pause main loop
2356
2391
if ( this . _intervalId )
@@ -2366,7 +2401,7 @@ cc.game = /** @lends cc.game# */{
2366
2401
this . _paused = false ;
2367
2402
// Resume audio engine
2368
2403
if ( cc . audioEngine ) {
2369
- cc . audioEngine . resumeMusic ( ) ;
2404
+ cc . audioEngine . _resumePlaying ( ) ;
2370
2405
}
2371
2406
// Resume main loop
2372
2407
this . _runMainLoop ( ) ;
@@ -2512,8 +2547,9 @@ cc.game = /** @lends cc.game# */{
2512
2547
// @Time ticker section
2513
2548
_setAnimFrame : function ( ) {
2514
2549
this . _lastTime = new Date ( ) ;
2515
- this . _frameTime = 1000 / cc . game . config [ cc . game . CONFIG_KEY . frameRate ] ;
2516
- if ( ( cc . sys . os === cc . sys . OS_IOS && cc . sys . browserType === cc . sys . BROWSER_TYPE_WECHAT ) || cc . game . config [ cc . game . CONFIG_KEY . frameRate ] !== 60 ) {
2550
+ var frameRate = cc . game . config [ cc . game . CONFIG_KEY . frameRate ] ;
2551
+ this . _frameTime = 1000 / frameRate ;
2552
+ if ( frameRate !== 60 && frameRate !== 30 ) {
2517
2553
window . requestAnimFrame = this . _stTime ;
2518
2554
window . cancelAnimationFrame = this . _ctTime ;
2519
2555
}
@@ -2551,20 +2587,26 @@ cc.game = /** @lends cc.game# */{
2551
2587
//Run game.
2552
2588
_runMainLoop : function ( ) {
2553
2589
var self = this , callback , config = self . config , CONFIG_KEY = self . CONFIG_KEY ,
2554
- director = cc . director ;
2590
+ director = cc . director ,
2591
+ skip = true , frameRate = config [ CONFIG_KEY . frameRate ] ;
2555
2592
2556
2593
director . setDisplayStats ( config [ CONFIG_KEY . showFPS ] ) ;
2557
2594
2558
2595
callback = function ( ) {
2559
2596
if ( ! self . _paused ) {
2597
+ if ( frameRate === 30 ) {
2598
+ if ( skip = ! skip ) {
2599
+ self . _intervalId = window . requestAnimFrame ( callback ) ;
2600
+ return ;
2601
+ }
2602
+ }
2603
+
2560
2604
director . mainLoop ( ) ;
2561
- if ( self . _intervalId )
2562
- window . cancelAnimationFrame ( self . _intervalId ) ;
2563
2605
self . _intervalId = window . requestAnimFrame ( callback ) ;
2564
2606
}
2565
2607
} ;
2566
2608
2567
- window . requestAnimFrame ( callback ) ;
2609
+ self . _intervalId = window . requestAnimFrame ( callback ) ;
2568
2610
self . _paused = false ;
2569
2611
} ,
2570
2612
@@ -2660,7 +2702,7 @@ cc.game = /** @lends cc.game# */{
2660
2702
}
2661
2703
width = width || element . clientWidth ;
2662
2704
height = height || element . clientHeight ;
2663
- this . canvas = cc . _canvas = localCanvas = document . createElement ( "CANVAS" ) ;
2705
+ this . canvas = cc . _canvas = localCanvas = cc . $ ( document . createElement ( "CANVAS" ) ) ;
2664
2706
this . container = cc . container = localContainer = document . createElement ( "DIV" ) ;
2665
2707
element . appendChild ( localContainer ) ;
2666
2708
}
@@ -2708,7 +2750,7 @@ cc.game = /** @lends cc.game# */{
2708
2750
} ,
2709
2751
2710
2752
_initEvents : function ( ) {
2711
- var win = window , self = this , hidden , visibilityChange , _undef = "undefined" ;
2753
+ var win = window , hidden ;
2712
2754
2713
2755
this . _eventHide = this . _eventHide || new cc . EventCustom ( this . EVENT_HIDE ) ;
2714
2756
this . _eventHide . setUserData ( this ) ;
@@ -2721,18 +2763,21 @@ cc.game = /** @lends cc.game# */{
2721
2763
2722
2764
if ( ! cc . isUndefined ( document . hidden ) ) {
2723
2765
hidden = "hidden" ;
2724
- visibilityChange = "visibilitychange" ;
2725
2766
} else if ( ! cc . isUndefined ( document . mozHidden ) ) {
2726
2767
hidden = "mozHidden" ;
2727
- visibilityChange = "mozvisibilitychange" ;
2728
2768
} else if ( ! cc . isUndefined ( document . msHidden ) ) {
2729
2769
hidden = "msHidden" ;
2730
- visibilityChange = "msvisibilitychange" ;
2731
2770
} else if ( ! cc . isUndefined ( document . webkitHidden ) ) {
2732
2771
hidden = "webkitHidden" ;
2733
- visibilityChange = "webkitvisibilitychange" ;
2734
2772
}
2735
2773
2774
+ var changeList = [
2775
+ "visibilitychange" ,
2776
+ "mozvisibilitychange" ,
2777
+ "msvisibilitychange" ,
2778
+ "webkitvisibilitychange" ,
2779
+ "qbrowserVisibilityChange"
2780
+ ] ;
2736
2781
var onHidden = function ( ) {
2737
2782
if ( cc . eventManager && cc . game . _eventHide )
2738
2783
cc . eventManager . dispatchEvent ( cc . game . _eventHide ) ;
@@ -2743,10 +2788,15 @@ cc.game = /** @lends cc.game# */{
2743
2788
} ;
2744
2789
2745
2790
if ( hidden ) {
2746
- document . addEventListener ( visibilityChange , function ( ) {
2747
- if ( document [ hidden ] ) onHidden ( ) ;
2748
- else onShow ( ) ;
2749
- } , false ) ;
2791
+ for ( var i = 0 ; i < changeList . length ; i ++ ) {
2792
+ document . addEventListener ( changeList [ i ] , function ( event ) {
2793
+ var visible = document [ hidden ] ;
2794
+ // QQ App
2795
+ visible = visible || event [ "hidden" ] ;
2796
+ if ( visible ) onHidden ( ) ;
2797
+ else onShow ( ) ;
2798
+ } , false ) ;
2799
+ }
2750
2800
} else {
2751
2801
win . addEventListener ( "blur" , onHidden , false ) ;
2752
2802
win . addEventListener ( "focus" , onShow , false ) ;
0 commit comments