Im now using this setup in my server, it can create node, run action , control node’s params, handle collider event, that’s all i need to run in server. It can also run on multiple “game room” if u create a node for each room, no cross collide event between room because each room have its own collider manager. The only thing i think i need but i cant do now is different game FPS.
Btw here it is, first i init the engine for global :
/** cocos **/
global.Editor = {
isMainProcess: true,
versions:{},
log:function(str){
console.log(str);
}
};
process.versions.electron = "";
require("./engine-master");
global.window = {
addEventListener:function(str,cb,b){
cb();
},
removeEventListener:function(){},
setTimeout:function(cb,time_out){
setTimeout(cb,time_out);
}
};
//simulate document variable
global.document = {};
//predefine cc.sys.capabilities variable
cc.sys.capabilities = {
"canvas": false,
"opengl": false,
"webp": false
};
require("./engine-master/CCBoot");
//console.log("cc.ENGINE_VERSION",cc.ENGINE_VERSION);
cc.game._initRenderer = function(){};
//Config here
cc.initEngine({
width: 1280,
height: 720,
debugMode: 0,
exposeClassName: false,//faster class intantiate
showFPS: false,
frameRate: 60,
//id: "kem_game_portal",//web only
//renderMode: 0,//web only
//registerSystemEvent: false,???
//scenes: "scenes",?? maybe no need
groupList : ['Bullet', 'Creep'],
collisionMatrix:[[false, true], [true, false]]
},function(){
cc._engineLoaded = true;
});
cc._initDebugSetting(0);
require("./engine-master/cocos2d");
require("./engine-master/cocos2d/actions");
require("./engine-master/cocos2d/core/CCScheduler");
require("./engine-master/cocos2d/core/CCNode");
require("./engine-master/cocos2d/core/components/CCComponent");
require("./engine-master/cocos2d/core/renderer");
require("./engine-master/cocos2d/core/collider");
//No Render
cc.renderer = {clear:function(){},rendering:function(){},pushDirtyNode:function(){}};
//creating a director instance
//cc.director = cc.Director._getInstance();
cc.director = new cc.Director();
cc.director.init();
//Enable collision manager
cc.director.getCollisionManager().enabled = true;
//Rewrite Main Loop like in normal game ( not editor )
cc.director.mainLoop = function () {
this.calculateDeltaTime();
if (!this._paused) {
this.emit(cc.Director.EVENT_BEFORE_UPDATE);
this._compScheduler.startPhase();
this._compScheduler.updatePhase(this._deltaTime);
this._scheduler.update(this._deltaTime);
this._compScheduler.lateUpdatePhase(this._deltaTime);
this.emit(cc.Director.EVENT_AFTER_UPDATE);
cc.Object._deferredDestroy();
}
}
//another defined variable in nodejs environment
cc.engine = {isPlaying:true,emit:function(){},attachedObjsForEditor:[]};
_Scene = window._Scene || {};
beFalse = function(){return false;}
_Scene.DetectConflict = {
beforeAddChild: beFalse,
afterAddChild: beFalse,
checkConflict_Layout: beFalse,
checkConflict_Widget: beFalse,
};
//Running cocos
cc.game.run();
And then in each “game room” in server, i create it own collider manager and call schedule update that manager:
this.GameArea = new cc.Node();//i will add node to this node so can easily destroy all node if room close
this.GameCollisionManager = new cc.CollisionManager();
cc.director.getScheduler().scheduleUpdate(this.GameCollisionManager, cc.Scheduler.PRIORITY_SYSTEM, "game collision manager");
this.GameCollisionManager.enabled = true;