我正忙于在引擎中创建一个 leveleditor 类,但我坚持将成员函数作为另一个成员函数的参数传递。
首先我做了一个typedef
typedef void (LevelEditor::*CallFunctionPtr)();
然后我做了一个成员函数来检查用户是否用鼠标点击了一个hitregion。如果是这样,则需要调用另一个函数。所以我的第一个成员函数有 2 个参数
关卡编辑器.h
void CheckClickCollision(HitRegion* region, CallFunctionPtr callFunctionPtr);
关卡编辑器.cpp
void LevelEditor::CheckClickCollision( HitRegion* region, CallFunctionPtr callFunctionPtr)
{
if(GAME_ENGINE->GetLButtonMouseState())
{
if(!m_bIsLeftPressed && region->HitTest(m_MousePosition))
(this->*callFunction)();
m_bIsLeftPressed = true;
}
else
m_bIsLeftPressed = false;
}
然后我有两个愚蠢的示例成员函数:
关卡编辑器.h
void LevelUp();
void LevelDown();
关卡编辑器.cpp
void LevelEditor::LevelUp()
{
++m_iCurrentLevel;
}
void LevelEditor::LevelDown()
{
if(m_iCurrentLevel > 0)
--m_iCurrentLevel;
else
return;
}
现在我想在每个滴答声中调用该函数来检查是否有命中。所以在我的刻度函数中:
CheckClickCollision(m_LeftArrowRegionPtr, LevelDown);
CheckClickCollision(m_RightArrowRegionPtr, LevelUp);
在这里,我得到了 LevelDown 和 Levelup 的错误:
错误:void (LevelEditor::*)()" 类型的参数与 "CallFunctionPtr *" 类型的参数不兼容
不知道如何解决。尝试了不同的东西,没有任何效果