エンジンで leveleditor クラスを作成するのに忙しいのですが、メンバー関数を別のメンバー関数のパラメーターとして渡すことに行き詰まっています。
まず、typedefを作成しました
typedef void (LevelEditor::*CallFunctionPtr)();
次に、ユーザーがヒット領域をマウスでクリックしたかどうかを確認するメンバー関数を作成しました。その場合は、別の関数を呼び出す必要があります。だから私は2つのパラメータを持つ私の最初のメンバー関数を持っています
LevelEditor.h
void CheckClickCollision(HitRegion* region, CallFunctionPtr callFunctionPtr);
LevelEditor.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;
}
次に、2 つのばかげたメンバー関数の例を示します。
LevelEditor.h
void LevelUp();
void LevelDown();
LevelEditor.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 *" のパラメーターと互換性がありません
それを修正する方法がわかりません。さまざまなことを試しましたが、何も機能しませんでした