Skip to content

Commit f6f6357

Browse files
committed
Merge pull request cocos2d#1271 from xbruce/develop
Update CCClass CCActionManager
2 parents 6d318ae + dd38a51 commit f6f6357

File tree

3 files changed

+25
-21
lines changed

3 files changed

+25
-21
lines changed

README

Whitespace-only changes.

cocos2d/actions/CCActionManager.js

Lines changed: 20 additions & 20 deletions
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,8 @@ cc.HashElement = cc.Class.extend(/** @lends cc.HashElement# */{
6262
* @extends cc.Class
6363
*/
6464
cc.ActionManager = cc.Class.extend({
65-
_targets:null,
65+
_hashTargets:null,
66+
_arrayTargets:null,
6667
_currentTarget:null,
6768
_currentTargetSalvaged:false,
6869

@@ -78,7 +79,8 @@ cc.ActionManager = cc.Class.extend({
7879
* Constructor
7980
*/
8081
ctor:function () {
81-
this._targets = [];
82+
this._hashTargets = {};
83+
this._arrayTargets = [];
8284
this._currentTarget = null;
8385
this._currentTargetSalvaged = false;
8486
},
@@ -98,13 +100,14 @@ cc.ActionManager = cc.Class.extend({
98100
throw "cc.ActionManager.addAction(): action must be non-null";
99101

100102
//check if the action target already exists
101-
var element = this._searchElementByTarget(this._targets, target);
103+
var element = this._hashTargets[target.__instanceId];
102104
//if doesnt exists, create a hashelement and push in mpTargets
103105
if (!element) {
104106
element = new cc.HashElement();
105107
element.paused = paused;
106108
element.target = target;
107-
this._targets.push(element);
109+
this._hashTargets[target.__instanceId] = element;
110+
this._arrayTargets.push(element);
108111
}
109112
//creates a array for that eleemnt to hold the actions
110113
this._actionAllocWithHashElement(element);
@@ -117,7 +120,7 @@ cc.ActionManager = cc.Class.extend({
117120
* Removes all actions from all the targets.
118121
*/
119122
removeAllActions:function () {
120-
var locTargets = this._targets;
123+
var locTargets = this._arrayTargets;
121124
for (var i = 0; i < locTargets.length; i++) {
122125
var element = locTargets[i];
123126
if (element)
@@ -133,9 +136,7 @@ cc.ActionManager = cc.Class.extend({
133136
// explicit null handling
134137
if (target == null)
135138
return;
136-
var element = this._searchElementByTarget(this._targets, target);
137-
138-
//var element = (target in this._targets)? this._targets[ptarget]: null;
139+
var element = this._hashTargets[target.__instanceId];
139140
if (element) {
140141
if (element.actions.indexOf(element.currentAction) !== -1 && !(element.currentActionSalvaged))
141142
element.currentActionSalvaged = true;
@@ -146,9 +147,7 @@ cc.ActionManager = cc.Class.extend({
146147
} else {
147148
this._deleteHashElement(element);
148149
}
149-
} //else {
150-
//cc.log("cocos2d: removeAllActionsFromTarget: Target not found");
151-
//}
150+
}
152151
},
153152
/** Removes an action given an action reference.
154153
* @param {cc.Action} action
@@ -158,7 +157,7 @@ cc.ActionManager = cc.Class.extend({
158157
if (action == null)
159158
return;
160159
var target = action.getOriginalTarget();
161-
var element = this._searchElementByTarget(this._targets, target);
160+
var element = this._hashTargets[target.__instanceId];
162161

163162
if (element) {
164163
for (var i = 0; i < element.actions.length; i++) {
@@ -182,7 +181,7 @@ cc.ActionManager = cc.Class.extend({
182181
if(!target)
183182
throw "cc.ActionManager.removeActionByTag(): target must be non-null";
184183

185-
var element = this._searchElementByTarget(this._targets, target);
184+
var element = this._hashTargets[target.__instanceId];
186185

187186
if (element) {
188187
var limit = element.actions.length;
@@ -207,7 +206,7 @@ cc.ActionManager = cc.Class.extend({
207206
if(tag == cc.ACTION_TAG_INVALID)
208207
cc.log("cc.ActionManager.getActionByTag(): an invalid tag");
209208

210-
var element = this._searchElementByTarget(this._targets, target);
209+
var element = this._hashTargets[target.__instanceId];
211210
if (element) {
212211
if (element.actions != null) {
213212
for (var i = 0; i < element.actions.length; ++i) {
@@ -231,7 +230,7 @@ cc.ActionManager = cc.Class.extend({
231230
* @return {Number}
232231
*/
233232
numberOfRunningActionsInTarget:function (target) {
234-
var element = this._searchElementByTarget(this._targets, target);
233+
var element = this._hashTargets[target.__instanceId];
235234
if (element)
236235
return (element.actions) ? element.actions.length : 0;
237236

@@ -241,15 +240,15 @@ cc.ActionManager = cc.Class.extend({
241240
* @param {object} target
242241
*/
243242
pauseTarget:function (target) {
244-
var element = this._searchElementByTarget(this._targets, target);
243+
var element = this._hashTargets[target.__instanceId];
245244
if (element)
246245
element.paused = true;
247246
},
248247
/** Resumes the target. All queued actions will be resumed.
249248
* @param {object} target
250249
*/
251250
resumeTarget:function (target) {
252-
var element = this._searchElementByTarget(this._targets, target);
251+
var element = this._hashTargets[target.__instanceId];
253252
if (element)
254253
element.paused = false;
255254
},
@@ -259,7 +258,7 @@ cc.ActionManager = cc.Class.extend({
259258
*/
260259
pauseAllRunningActions:function(){
261260
var idsWithActions = [];
262-
var locTargets = this._targets;
261+
var locTargets = this._arrayTargets;
263262
for(var i = 0; i< locTargets.length; i++){
264263
var element = locTargets[i];
265264
if(element && !element.paused){
@@ -314,8 +313,9 @@ cc.ActionManager = cc.Class.extend({
314313
},
315314

316315
_deleteHashElement:function (element) {
317-
cc.ArrayRemoveObject(this._targets, element);
318316
if (element) {
317+
delete this._hashTargets[element.target.__instanceId];
318+
cc.ArrayRemoveObject(this._arrayTargets, element);
319319
element.actions = null;
320320
element.target = null;
321321
}
@@ -332,7 +332,7 @@ cc.ActionManager = cc.Class.extend({
332332
* @param {Number} dt delta time in seconds
333333
*/
334334
update:function (dt) {
335-
var locTargets = this._targets , locCurrTarget;
335+
var locTargets = this._arrayTargets , locCurrTarget;
336336
for (var elt = 0; elt < locTargets.length; elt++) {
337337
this._currentTarget = locTargets[elt];
338338
locCurrTarget = this._currentTarget;

cocos2d/platform/CCClass.js

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ function ClassManager(){
3939
return arguments.callee.name || (arguments.callee.toString()).match(/^function ([^(]+)/)[1];
4040
}
4141
ClassManager.id=(0|(Math.random()*998));
42+
ClassManager.instanceId=(0|(Math.random()*998));
4243
ClassManager.compileSuper=function(func, name, id){
4344
//make the func to a string
4445
var str = func.toString();
@@ -79,7 +80,9 @@ ClassManager.compileSuper.ClassManager = ClassManager;
7980
ClassManager.getNewID=function(){
8081
return this.id++;
8182
};
82-
83+
ClassManager.getNewInstanceId=function(){
84+
return this.instanceId++;
85+
};
8386

8487
(function () {
8588
var initializing = false, fnTest = /\b_super\b/;
@@ -150,6 +153,7 @@ ClassManager.getNewID=function(){
150153
// All construction is actually done in the init method
151154
if (this.ctor)
152155
this.ctor.apply(this, arguments);
156+
this.__instanceId = ClassManager.getNewInstanceId();
153157
}
154158

155159
Class.id = classId;

0 commit comments

Comments
 (0)