From 639073564df67c2f086d39abac469d56bb41ad4d Mon Sep 17 00:00:00 2001 From: pandamicro Date: Thu, 21 Sep 2017 22:45:35 +0800 Subject: [PATCH 1/2] Fix acceleration event crash --- cocos2d/core/platform/CCInputExtension.js | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/cocos2d/core/platform/CCInputExtension.js b/cocos2d/core/platform/CCInputExtension.js index 6f780104b1..e61f58459a 100644 --- a/cocos2d/core/platform/CCInputExtension.js +++ b/cocos2d/core/platform/CCInputExtension.js @@ -39,10 +39,12 @@ _p.setAccelerometerEnabled = function(isEnable){ var scheduler = cc.director.getScheduler(); if(_t._accelEnabled){ _t._accelCurTime = 0; + _t._registerAccelerometerEvent(); scheduler.scheduleUpdate(_t); } else { _t._accelCurTime = 0; - scheduler.scheduleUpdate(_t); + _t._unregisterAccelerometerEvent(); + scheduler.unscheduleUpdate(_t); } }; @@ -85,7 +87,14 @@ _p._registerAccelerometerEvent = function(){ _t._minus = -1; } - w.addEventListener(_deviceEventType, _t.didAccelerate.bind(_t), false); + _t.didAccelerateCallback = _t.didAccelerate.bind(_t); + w.addEventListener(_deviceEventType, _t.didAccelerateCallback, false); +}; + +_p._unregisterAccelerometerEvent = function () { + this._acceleration = null; + var _deviceEventType = (this._accelDeviceEvent === window.DeviceMotionEvent) ? "devicemotion" : "deviceorientation"; + window.removeEventListener(_deviceEventType, this.didAccelerateCallback, false); }; _p.didAccelerate = function (eventData) { From c27fa163cdcbda86101adaf77bf5cec2c7740c34 Mon Sep 17 00:00:00 2001 From: pandamicro Date: Fri, 22 Sep 2017 01:21:00 +0800 Subject: [PATCH 2/2] Fix advanced release mode --- CCBoot.js | 2 +- .../core/base-nodes/CCNodeWebGLRenderCmd.js | 2 ++ cocos2d/core/platform/CCClass.js | 26 +++++++++---------- cocos2d/core/textures/TexturesWebGL.js | 2 +- 4 files changed, 17 insertions(+), 15 deletions(-) diff --git a/CCBoot.js b/CCBoot.js index 9cfc1ae2db..f6ec16bc1f 100644 --- a/CCBoot.js +++ b/CCBoot.js @@ -992,7 +992,7 @@ cc.loader = (function () { delete _queue[url]; } - if (ENABLE_IMAEG_POOL && cc._renderType === cc.game.RENDER_TYPE_WEBGL) { + if (window.ENABLE_IMAEG_POOL && cc._renderType === cc.game.RENDER_TYPE_WEBGL) { imagePool.put(img); } }; diff --git a/cocos2d/core/base-nodes/CCNodeWebGLRenderCmd.js b/cocos2d/core/base-nodes/CCNodeWebGLRenderCmd.js index 0506dd522b..7680017273 100644 --- a/cocos2d/core/base-nodes/CCNodeWebGLRenderCmd.js +++ b/cocos2d/core/base-nodes/CCNodeWebGLRenderCmd.js @@ -60,4 +60,6 @@ set: function (value) { this.setShaderProgram(value); }, get: function () { return this.getShaderProgram(); } }); + /** @expose */ + proto._shaderProgram; })(); diff --git a/cocos2d/core/platform/CCClass.js b/cocos2d/core/platform/CCClass.js index 6b7a2e8043..be34ad92eb 100644 --- a/cocos2d/core/platform/CCClass.js +++ b/cocos2d/core/platform/CCClass.js @@ -140,19 +140,19 @@ cc.inject = function (srcPrototype, destPrototype) { * @namespace * @name ClassManager */ -var ClassManager = { - id : (0|(Math.random()*998)), +var ClassManager = function () { + var id = (0|(Math.random()*998)); + var instanceId = (0|(Math.random()*998)); - instanceId : (0|(Math.random()*998)), - - getNewID : function(){ - return this.id++; - }, + this.getNewID = function () { + return id++; + }; - getNewInstanceId : function(){ - return this.instanceId++; - } + this.getNewInstanceId = function () { + return instanceId++; + }; }; +var classManager = new ClassManager(); /* Managed JavaScript Inheritance * Based on John Resig's Simple JavaScript Inheritance http://ejohn.org/blog/simple-javascript-inheritance/ @@ -192,7 +192,7 @@ var ClassManager = { var Class; if (cc.game.config && cc.game.config[cc.game.CONFIG_KEY.exposeClassName]) { var constructor = "(function " + (props._className || "Class") + " (arg0, arg1, arg2, arg3, arg4, arg5) {\n"; - constructor += " this.__instanceId = ClassManager.getNewInstanceId();\n"; + constructor += " this.__instanceId = classManager.getNewInstanceId();\n"; constructor += " if (this.ctor) {\n"; constructor += " switch (arguments.length) {\n"; constructor += " case 0: this.ctor(); break;\n"; @@ -208,7 +208,7 @@ var ClassManager = { } else { Class = function (arg0, arg1, arg2, arg3, arg4) { - this.__instanceId = ClassManager.getNewInstanceId(); + this.__instanceId = classManager.getNewInstanceId(); if (this.ctor) { switch (arguments.length) { case 0: this.ctor(); break; @@ -223,7 +223,7 @@ var ClassManager = { }; } - desc.value = ClassManager.getNewID(); + desc.value = classManager.getNewID(); Object.defineProperty(prototype, '__pid', desc); // Populate our constructed prototype object diff --git a/cocos2d/core/textures/TexturesWebGL.js b/cocos2d/core/textures/TexturesWebGL.js index 5811f159ef..2dfe145e56 100644 --- a/cocos2d/core/textures/TexturesWebGL.js +++ b/cocos2d/core/textures/TexturesWebGL.js @@ -496,7 +496,7 @@ cc._tmp.WebGLTexture2D = function () { self._hasPremultipliedAlpha = premultiplied; self._hasMipmaps = false; - if (ENABLE_IMAEG_POOL) { + if (window.ENABLE_IMAEG_POOL) { self._htmlElementObj = null; }