diff --git a/core/Base/Game.cpp b/core/Base/Game.cpp index ca575d4f..be9d983d 100644 --- a/core/Base/Game.cpp +++ b/core/Base/Game.cpp @@ -69,7 +69,7 @@ void e2d::Game::start() if (_config.isVSyncEnabled() || _frameInterval < interval) { - _last += _frameInterval; + _last = _now; __update(); } else diff --git a/core/Manager/CollisionManager.cpp b/core/Manager/CollisionManager.cpp index 6b9f520e..adf6cf35 100644 --- a/core/Manager/CollisionManager.cpp +++ b/core/Manager/CollisionManager.cpp @@ -47,8 +47,7 @@ void e2d::CollisionManager::__updateCollider(Collider* collider) { if (Game::getInstance()->isPaused() || !Game::getInstance()->getConfig().isCollisionEnabled() || - SceneManager::getInstance()->isTransitioning() || - !collider->isCollisionNotify()) + SceneManager::getInstance()->isTransitioning()) return; for (size_t i = 0; i < _colliders.size(); i++) diff --git a/core/Node/Button.cpp b/core/Node/Button.cpp index 7179955f..23678502 100644 --- a/core/Node/Button.cpp +++ b/core/Node/Button.cpp @@ -175,8 +175,10 @@ void e2d::Button::setClickFunc(const Function& func) _func = func; } -void e2d::Button::_fixedUpdate() +void e2d::Button::_update() { + Node::_update(); + if (SceneManager::getInstance()->isTransitioning()) return; diff --git a/core/Node/Node.cpp b/core/Node/Node.cpp index 8423e1a1..31081492 100644 --- a/core/Node/Node.cpp +++ b/core/Node/Node.cpp @@ -122,14 +122,18 @@ void e2d::Node::_updateSelf() if (_needTransform) { updateTransform(); - CollisionManager::getInstance()->__updateCollider(&_collider); + if (_collider.isEnabled() && + _collider.isCollisionNotify() && + _collider.getShape() != Collider::Shape::None) + { + CollisionManager::getInstance()->__updateCollider(&_collider); + } } if (_autoUpdate && !Game::getInstance()->isPaused()) { this->onUpdate(); } - this->_fixedUpdate(); } void e2d::Node::_render() diff --git a/core/e2dnode.h b/core/e2dnode.h index d117df10..c0695737 100644 --- a/core/e2dnode.h +++ b/core/e2dnode.h @@ -408,33 +408,30 @@ protected: E2D_DISABLE_COPY(Node); // 更新节点 - void _update(); + virtual void _update(); // 更新自身 - void _updateSelf(); + virtual void _updateSelf(); // 渲染节点 - void _render(); + virtual void _render(); // 渲染节点轮廓 - void _renderOutline(); + virtual void _renderOutline(); // 渲染碰撞体轮廓 - void _renderCollider(); + virtual void _renderCollider(); // 设置节点所在场景 - void _setParentScene( + virtual void _setParentScene( Scene * scene ); // 子节点排序 - void _sortChildren(); + virtual void _sortChildren(); // 更新节点透明度 - void _updateOpacity(); - - // 提供给子类的更新函数 - virtual void _fixedUpdate() {} + virtual void _updateOpacity(); protected: String _name; @@ -821,15 +818,15 @@ protected: // 按钮状态枚举 enum class ButtonState { Normal, Mouseover, Selected }; + // 更新节点 + virtual void _update() override; + // 设置按钮状态 virtual void _setState(ButtonState state); // 刷新按钮显示 virtual void _updateVisible(); - // 更新按钮状态 - virtual void _fixedUpdate() override; - // 执行按钮函数对象 virtual void _runCallback();