Skip to content

Commit

Permalink
Merge 2.1.3 into v2.2.0
Browse files Browse the repository at this point in the history
* commit 'a3de003db47b4afa537a97b829ad75069f48be95':
  fix browser breaking when playing audio on uc browser (cocos#5048)
  fix vec2、vec3、vec4 parameters type error (cocos#5064)
  Fix call node targetOff func has not remove node from target.__eventTargets array (cocos#5052)
  add play and stop sub particle for editor mode (cocos#5031)
  fix IE11's not supporting to Array.includes (cocos#5033)
  fix issue cocos#4942
  BUG FIX: audio fail to register touch event listener && fix audio loading (cocos#4991)
  fix ecScene null (cocos#5000)
  Lifecycle: always call start, update, lateUpdate in try catch (cocos#4941)
  Fix a memory leak caused by the render-data not being properly released! (cocos#5025)
  avoid releasing builtin asset (cocos#4915)
  fix auto sync prefab rotation and z invalid (cocos#4975)
  revert fix pageview inertia invalid (cocos#4945) (cocos#4968)
  refine code (cocos#4964)
  fix pageview inertia invalid (cocos#4945)

# Conflicts:
#	cocos2d/audio/CCAudio.js
#	cocos2d/core/graphics/graphics.js
#	cocos2d/core/load-pipeline/audio-downloader.js
#	cocos2d/core/platform/CCSys.js
#	cocos2d/core/renderer/index.js
#	cocos2d/core/utils/prefab-helper.js
#	cocos2d/renderer/render-data/render-data.js
#	cocos2d/tilemap/CCTiledMap.js
  • Loading branch information
jareguo committed Aug 2, 2019
2 parents be40173 + a3de003 commit 86f1439
Show file tree
Hide file tree
Showing 22 changed files with 224 additions and 115 deletions.
6 changes: 4 additions & 2 deletions cocos2d/audio/CCAudio.js
Original file line number Diff line number Diff line change
Expand Up @@ -165,8 +165,9 @@ Audio.State = {
if (touchBinded) return;
touchBinded = true;

let touchEventName = ('ontouchend' in window) ? 'touchend' : 'mousedown';
// Listen to the touchstart body event and play the audio when necessary.
cc.game.canvas.addEventListener('touchstart', function () {
cc.game.canvas.addEventListener(touchEventName, function () {
let item;
while (item = touchPlayList.pop()) {
item.audio.play(item.offset);
Expand Down Expand Up @@ -357,7 +358,8 @@ Audio.State = {
// TIME_CONSTANT need to be 0 by default, or may fail to set volume at the very beginning of playing audio
let TIME_CONSTANT;
if (cc.sys.browserType === cc.sys.BROWSER_TYPE_EDGE ||
cc.sys.browserType === cc.sys.BROWSER_TYPE_BAIDU) {
cc.sys.browserType === cc.sys.BROWSER_TYPE_BAIDU ||
cc.sys.browserType === cc.sys.BROWSER_TYPE_UC) {
TIME_CONSTANT = 0.01;
}
else {
Expand Down
4 changes: 4 additions & 0 deletions cocos2d/core/CCNode.js
Original file line number Diff line number Diff line change
Expand Up @@ -1915,6 +1915,10 @@ let NodeDefines = {
this._capturingListeners.targetOff(target);
}

if (target && target.__eventTargets) {
js.array.fastRemove(target.__eventTargets, this);
}

if (this._touchListener && !_checkListeners(this, _touchEvents)) {
eventManager.removeListener(this._touchListener);
this._touchListener = null;
Expand Down
8 changes: 6 additions & 2 deletions cocos2d/core/collider/CCCollisionManager.js
Original file line number Diff line number Diff line change
Expand Up @@ -395,8 +395,12 @@ let CollisionManager = cc.Class({
let colliders = node.getComponents(cc.Collider);

for (let i = 0, l = colliders.length; i < l; i++) {
this.removeCollider(colliders[i]);
this.addCollider(colliders[i]);
let collider = colliders[i];
if(collider instanceof cc.PhysicsCollider) {
continue;
}
this.removeCollider(collider);
this.addCollider(collider);
}
},

Expand Down
82 changes: 47 additions & 35 deletions cocos2d/core/component-scheduler.js
Original file line number Diff line number Diff line change
Expand Up @@ -34,9 +34,6 @@ var IsEditorOnEnableCalled = Flags.IsEditorOnEnableCalled;

var callerFunctor = CC_EDITOR && require('./utils/misc').tryCatchFunctor_EDITOR;
var callOnEnableInTryCatch = CC_EDITOR && callerFunctor('onEnable');
var callStartInTryCatch = CC_EDITOR && callerFunctor('start', null, 'target._objFlags |= ' + IsStartCalled);
var callUpdateInTryCatch = CC_EDITOR && callerFunctor('update', 'dt');
var callLateUpdateInTryCatch = CC_EDITOR && callerFunctor('lateUpdate', 'dt');
var callOnDisableInTryCatch = CC_EDITOR && callerFunctor('onDisable');

var callStart = CC_SUPPORT_JIT ? 'c.start();c._objFlags|=' + IsStartCalled : function (c) {
Expand Down Expand Up @@ -215,47 +212,65 @@ function enableInEditor (comp) {
}
}

function createInvokeImpl (funcOrCode, useDt) {
// return function to simply call each component with try catch protection
function createInvokeImpl (funcOrCode, useDt, ensureFlag) {
let fastPath;
if (typeof funcOrCode === 'function') {
if (useDt) {
return function (iterator, dt) {
var array = iterator.array;
for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {
var comp = array[iterator.i];
funcOrCode(comp, dt);
}
};
}
else {
return function (iterator) {
var array = iterator.array;
for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {
var comp = array[iterator.i];
funcOrCode(comp);
}
};
}
fastPath = useDt ? function (iterator, dt) {
var array = iterator.array;
for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {
funcOrCode(array[iterator.i], dt);
}
} : function (iterator) {
var array = iterator.array;
for (iterator.i = 0; iterator.i < array.length; ++iterator.i) {
funcOrCode(array[iterator.i]);
}
};
}
else {
// function (it) {
// var a = it.array;
// for (it.i = 0; it.i < a.length; ++it.i) {
// var comp = a[it.i];
// var c = a[it.i];
// // ...
// }
// }
var body = 'var a=it.array;' +
let body = 'var a=it.array;' +
'for(it.i=0;it.i<a.length;++it.i){' +
'var c=a[it.i];' +
funcOrCode +
'}';
if (useDt) {
return Function('it', 'dt', body);
fastPath = useDt ? Function('it', 'dt', body) : Function('it', body);
}
return function (iterator, dt) {
try {
fastPath(iterator, dt);
}
else {
return Function('it', body);
catch (e) {
// slow path
cc._throw(e);
var array = iterator.array;
if (ensureFlag) {
array[iterator.i]._objFlags |= ensureFlag;
}
++iterator.i; // invoke next callback
if (typeof funcOrCode !== 'function') {
funcOrCode = Function('c', 'dt', funcOrCode);
}
for (; iterator.i < array.length; ++iterator.i) {
try {
funcOrCode(array[iterator.i], dt);
}
catch (e) {
cc._throw(e);
if (ensureFlag) {
array[iterator.i]._objFlags |= ensureFlag;
}
}
}
}
}
};
}


Expand All @@ -264,12 +279,9 @@ function createInvokeImpl (funcOrCode, useDt) {
*/
function ctor () {
// invokers
this.startInvoker = new OneOffInvoker(createInvokeImpl(
CC_EDITOR ? callStartInTryCatch : callStart));
this.updateInvoker = new ReusableInvoker(createInvokeImpl(
CC_EDITOR ? callUpdateInTryCatch : callUpdate, true));
this.lateUpdateInvoker = new ReusableInvoker(createInvokeImpl(
CC_EDITOR ? callLateUpdateInTryCatch : callLateUpdate, true));
this.startInvoker = new OneOffInvoker(createInvokeImpl(callStart, false, IsStartCalled));
this.updateInvoker = new ReusableInvoker(createInvokeImpl(callUpdate, true));
this.lateUpdateInvoker = new ReusableInvoker(createInvokeImpl(callLateUpdate, true));

// components deferred to next frame
this.scheduleInNextFrame = [];
Expand Down
1 change: 1 addition & 0 deletions cocos2d/core/components/CCPageView.js
Original file line number Diff line number Diff line change
Expand Up @@ -560,6 +560,7 @@ var PageView = cc.Class({
}
}
},

_autoScrollToPage: function () {
var bounceBackStarted = this._startBounceBackIfNeeded();
var moveOffset = this._touchBeganPosition.sub(this._touchEndPosition);
Expand Down
1 change: 1 addition & 0 deletions cocos2d/core/components/CCRenderComponent.js
Original file line number Diff line number Diff line change
Expand Up @@ -164,6 +164,7 @@ let RenderComponent = cc.Class({
* !#zh 根据指定索引获取材质
* @method getMaterial
* @param {Number} index
* @return {Material}
*/
getMaterial (index) {
if (index < 0 || index >= this._materials.length) {
Expand Down
16 changes: 15 additions & 1 deletion cocos2d/core/event/event-target.js
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,14 @@ proto.on = function (type, callback, target, once) {
proto.__off = proto.off;
proto.off = function (type, callback, target) {
if (!callback) {
let list = this._callbackTable[type];
let targets = list.targets;
for (let i = 0; i < targets.length; ++i) {
let target = targets[i];
if (target && target.__eventTargets) {
fastRemove(target.__eventTargets, this);
}
}
this.removeAll(type);
}
else {
Expand Down Expand Up @@ -168,7 +176,13 @@ proto.off = function (type, callback, target) {
* @method targetOff
* @param {Object} target - The target to be searched for all related listeners
*/
proto.targetOff = proto.removeAll;
proto.targetOff = function (target) {
this.removeAll(target);

if (target && target.__eventTargets) {
fastRemove(target.__eventTargets, this);
}
};

/**
* !#en
Expand Down
9 changes: 6 additions & 3 deletions cocos2d/core/graphics/graphics.js
Original file line number Diff line number Diff line change
Expand Up @@ -193,11 +193,14 @@ let Graphics = cc.Class({
return;
}

if (this.sharedMaterials[0]) {
return;
let material = this.sharedMaterials[0];
if (!material) {
material = Material.getInstantiatedBuiltinMaterial('2d-base', this);
}
else {
material = Material.getInstantiatedMaterial(material, this);
}

let material = Material.getInstantiatedBuiltinMaterial('2d-base', this);
material.define('CC_USE_MODEL', true);
this.setMaterial(0, material);
},
Expand Down
1 change: 1 addition & 0 deletions cocos2d/core/load-pipeline/CCLoader.js
Original file line number Diff line number Diff line change
Expand Up @@ -812,6 +812,7 @@ proto.release = function (asset) {
}
else if (asset) {
var id = this._getReferenceKey(asset);
if (!CC_EDITOR && id && id in cc.AssetLibrary.getBuiltinDeps()) return;
var item = this.getItem(id);
if (item) {
var removed = this.removeItem(id);
Expand Down
20 changes: 12 additions & 8 deletions cocos2d/core/node-activator.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,8 +37,16 @@ var IsOnLoadCalled = Flags.IsOnLoadCalled;
var Deactivating = Flags.Deactivating;

var callPreloadInTryCatch = CC_EDITOR && callerFunctor('__preload');
var callOnLoadInTryCatch = CC_EDITOR && callerFunctor('onLoad', null,
'target._objFlags |= ' + IsOnLoadCalled + '; arg(target);', _onLoadInEditor);
var callOnLoadInTryCatch = CC_EDITOR && function (c) {
try {
c.onLoad();
}
catch (e) {
cc._throw(e);
}
c._objFlags |= IsOnLoadCalled;
_onLoadInEditor(c);
};
var callOnDestroyInTryCatch = CC_EDITOR && callerFunctor('onDestroy');
var callResetInTryCatch = CC_EDITOR && callerFunctor('resetInEditor');
var callOnFocusInTryCatch = CC_EDITOR && callerFunctor('onFocusInEditor');
Expand Down Expand Up @@ -68,12 +76,8 @@ var UnsortedInvoker = cc.Class({
},
});

var invokePreload = CompScheduler.createInvokeImpl(
CC_EDITOR ? callPreloadInTryCatch : callPreload
);
var invokeOnLoad = CompScheduler.createInvokeImpl(
CC_EDITOR ? callOnLoadInTryCatch : callOnLoad
);
var invokePreload = CompScheduler.createInvokeImpl(callPreload);
var invokeOnLoad = CompScheduler.createInvokeImpl(callOnLoad, false, IsOnLoadCalled);

var activateTasksPool = new js.Pool(MAX_POOL_SIZE);
activateTasksPool.get = function getActivateTask () {
Expand Down
11 changes: 10 additions & 1 deletion cocos2d/core/platform/CCAssetLibrary.js
Original file line number Diff line number Diff line change
Expand Up @@ -400,6 +400,8 @@ let _builtins = {
material: {}
};

let _builtinDeps = {};

function loadBuiltins (name, type, cb) {
let dirname = name + 's';
let builtin = _builtins[name] = {};
Expand All @@ -414,7 +416,10 @@ function loadBuiltins (name, type, cb) {
}
else {
for (let i = 0; i < assets.length; i++) {
builtin[`${assets[i].name}`] = assets[i];
var asset = assets[i];
var deps = cc.loader.getDependsRecursively(asset);
deps.forEach(uuid => _builtinDeps[uuid] = true);
builtin[`${asset.name}`] = asset;
}
}

Expand Down Expand Up @@ -445,6 +450,10 @@ AssetLibrary.resetBuiltins = function () {
effect: {},
material: {}
};
_builtinDeps = {};
};
AssetLibrary.getBuiltinDeps = function () {
return _builtinDeps;
}

module.exports = cc.AssetLibrary = AssetLibrary;
33 changes: 14 additions & 19 deletions cocos2d/core/platform/CCSys.js
Original file line number Diff line number Diff line change
Expand Up @@ -863,32 +863,27 @@ function initSys () {
/* Determine the browser type */
(function(){
var typeReg1 = /mqqbrowser|micromessenger|qq|sogou|qzone|liebao|maxthon|ucbs|360 aphone|360browser|baiduboxapp|baidubrowser|maxthon|mxbrowser|miuibrowser/i;
var typeReg2 = /qqbrowser|ucbrowser|edge/i;
var typeReg2 = /qqbrowser|ucbrowser|ubrowser|edge/i;
var typeReg3 = /chrome|safari|firefox|trident|opera|opr\/|oupeng/i;
var browserTypes = typeReg1.exec(ua);
if(!browserTypes) browserTypes = typeReg2.exec(ua);
if(!browserTypes) browserTypes = typeReg3.exec(ua);
var browserTypes = typeReg1.exec(ua) || typeReg2.exec(ua) || typeReg3.exec(ua);

var browserType = browserTypes ? browserTypes[0].toLowerCase() : sys.BROWSER_TYPE_UNKNOWN;

if (browserType === 'micromessenger')
browserType = sys.BROWSER_TYPE_WECHAT;
else if (browserType === "safari" && isAndroid)
if (browserType === "safari" && isAndroid)
browserType = sys.BROWSER_TYPE_ANDROID;
else if (browserType === "qq" && ua.match(/android.*applewebkit/i))
browserType = sys.BROWSER_TYPE_ANDROID;
else if (browserType === "trident")
browserType = sys.BROWSER_TYPE_IE;
else if (browserType === 'edge')
browserType === sys.BROWSER_TYPE_EDGE;
else if (browserType === "360 aphone")
browserType = sys.BROWSER_TYPE_360;
else if (browserType === "mxbrowser")
browserType = sys.BROWSER_TYPE_MAXTHON;
else if (browserType === "opr/")
browserType = sys.BROWSER_TYPE_OPERA;

sys.browserType = browserType;
let typeMap = {
'micromessenger': sys.BROWSER_TYPE_WECHAT,
'trident': sys.BROWSER_TYPE_IE,
'edge': sys.BROWSER_TYPE_EDGE,
'360 aphone': sys.BROWSER_TYPE_360,
'mxbrowser': sys.BROWSER_TYPE_MAXTHON,
'opr/': sys.BROWSER_TYPE_OPERA,
'ubrowser': sys.BROWSER_TYPE_UC
};

sys.browserType = typeMap[browserType] || browserType;
})();

/**
Expand Down
10 changes: 5 additions & 5 deletions cocos2d/core/renderer/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ function _initBuiltins(device) {
format: gfx.TEXTURE_FMT_RGB8,
mipmap: false,
});

return {
defaultTexture: defaultTexture,
programTemplates: [],
Expand Down Expand Up @@ -142,10 +142,10 @@ cc.renderer = module.exports = {
const canvasRenderer = require('./canvas');
const Texture2D = require('./canvas/Texture2D');
const Device = require('./canvas/Device');

// It's actually running with original render engine
this.Device = Device;
this.Device = Device;

this.Texture2D = Texture2D;

this.canvas = canvas;
Expand All @@ -163,7 +163,7 @@ cc.renderer = module.exports = {
// TODO: remove HACK
if (!CC_EDITOR && cc.director) {
let ecScene = cc.director.getScene();
ecScene.setScale(1, 1, 1);
if (ecScene) ecScene.setScale(1, 1, 1);
}

if (cc.game.renderType === cc.game.RENDER_TYPE_CANVAS) {
Expand Down
Loading

0 comments on commit 86f1439

Please sign in to comment.