diff --git a/cocos/base/CCDirector.cpp b/cocos/base/CCDirector.cpp index de8365dc11..5df9c10929 100644 --- a/cocos/base/CCDirector.cpp +++ b/cocos/base/CCDirector.cpp @@ -89,6 +89,7 @@ extern const char* cocos2dVersion(void); const char *Director::EVENT_PROJECTION_CHANGED = "director_projection_changed"; const char *Director::EVENT_AFTER_DRAW = "director_after_draw"; const char *Director::EVENT_AFTER_VISIT = "director_after_visit"; +const char *Director::EVENT_BEFORE_UPDATE = "director_before_update"; const char *Director::EVENT_AFTER_UPDATE = "director_after_update"; Director* Director::getInstance() @@ -157,6 +158,8 @@ bool Director::init(void) _eventAfterDraw->setUserData(this); _eventAfterVisit = new (std::nothrow) EventCustom(EVENT_AFTER_VISIT); _eventAfterVisit->setUserData(this); + _eventBeforeUpdate = new (std::nothrow) EventCustom(EVENT_BEFORE_UPDATE); + _eventBeforeUpdate->setUserData(this); _eventAfterUpdate = new (std::nothrow) EventCustom(EVENT_AFTER_UPDATE); _eventAfterUpdate->setUserData(this); _eventProjectionChanged = new (std::nothrow) EventCustom(EVENT_PROJECTION_CHANGED); @@ -185,6 +188,7 @@ Director::~Director(void) CC_SAFE_RELEASE(_actionManager); CC_SAFE_DELETE(_defaultFBO); + delete _eventBeforeUpdate; delete _eventAfterUpdate; delete _eventAfterDraw; delete _eventAfterVisit; @@ -265,6 +269,7 @@ void Director::drawScene() //tick before glClear: issue #533 if (! _paused) { + _eventDispatcher->dispatchEvent(_eventBeforeUpdate); _scheduler->update(_deltaTime); _eventDispatcher->dispatchEvent(_eventAfterUpdate); } diff --git a/cocos/base/CCDirector.h b/cocos/base/CCDirector.h index 3d0cb5ba2e..ed994fc53a 100644 --- a/cocos/base/CCDirector.h +++ b/cocos/base/CCDirector.h @@ -97,7 +97,9 @@ class CC_DLL Director : public Ref { public: /** Director will trigger an event when projection type is changed. */ - static const char *EVENT_PROJECTION_CHANGED; + static const char* EVENT_PROJECTION_CHANGED; + /** Director will trigger an event before Schedule::update() is invoked. */ + static const char* EVENT_BEFORE_UPDATE; /** Director will trigger an event after Schedule::update() is invoked. */ static const char* EVENT_AFTER_UPDATE; /** Director will trigger an event after Scene::render() is invoked. */ @@ -538,7 +540,7 @@ protected: @since v3.0 */ EventDispatcher* _eventDispatcher; - EventCustom *_eventProjectionChanged, *_eventAfterDraw, *_eventAfterVisit, *_eventAfterUpdate; + EventCustom *_eventProjectionChanged, *_eventAfterDraw, *_eventAfterVisit, *_eventBeforeUpdate, *_eventAfterUpdate; /* delta time since last tick to main loop */ float _deltaTime; diff --git a/cocos/scripting/js-bindings/script/jsb_cocos2d.js b/cocos/scripting/js-bindings/script/jsb_cocos2d.js index 94b1d64625..a95409a838 100644 --- a/cocos/scripting/js-bindings/script/jsb_cocos2d.js +++ b/cocos/scripting/js-bindings/script/jsb_cocos2d.js @@ -1591,7 +1591,9 @@ cc.Touch.prototype.getLocationY = function(){ cc.Director.EVENT_PROJECTION_CHANGED = "director_projection_changed"; cc.Director.EVENT_AFTER_DRAW = "director_after_draw"; cc.Director.EVENT_AFTER_VISIT = "director_after_visit"; +cc.Director.EVENT_BEFORE_UPDATE = "director_before_update"; cc.Director.EVENT_AFTER_UPDATE = "director_after_update"; +cc.Director.EVENT_BEFORE_SCENE_LAUNCH = "director_before_scene_launch"; cc.Director.prototype.runScene = function(scene){ if (!this.getRunningScene()) {