Improve gc test case and add action cycle reference test

This commit is contained in:
pandamicro 2016-01-20 11:15:06 +08:00
parent f8016978ff
commit 751e2f6eb8
2 changed files with 133 additions and 98 deletions

View File

@ -12,7 +12,6 @@ var MySprite = cc.Sprite.extend({
// Scene Test 1
//
function runScene1(sender) {
var scene = new cc.Scene();
for (i = 0; i < 5; i++) {
@ -21,16 +20,7 @@ function runScene1(sender) {
scene.addChild(sprite);
}
// menu
var button = new cc.MenuItemFont("Go to Scene 2", runScene2);
button.fontSize = 20;
button.fontName = "Arial";
var menu = new cc.Menu();
menu.addChild(button);
menu.setPosition(300,20);
scene.addChild(menu);
cc.director.replaceScene(scene);
return scene;
}
//
@ -46,16 +36,7 @@ function runScene2(sender) {
scene.addChild(sprite);
}
// menu
var button = new cc.MenuItemFont("Go to Scene 3", runScene3);
button.fontSize = 20;
button.fontName = "Arial";
var menu = new cc.Menu();
menu.addChild(button);
menu.setPosition(300,20);
scene.addChild(menu);
cc.director.replaceScene(scene);
return scene;
}
//
@ -72,19 +53,13 @@ function runScene3(sender) {
this.label.setPosition(300,300);
scene.addChild(this.label);
// menu
var button = new cc.MenuItemFont("Go to Scene 4", runScene4);
button.fontSize = 20;
button.fontName = "Arial";
var menu = new cc.Menu();
menu.addChild(button);
menu.setPosition(300,20);
scene.addChild(menu);
var touchListener = null;
var mouseListener = null;
// 'browser' can use touches or mouse.
// The benefit of using 'touches' in a browser, is that it works both with mouse events or touches events
if ('touches' in cc.sys.capabilities) {
cc.eventManager.addListener({
touchListener = cc.eventManager.addListener({
event: cc.EventListener.TOUCH_ALL_AT_ONCE,
onTouchesMoved: function (touches, event) {
var delta = touches[0].getDelta();
@ -94,7 +69,7 @@ function runScene3(sender) {
},
10);
} else if ('mouse' in cc.sys.capabilities) {
cc.eventManager.addListener({
mouseListener = cc.eventManager.addListener({
event: cc.EventListener.MOUSE,
onMouseMove: function (event) {
if(event.getButton() == cc.EventMouse.BUTTON_LEFT)
@ -109,7 +84,17 @@ function runScene3(sender) {
10);
}
cc.director.replaceScene(scene);
this.label.onExit = function () {
if (touchListener) {
cc.eventManager.removeListener(touchListener);
}
if (mouseListener) {
cc.eventManager.removeListener(mouseListener);
}
cc.LabelTTF.prototype.onExit.call(this);
};
return scene;
}
@ -141,34 +126,116 @@ function runScene4(sender) {
var action = cc.sequence(actionUp, delay.clone()).repeatForever();
sprite3.runAction(action);
// menu
var button = new cc.MenuItemFont("Go to Scene 5", runScene5);
button.fontSize = 20;
button.fontName = "Arial";
var menu = new cc.Menu();
menu.addChild(button);
menu.setPosition(300,20);
scene.addChild(menu);
cc.director.replaceScene(scene);
return scene;
}
function runScene5(sender) {
var scene = new TreeScene(5);
var scene = new cc.Scene();
var tree = createTree(5, cc.rect(0, 0, cc.winSize.width, cc.winSize.height));
scene.addChild(tree);
// menu
var button = new cc.MenuItemFont("Go to Scene 1", runScene1);
var menu = new cc.Menu();
var button = new cc.MenuItemFont("Replace Tree", function () {
var s = tree.parent;
tree.removeFromParent(true);
var levels = 4 + Math.floor( Math.random() * 4 );
tree = createTree(levels, cc.rect(0, 0, cc.winSize.width, cc.winSize.height));
s.addChild(tree);
});
button.fontSize = 20;
button.fontName = "Arial";
menu.addChild(button);
menu.setPosition(cc.winSize.width / 4, cc.winSize.height - 40);
scene.addChild(menu);
return scene;
}
function runScene6 () {
var scene = new cc.Scene();
var callback = function () {
cc.log('A callback which do nothing');
};
var sprite = new cc.Sprite("res/Images/grossini_dance_01.png");
sprite.x = cc.winSize.width/2;
sprite.y = cc.winSize.height/2;
sprite.action = cc.callFunc(callback, sprite);
var SPRITE_TAG = 999;
scene.addChild(sprite, 0, SPRITE_TAG);
var fontDef = new cc.FontDefinition();
fontDef.fontName = "Arial";
fontDef.fontSize = 20;
fontDef.boundingWidth = cc.winSize.width * 0.8;
var label = new cc.LabelTTF("Click screen to remove sprite and it should be garbage collected", fontDef);
label.setPosition(cc.winSize.width / 2, cc.winSize.height / 2 + 100);
scene.addChild(label);
var touchListener = cc.eventManager.addListener({
event: cc.EventListener.TOUCH_ALL_AT_ONCE,
onTouchesEnded: function (touches, event) {
cc.sys.garbageCollect();
cc.sys.garbageCollect();
cc.log('You should see immidiately two release messages in Console (Sprite and Action)');
label.setString('You should see immidiately two release messages in Console (Sprite and Action)');
var target = event.getCurrentTarget();
target.removeChildByTag(SPRITE_TAG);
cc.sys.garbageCollect();
cc.eventManager.removeListener(touchListener);
}
}, scene);
return scene;
}
var tests = [
runScene1,
runScene2,
runScene3,
runScene4,
runScene5,
runScene6
];
var replaceScene = (function () {
var curr = tests.length-1;
return function () {
if (curr < tests.length-1) {
curr++;
}
else {
curr = 0;
}
var scene = tests[curr]();
// menu
var menu = new cc.Menu();
var button = new cc.MenuItemFont("Next Scene", replaceScene);
button.fontSize = 20;
button.fontName = "Arial";
menu.addChild(button);
button = new cc.MenuItemFont("Run GC", cc.sys.garbageCollect);
button.fontSize = 20;
button.fontName = "Arial";
button.x = cc.winSize.width/4;
button.y = cc.winSize.height - 60;
menu.addChild(button);
menu.setPosition(cc.winSize.width/2, 20);
scene.addChild(menu);
cc.director.replaceScene(scene);
}
cc.sys.garbageCollect();
};
})();
//
// Main Entry point
@ -178,7 +245,7 @@ function runMain() {
var scene = new cc.Scene();
// menu
var button = new cc.MenuItemFont("Start Test", runScene1);
var button = new cc.MenuItemFont("Start Test", replaceScene);
button.fontSize = 20;
button.fontName = "Arial";
var menu = new cc.Menu();

View File

@ -1,4 +1,4 @@
var TreeScene = (function () {
var createTree = (function () {
var _ORIGIN_WIDTH = 85;
var _ORIGIN_HEIGHT = 121;
@ -29,7 +29,7 @@ var _createLevel = function (upLevel, width, height, scale) {
return level;
};
var _createTree = function (levels, zone) {
return function (levels, zone) {
var height = zone.height / levels;
var scale = height * 0.9 / _ORIGIN_HEIGHT;
if (scale > 1) scale = 1;
@ -42,36 +42,4 @@ var _createTree = function (levels, zone) {
return root;
};
var TreeScene = cc.Scene.extend({
ctor: function (levels) {
this._super();
this.levels = levels;
this.tree = _createTree(levels, cc.rect(0, 0, cc.winSize.width, cc.winSize.height));
this.addChild(this.tree);
// menu
var menu = new cc.Menu();
var button = new cc.MenuItemFont("Replace Tree", this.replaceTree, this);
button.fontSize = 20;
button.fontName = "Arial";
menu.addChild(button);
button = new cc.MenuItemFont("Run GC", cc.sys.garbageCollect);
button.fontSize = 20;
button.fontName = "Arial";
button.x = 150;
menu.addChild(button);
menu.setPosition(cc.winSize.width * 3/4 - 50, cc.winSize.height - 40);
this.addChild(menu);
},
replaceTree: function () {
this.tree.removeFromParent(true);
this.tree = _createTree(this.levels, cc.rect(0, 0, cc.winSize.width, cc.winSize.height));
this.addChild(this.tree);
}
});
return TreeScene;
})();