Collision detection will not be opened by default, and use ShapeManager::setCollisionEnable to enable it.
This commit is contained in:
parent
6909067a60
commit
0a80483ba6
|
|
@ -186,7 +186,7 @@ void e2d::Input::__add(Listener * pListener)
|
|||
}
|
||||
}
|
||||
|
||||
void e2d::Input::add(VoidFunction callback, const String & name)
|
||||
void e2d::Input::add(ListenerCallback callback, const String & name)
|
||||
{
|
||||
auto pListener = new Listener(callback, name);
|
||||
pListener->start();
|
||||
|
|
|
|||
|
|
@ -9,7 +9,7 @@ e2d::Listener::Listener()
|
|||
Input::__add(this);
|
||||
}
|
||||
|
||||
e2d::Listener::Listener(VoidFunction callback, const String & name)
|
||||
e2d::Listener::Listener(ListenerCallback callback, const String & name)
|
||||
: m_bRunning(false)
|
||||
, m_sName(name)
|
||||
, m_callback(callback)
|
||||
|
|
@ -49,7 +49,7 @@ void e2d::Listener::setName(const String & name)
|
|||
m_sName = name;
|
||||
}
|
||||
|
||||
void e2d::Listener::setCallback(VoidFunction callback)
|
||||
void e2d::Listener::setCallback(ListenerCallback callback)
|
||||
{
|
||||
m_callback = callback;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -191,7 +191,7 @@ void e2d::ActionManager::stopAll()
|
|||
}
|
||||
}
|
||||
|
||||
std::vector<e2d::Action*> e2d::ActionManager::getActions(const String & strActionName)
|
||||
std::vector<e2d::Action*> e2d::ActionManager::get(const String & strActionName)
|
||||
{
|
||||
std::vector<Action*> vActions;
|
||||
for (const auto action : s_vActions)
|
||||
|
|
@ -204,7 +204,7 @@ std::vector<e2d::Action*> e2d::ActionManager::getActions(const String & strActio
|
|||
return std::move(vActions);
|
||||
}
|
||||
|
||||
std::vector<e2d::Action*> e2d::ActionManager::getAllActions()
|
||||
std::vector<e2d::Action*> e2d::ActionManager::getAll()
|
||||
{
|
||||
return s_vActions;
|
||||
}
|
||||
|
|
|
|||
|
|
@ -3,19 +3,35 @@
|
|||
#include "..\eshape.h"
|
||||
|
||||
// 形状集合
|
||||
std::vector<e2d::Shape*> s_vShapes;
|
||||
static std::vector<e2d::Shape*> s_vShapes;
|
||||
// 碰撞触发状态
|
||||
static bool s_bCollisionEnable = false;
|
||||
|
||||
|
||||
void e2d::ShapeManager::setCollisionEnable(bool bEnable)
|
||||
{
|
||||
s_bCollisionEnable = bEnable;
|
||||
}
|
||||
|
||||
void e2d::ShapeManager::__updateShape(e2d::Shape * pActiveShape)
|
||||
{
|
||||
// 判断碰撞触发是否打开
|
||||
if (!s_bCollisionEnable)
|
||||
return;
|
||||
|
||||
Node* pActiveNode = pActiveShape->m_pParentNode;
|
||||
if (pActiveNode)
|
||||
{
|
||||
// 获取节点所在场景
|
||||
Scene* pCurrentScene = pActiveNode->getParentScene();
|
||||
|
||||
// 判断与其他形状的交集情况
|
||||
for (auto pPassiveShape : s_vShapes)
|
||||
for (size_t i = 0; i < s_vShapes.size(); i++)
|
||||
{
|
||||
auto pPassiveShape = s_vShapes[i];
|
||||
// 判断两个形状是否是同一个对象
|
||||
if (pActiveShape == pPassiveShape)
|
||||
return;
|
||||
// 判断两物体是否是相互冲突的物体
|
||||
if (pActiveShape->m_nCollisionBitmask & pPassiveShape->m_nCategoryBitmask)
|
||||
{
|
||||
|
|
@ -23,7 +39,6 @@ void e2d::ShapeManager::__updateShape(e2d::Shape * pActiveShape)
|
|||
Node* pPassiveNode = pPassiveShape->m_pParentNode;
|
||||
// 判断两节点是否处于同一场景中
|
||||
if (pPassiveNode &&
|
||||
pPassiveNode != pActiveNode &&
|
||||
pPassiveNode->getParentScene() == pCurrentScene)
|
||||
{
|
||||
// 判断两形状交集情况
|
||||
|
|
@ -41,13 +56,13 @@ void e2d::ShapeManager::__updateShape(e2d::Shape * pActiveShape)
|
|||
}
|
||||
}
|
||||
|
||||
void e2d::ShapeManager::__addShape(Shape * pShape)
|
||||
void e2d::ShapeManager::__add(Shape * pShape)
|
||||
{
|
||||
if (pShape)
|
||||
{
|
||||
if (pShape->m_pParentNode)
|
||||
{
|
||||
WARN_IF(true, "ShapeManager::__addShape Failed! The shape is already added.");
|
||||
WARN_IF(true, "ShapeManager::__add Failed! The shape is already added.");
|
||||
return;
|
||||
}
|
||||
pShape->retain();
|
||||
|
|
@ -55,7 +70,7 @@ void e2d::ShapeManager::__addShape(Shape * pShape)
|
|||
}
|
||||
}
|
||||
|
||||
void e2d::ShapeManager::__delShape(Shape * pShape)
|
||||
void e2d::ShapeManager::__remove(Shape * pShape)
|
||||
{
|
||||
if (pShape)
|
||||
{
|
||||
|
|
|
|||
|
|
@ -30,8 +30,7 @@ void e2d::TimerManager::__update()
|
|||
|
||||
void e2d::TimerManager::start(double timeOut, TimerCallback callback)
|
||||
{
|
||||
auto pTimer = new Timer(callback, timeOut, 1, false, true);
|
||||
pTimer->start();
|
||||
(new Timer(L"", callback, timeOut, 1, false, true))->start();
|
||||
}
|
||||
|
||||
void e2d::TimerManager::__add(Timer * pTimer)
|
||||
|
|
|
|||
|
|
@ -47,7 +47,7 @@ e2d::Node::Node()
|
|||
e2d::Node::~Node()
|
||||
{
|
||||
ActionManager::__clearAllBindedWith(this);
|
||||
ShapeManager::__delShape(m_pShape);
|
||||
ShapeManager::__remove(m_pShape);
|
||||
for (auto child : m_vChildren)
|
||||
{
|
||||
SafeRelease(&child);
|
||||
|
|
@ -548,9 +548,9 @@ void e2d::Node::setSize(Size size)
|
|||
void e2d::Node::setShape(Shape * pShape)
|
||||
{
|
||||
// 删除旧的形状
|
||||
ShapeManager::__delShape(m_pShape);
|
||||
ShapeManager::__remove(m_pShape);
|
||||
// 添加新的形状
|
||||
ShapeManager::__addShape(pShape);
|
||||
ShapeManager::__add(pShape);
|
||||
|
||||
if (pShape)
|
||||
{
|
||||
|
|
@ -755,7 +755,7 @@ void e2d::Node::runAction(Action * action)
|
|||
|
||||
void e2d::Node::resumeAction(const String & strActionName)
|
||||
{
|
||||
auto actions = ActionManager::getActions(strActionName);
|
||||
auto actions = ActionManager::get(strActionName);
|
||||
for (auto action : actions)
|
||||
{
|
||||
if (action->getTarget() == this)
|
||||
|
|
@ -767,7 +767,7 @@ void e2d::Node::resumeAction(const String & strActionName)
|
|||
|
||||
void e2d::Node::pauseAction(const String & strActionName)
|
||||
{
|
||||
auto actions = ActionManager::getActions(strActionName);
|
||||
auto actions = ActionManager::get(strActionName);
|
||||
for (auto action : actions)
|
||||
{
|
||||
if (action->getTarget() == this)
|
||||
|
|
@ -779,7 +779,7 @@ void e2d::Node::pauseAction(const String & strActionName)
|
|||
|
||||
void e2d::Node::stopAction(const String & strActionName)
|
||||
{
|
||||
auto actions = ActionManager::getActions(strActionName);
|
||||
auto actions = ActionManager::get(strActionName);
|
||||
for (auto action : actions)
|
||||
{
|
||||
if (action->getTarget() == this)
|
||||
|
|
@ -791,7 +791,7 @@ void e2d::Node::stopAction(const String & strActionName)
|
|||
|
||||
e2d::Action * e2d::Node::getAction(const String & strActionName)
|
||||
{
|
||||
auto actions = ActionManager::getActions(strActionName);
|
||||
auto actions = ActionManager::get(strActionName);
|
||||
for (auto action : actions)
|
||||
{
|
||||
if (action->getTarget() == this)
|
||||
|
|
@ -805,7 +805,7 @@ e2d::Action * e2d::Node::getAction(const String & strActionName)
|
|||
std::vector<e2d::Action*> e2d::Node::getActions(const String & strActionName)
|
||||
{
|
||||
std::vector<Action*>::iterator iter;
|
||||
auto actions = ActionManager::getActions(strActionName);
|
||||
auto actions = ActionManager::get(strActionName);
|
||||
for (iter = actions.begin(); iter != actions.end();)
|
||||
{
|
||||
if ((*iter)->getTarget() != this)
|
||||
|
|
|
|||
|
|
@ -2,39 +2,6 @@
|
|||
#include "..\enodes.h"
|
||||
#include "..\emanagers.h"
|
||||
|
||||
e2d::Timer::Timer()
|
||||
: m_bRunning(false)
|
||||
, m_nRunTimes(0)
|
||||
, m_Callback(nullptr)
|
||||
, m_fInterval(0)
|
||||
, m_fLast(0)
|
||||
, m_nUpdateTimes(-1)
|
||||
, m_bAtOnce(false)
|
||||
, m_bAutoRelease(false)
|
||||
, m_bClear(true)
|
||||
{
|
||||
TimerManager::__add(this);
|
||||
}
|
||||
|
||||
e2d::Timer::Timer(TimerCallback callback, double interval /* = 0 */, int updateTimes /* = -1 */, bool atOnce /* = false */, bool autoRelease /* = false */)
|
||||
: m_bRunning(false)
|
||||
, m_nRunTimes(0)
|
||||
, m_Callback(nullptr)
|
||||
, m_fInterval(0)
|
||||
, m_fLast(0)
|
||||
, m_nUpdateTimes(-1)
|
||||
, m_bAtOnce(false)
|
||||
, m_bAutoRelease(false)
|
||||
, m_bClear(true)
|
||||
{
|
||||
this->setCallback(callback);
|
||||
this->setUpdateTimes(updateTimes);
|
||||
this->setInterval(interval);
|
||||
m_bAutoRelease = autoRelease;
|
||||
m_bAtOnce = atOnce;
|
||||
TimerManager::__add(this);
|
||||
}
|
||||
|
||||
e2d::Timer::Timer(const String & name, TimerCallback callback, double interval /* = 0 */, int updateTimes /* = -1 */, bool atOnce /* = false */, bool autoRelease /* = false */)
|
||||
: m_bRunning(false)
|
||||
, m_nRunTimes(0)
|
||||
|
|
|
|||
|
|
@ -153,7 +153,7 @@ class Input
|
|||
public:
|
||||
// 添加输入监听
|
||||
static void add(
|
||||
VoidFunction callback, /* 回调函数 */
|
||||
ListenerCallback callback, /* 回调函数 */
|
||||
const String & name = L"" /* 监听器名称 */
|
||||
);
|
||||
|
||||
|
|
|
|||
|
|
@ -12,6 +12,9 @@ namespace e2d
|
|||
// 返回值和参数列表都为空的函数
|
||||
typedef std::function<void(void)> VoidFunction;
|
||||
|
||||
// 监听器回调函数
|
||||
typedef VoidFunction ListenerCallback;
|
||||
|
||||
// 定时器回调函数
|
||||
typedef VoidFunction TimerCallback;
|
||||
|
||||
|
|
@ -582,9 +585,9 @@ protected:
|
|||
};
|
||||
|
||||
|
||||
class SceneManager;
|
||||
class Node;
|
||||
class Action;
|
||||
class SceneManager;
|
||||
|
||||
// 场景
|
||||
class Scene :
|
||||
|
|
@ -667,7 +670,7 @@ public:
|
|||
Listener();
|
||||
|
||||
Listener(
|
||||
VoidFunction callback, /* 回调函数 */
|
||||
ListenerCallback callback, /* 回调函数 */
|
||||
const String & name = L"" /* 监听器名称 */
|
||||
);
|
||||
|
||||
|
|
@ -693,7 +696,7 @@ public:
|
|||
|
||||
// 修改回调函数
|
||||
void setCallback(
|
||||
VoidFunction callback
|
||||
ListenerCallback callback
|
||||
);
|
||||
|
||||
// 更新
|
||||
|
|
@ -703,7 +706,7 @@ protected:
|
|||
String m_sName;
|
||||
bool m_bRunning;
|
||||
bool m_bClear;
|
||||
VoidFunction m_callback;
|
||||
ListenerCallback m_callback;
|
||||
};
|
||||
|
||||
// String 类模板函数定义
|
||||
|
|
|
|||
|
|
@ -181,12 +181,12 @@ public:
|
|||
static void stopAll();
|
||||
|
||||
// 获取所有名称相同的动作
|
||||
static std::vector<Action *> getActions(
|
||||
static std::vector<Action *> get(
|
||||
const String & strActionName
|
||||
);
|
||||
|
||||
// 获取所有动作
|
||||
static std::vector<Action*> getAllActions();
|
||||
static std::vector<Action*> getAll();
|
||||
|
||||
private:
|
||||
// 更新动画状态
|
||||
|
|
@ -300,6 +300,12 @@ class ShapeManager
|
|||
friend Node;
|
||||
friend Shape;
|
||||
|
||||
public:
|
||||
// 开启或禁用碰撞触发 onCollide 函数
|
||||
static void setCollisionEnable(
|
||||
bool bEnable
|
||||
);
|
||||
|
||||
private:
|
||||
// 更新形状
|
||||
static void __updateShape(
|
||||
|
|
@ -307,12 +313,12 @@ private:
|
|||
);
|
||||
|
||||
// 添加形状
|
||||
static void __addShape(
|
||||
static void __add(
|
||||
Shape * pShape
|
||||
);
|
||||
|
||||
// 删除已绑定的形状
|
||||
static void __delShape(
|
||||
static void __remove(
|
||||
Shape * pShape
|
||||
);
|
||||
};
|
||||
|
|
|
|||
|
|
@ -47,18 +47,8 @@ class Timer :
|
|||
friend TimerManager;
|
||||
|
||||
public:
|
||||
Timer();
|
||||
|
||||
Timer(
|
||||
TimerCallback callback, /* 定时器回调函数 */
|
||||
double interval = 0, /* 时间间隔(秒) */
|
||||
int times = -1, /* 执行次数(设 -1 为永久执行) */
|
||||
bool atOnce = false, /* 是否立即执行 */
|
||||
bool autoRelease = false /* 自动清除 */
|
||||
);
|
||||
|
||||
Timer(
|
||||
const String &name, /* 定时器名称 */
|
||||
const String &name = L"", /* 定时器名称 */
|
||||
TimerCallback callback = nullptr, /* 定时器回调函数 */
|
||||
double interval = 0, /* 时间间隔(秒) */
|
||||
int times = -1, /* 执行次数(设 -1 为永久执行) */
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@
|
|||
<ClInclude Include="..\..\core\eactions.h" />
|
||||
<ClInclude Include="..\..\core\easy2d.h" />
|
||||
<ClInclude Include="..\..\core\ebase.h" />
|
||||
<ClInclude Include="..\..\core\ecommon.h" />
|
||||
<ClInclude Include="..\..\core\emacros.h" />
|
||||
<ClInclude Include="..\..\core\emanagers.h" />
|
||||
<ClInclude Include="..\..\core\enodes.h" />
|
||||
|
|
@ -75,9 +76,9 @@
|
|||
<ClCompile Include="..\..\core\Shape\Ellipse.cpp" />
|
||||
<ClCompile Include="..\..\core\Shape\Rect.cpp" />
|
||||
<ClCompile Include="..\..\core\Shape\Shape.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Data.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\File.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Music.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Path.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Random.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Timer.cpp" />
|
||||
<ClCompile Include="..\..\core\Transition\ETransition.cpp" />
|
||||
|
|
|
|||
|
|
@ -36,6 +36,7 @@
|
|||
<ClInclude Include="..\..\core\etools.h" />
|
||||
<ClInclude Include="..\..\core\etransitions.h" />
|
||||
<ClInclude Include="..\..\core\eshape.h" />
|
||||
<ClInclude Include="..\..\core\ecommon.h" />
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClCompile Include="..\..\core\Action\Action.cpp">
|
||||
|
|
@ -128,9 +129,6 @@
|
|||
<ClCompile Include="..\..\core\Manager\TimerManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\Data.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\Music.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
|
|
@ -200,5 +198,8 @@
|
|||
<ClCompile Include="..\..\core\Common\Listener.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\Path.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -214,9 +214,9 @@
|
|||
<ClCompile Include="..\..\core\Shape\Ellipse.cpp" />
|
||||
<ClCompile Include="..\..\core\Shape\Rect.cpp" />
|
||||
<ClCompile Include="..\..\core\Shape\Shape.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Data.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\File.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Music.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Path.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Random.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Timer.cpp" />
|
||||
<ClCompile Include="..\..\core\Transition\ETransition.cpp" />
|
||||
|
|
|
|||
|
|
@ -129,9 +129,6 @@
|
|||
<ClCompile Include="..\..\core\Manager\TimerManager.cpp">
|
||||
<Filter>Manager</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\Data.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\Music.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
|
|
@ -201,5 +198,8 @@
|
|||
<ClCompile Include="..\..\core\Common\Listener.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\Path.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
</Project>
|
||||
|
|
@ -235,7 +235,7 @@
|
|||
<ClCompile Include="..\..\core\Shape\Ellipse.cpp" />
|
||||
<ClCompile Include="..\..\core\Shape\Rect.cpp" />
|
||||
<ClCompile Include="..\..\core\Shape\Shape.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Data.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Path.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\File.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Music.cpp" />
|
||||
<ClCompile Include="..\..\core\Tool\Random.cpp" />
|
||||
|
|
|
|||
|
|
@ -156,9 +156,6 @@
|
|||
<ClCompile Include="..\..\core\Tool\Music.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\Data.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\File.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
|
|
@ -189,6 +186,9 @@
|
|||
<ClCompile Include="..\..\core\Common\Listener.cpp">
|
||||
<Filter>Common</Filter>
|
||||
</ClCompile>
|
||||
<ClCompile Include="..\..\core\Tool\Path.cpp">
|
||||
<Filter>Tool</Filter>
|
||||
</ClCompile>
|
||||
</ItemGroup>
|
||||
<ItemGroup>
|
||||
<ClInclude Include="..\..\core\etools.h" />
|
||||
|
|
|
|||
Loading…
Reference in New Issue